【发布时间】:2023-04-09 14:49:02
【问题描述】:
伙计们,我真的需要一些帮助。 2天我已经完全卡住了。我需要一个方向来接受这个,因为我正在做的显然是行不通的,我变得非常沮丧。
我的总体目标是限制发送到目标域的电子邮件数量(如果在数据库中设置为限制)。这背后的原因是最大化从邮件服务器发送的电子邮件数量 + 能够根据跳出率和其他因素调整节流设置。
例如,如果我将 gmail 和 yahoo 的节流速率设置为“100”,它将提取最多 100 条记录(如“gmail”)和最多 100 条记录(如“雅虎”)并继续发送它们。但是,如果没有更多要处理的限制域,请将 $rest_max 拉到它们不像 $throttle_domain 的地方并继续发送它们。
问题 #1 - 我如何一遍又一遍地循环第一个查询,直到 $throttle_domain 用尽?
问题 #2 - 我将如何提取与节流域不匹配的记录以及如何将其与此相关联?
编辑 忘了提到下面的代码可以正常工作,除了它只会拉 1 个油门记录并停止。
$rest_max = '200';
// this is where i need to loop!?
$query = "SELECT * FROM `mailer_lists` WHERE `email` LIKE '%".$throttle_domain."' LIMIT ".$trim_speed."" ;
$result = mysql_query($query) or die(mysql_error());
while($row = mysql_fetch_array($result)){
$email = $row['email'];
$project = $row['project_name'];
$querya = "SELECT * FROM `mailer_controller` WHERE `project_name` = '".$project."'" ;
$resulta = mysql_query($querya) or die(mysql_error());
while($rowa = mysql_fetch_array($resulta)){
$project_name = $rowa['project_name'];
$from_name = $rowa['from_name'];
$from_email = $rowa['from_name']."@".$node_domain;
$subject = $rowa['subject'];
$body = $rowa['body'];
$content = addslashes($body);
// set header
$header_from = 'From: '.$from_name.' <'.$from_email.'>';
$header_reply_to = '-f '.$from_email;
// send mail
mail($email,$subject,$body,$header_from,$header_reply_to);
// delete contact from list only if it gets sent.
mysql_query("DELETE FROM mailer_lists WHERE `project_name` = '".$project_name."' AND `email` = '$email' ") or die(mysql_error());
}}
【问题讨论】:
-
为什么需要循环播放?您可以通过一个查询返回所有内容。
-
我该怎么做呢?我已经阅读了一些提到 mysql 查询中的内爆函数的帖子,但不确定在这种情况下它是如何工作的。你是这个意思吗?
-
约翰,我感觉你是新手。 ;) 这不是诽谤,我们在这里都是朋友。我还怀疑,一旦您从另一个角度看待这个问题,您就会拍自己的额头并获得程序员的升级。我将在这里发布答案,因为我的代码示例不适合评论框,但我不确定它是否真的能解决你的问题。