我正在处理从DB获取客户端电子邮件的应用程序,将它们存储在数组中,循环遍历数组并分别向每个客户端发送电子邮件。
当PHPMailer向客户端发送双重电子邮件时,问题就出现了,并且在一封电子邮件中,“to”字段中包含两个收件人地址,在第二封电子邮件中也有第二封客户端电子邮件。
我认为这是一个漏洞。
这是我的代码: $ array = [0 => 'email@gmail.com',1 => 'email2@gmail.com']; //例
foreach ($array as $key => $value) {
$mail->addAddress($value);
if (!$mail->send())
{
throw new Exception($mail->ErrorInfo);
} else
{
$mail->addAddress(NULL); //Attempt to unset
header('Location: ../public/email.php'); //Redirect to start page
}
}
总结一下:当它运行时,它会发送电子邮件至'email@gmail.com'和'email2@gmail.com'。
第一封电子邮件将获得一份电子邮件。 第二封电子邮件将获得同一封电子邮件的两个副本,首先显示自己为收件人,第二封电子邮件将自己收件人+其他客户邮箱。
我只用2个获取的客户端进行了测试,我猜测会有更多的重复次数。 谢谢你们!
答案 0 :(得分:2)
这里有两个问题:
header
重定向而不终止您的脚本。这可能导致重定向运行后的代码,但无法保证多长时间和多长时间。您可以通过在循环结束时清除收件人来解决的第一个问题:
$mail->ClearAllRecipients();
至于第二个问题,你不应该在循环内的任何地方重定向,并且在发送完所有消息后重定向时,你应该使用exit;
退出你的scipt,以便之后不会执行任何操作。
答案 1 :(得分:0)
我认为你正在重新使用$ value。尝试使用unset($ value);看看它是否有帮助。您还可以查看here
警告 即使在foreach循环之后,$ value和最后一个数组元素的引用仍然存在。建议通过unset()销毁它。否则您将遇到以下行为: