我正在重写我的简报邮件,以限制发送到某些域名。基本上订阅者以mailer_lists
以另一种形式保存,然后他们被分配邮件ip以使用该邮件ip对指定域的限制。下面的代码是我试图收集这些信息。
我要做的是为查询匹配提取记录,循环遍历$node_ip
,$throttle_domain
和$throttle_speed
,然后在达到全局限制时停止提取记录,然后发送。我无法让它正常工作..
function queue(){
$query = "SELECT * FROM `mailer_lists` WHERE `ip` = '$node_ip' AND `email` LIKE '%".$throttle_domain."' LIMIT ".$throttle_speed."" ;
$result = mysql_query($query) or die(mysql_error());
$num_rows = mysql_num_rows($result);
$count = $num_rows;
}
if ($count < $global){
queue();
}else{
mail();
希望我有一半的技能。期待任何想法..
答案 0 :(得分:1)
让你的函数返回行数,如下所示:
function queue(){
$query = "SELECT * FROM `mailer_lists` WHERE `ip` = '$node_ip' AND `email` LIKE '%".$throttle_domain."' LIMIT ".$throttle_speed."" ;
$result = mysql_query($query) or die(mysql_error());
return mysql_num_rows($result);
}
不,你可以创造条件:
if (queue() < $global){
queue();
}else{
mail();
答案 1 :(得分:0)
函数中的计数未标记为全局,因此未更新。将全局$ count添加为队列函数的第一行。
另一个问题是,当计数永远不会到达全局变量时,它永远不会邮寄。所以最后一批不会被发送。
答案 2 :(得分:0)
我真的不知道这是否会起作用:D
<?php
function queue($ptr, $glbl){
/* each time we increment our range by $glbl */
$newPtr = $ptr + 100;
/* we use limit keyword to only fetch 100 rows each time */
$query = "SELECT * FROM `mailer_lists` WHERE `ip` = '$node_ip' LIMIT '$ptr', '$newPtr'" ;
$result = mysql_query($query) or die(mysql_error());
/* fetch the rows and send to theme an email */
while($row = mysql_fetch_row($result))
{
mail(mail($row['email'], $subject, $message));
}
}
/* here we use a static variable to track where we are we in the range */
static $next = 0;
$i = 0;
/* sending emails*/
queue($next, $glbl);
/* put pur next beginning range in
$next ant it will end with $next + $glbl as it in line 5 */
$next += $glbl;
?>