繁体   English   中英

在while循环中发送电子邮件

[英]Sending email in while loop

当我尝试使用PHPMailer从while循环发送电子邮件时,有时会向每个收件人发送2份,有时是3份相同电子邮件的副本(就像随机的一样)。

这是我的代码。 您认为它有问题吗?

 $list = $_POST['list'];
    $items = rtrim($_POST['items'],",");
    $query = "SELECT * FROM `mail` WHERE `ID` IN ($items)";
    $result = mysql_query($query);
    $from = "donotreply@mysite.net";
    $fromname = "mysite";

    $mail = new PHPMailer(true); 

    $mail->IsSendmail(); 

    $mail->From       = $from;
    $mail->FromName   = $fromname;

    $mail->Subject  = "Your subscription was confirmed";

while ($row = mysql_fetch_array ($result))
{
    // HTML body
    $body .= "<p>Hi ". $row['name'] ." <br /><br />";
    $body .= "Your subscription request to " . $l_name ."'s list was confirmed.<br /><br />";
    $body .= "Thank You !<br /><br />";

    // Plain text body (for mail clients that cannot read HTML)
    $text_body  = "To view the message, please use an HTML compatible email viewer!";

    $mail->Body    = $body;
    $mail->AltBody = $text_body;
    $mail->AddAddress($row['email']);


    $mail->Send();
    $mail->ClearAddresses();

}

你认为我应该把那个mail->send(); 走出while循环并从数组中获取所有电子邮件?

还是您认为这是MySQL查询的问题?

编辑:我检查了数据库,关于数据库没有问题,但是我发现(让我说数组中有2封邮件)它正常发送第一封电子邮件,但是第二封邮件带有$ body变量,这意味着它发送了$ body变量。

FIX:嘿,我完成了,我只添加了$body = ""; 现在可以完美使用!

只需在查询中输入"SELECT DISTINCT"就不会再出现数据库问题。

我认为很可能是数据库中的重复数据。

我也担心在POST数组上缺少验证(或根本没有验证)。

也许值得您关注一下:

清理$ _POST变量

更新:虽然您可以在查询上使用DISTINCT,但我会质疑重复项是如何首先到达那里的,并将其视为单独的问题。

您在问题的结尾提到了修复程序,但这就是为什么会有所不同的原因:

.=运算符会附加到现有值上,而=覆盖它。 在第一次迭代的末尾和第二次迭代的开始, $body包含电子邮件正文,在第二次迭代期间,您将追加到现有值。 每次执行循环时,您都会在电子邮件末尾添加另一个副本。 如您所说,设置$body = ""解决此问题,因为它会清空电子邮件的正文。

解决该问题的另一种方法是进行第一个赋值=而不是.=

while ($row = mysql_fetch_array ($result))
{
  // HTML body
  $body = "<p>Hi ". $row['name'] ." <br /><br />"; // This line only has '='
  $body .= "Your subscription request to " . $l_name ."'s list was confirmed.<br /><br />";
  $body .= "Thank You !<br /><br />";

  // etc...
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM