PHPMailer发送双重电子邮件

时间:2016-09-08 19:28:39

标签: php mysql email phpmailer

我正在处理从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个获取的客户端进行了测试,我猜测会有更多的重复次数。 谢谢你们!

2 个答案:

答案 0 :(得分:2)

这里有两个问题:

  • 您没有从邮件中删除该地址,因此当您添加第二个地址时,第一个地址仍在那里,两个地址都会看到另一个地址。
  • 您在循环中使用header重定向而不终止您的脚本。这可能导致重定向运行后的代码,但无法保证多长时间和多长时间。

您可以通过在循环结束时清除收件人来解决的第一个问题:

$mail->ClearAllRecipients();

至于第二个问题,你不应该在循环内的任何地方重定向,并且在发送完所有消息后重定向时,你应该使用exit;退出你的scipt,以便之后不会执行任何操作。

答案 1 :(得分:0)

我认为你正在重新使用$ value。尝试使用unset($ value);看看它是否有帮助。您还可以查看here

  

警告   即使在foreach循环之后,$ value和最后一个数组元素的引用仍然存在。建议通过unset()销毁它。否则您将遇到以下行为: