在while循环中发送电子邮件
当我尝试使用PHPMailer从while循环发送电子邮件时,它有时会向每个收件人发送2个邮件(有时候是3个副本)。在while循环中发送电子邮件
这是我的代码。你认为它有问题吗?
$list = $_POST['list'];
$items = rtrim($_POST['items'],",");
$query = "SELECT * FROM `mail` WHERE `ID` IN ($items)";
$result = mysql_query($query);
$from = "[email protected]";
$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变量,我的意思是发送$身体变量dublicated。
FIX:嘿,我完成了,我只是加了$body = "";
,它现在完美了!
只需在您的查询中输入"SELECT DISTINCT"
,就不会再看到数据库问题。
谢谢,但我检查它,它不是关于数据库dublicate,它是关于循环,我需要重置$ body变量我猜 – 2009-11-12 13:21:44
我认为这可能是数据库中重复的数据。
另外我很关心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...
}
你在数据库中的重复。 – David 2009-11-12 12:59:31
我同意戴维。检查你的数据库。 – mauris 2009-11-12 13:02:00
是的,我和大卫一起去。检查您的数据库 – sathish 2009-11-12 13:03:10