如果页面刷新,PHPmailer会发送重复项


PHPmailer sends duplicates if page refreshed

我从两个月前就遇到了这个问题,现在还在纠结。我的邮件列表程序使用PHPMailer。我有一个在特定时间运行的cron作业。然而,电子邮件出现了问题。

我在一个循环中使用PHPMailer,将其发送给所有mailinglist成员。代码如下:

<?php
require("PHPMailer/class.phpmailer.php");
$mail = new PHPMailer();
$mail->SingleTo = true;
$mail->CharSet = "UTF-8";
$mail->Subject = "Our news";
$r_receivers = array("John"=>"john@mail.com","Mary"=>"mary@mail.com","Rob"=>"rob@mail.com");
foreach($r_receivers as $name=>$email){
    $mail->SetFrom('no-reply@oursite.com', "Oursite");
    $mail->MsgHTML($sendContent);
    $mail->AddAddress($email, $name);
        $sendContent = "<p>E-mail body</p>";
    if($mail->Send())
        echo "Sent to: ".$email."<br/>";
    else
        echo "Not sent to: ".$email.", reason: ".$mail->ErrorInfo."<br/>";
    $mail->ClearAddresses();
}?>

当我用ajax调用这些代码时,它的工作非常完美。然而,如果我在浏览器中执行这些代码,或者刷新它,或者用cron作业调用它,它会向我发送重复的代码。

有人能解释一下为什么当我用浏览器/刷新打开它时会出错吗?为什么我用ajax调用它和从浏览器调用它会得到不同的结果?

似乎有一个与此相关的未决问题:http://code.google.com/a/apache-extras.org/p/phpmailer/issues/detail?id=31.您可能需要将PHPMailer的副本更新到最新版本,然后重试。问题状态为"已修复",但从问题单中的注释中可以看出问题可能仍然存在。

您正在使用SingleTo,这是不鼓励的。根据PHPMailer库的作者,SingleTo计划在PHPMailer6.0版本中弃用,并在7.0版本中删除。作者解释说,最好在更高的级别控制向多个收件人的发送,因为PHPMailer不是邮件列表发件人。他们告诉我们,也需要劝阻使用PHP mail()函数,因为它非常难以安全使用;SMTP更快、更安全,并提供更多的控制和反馈。由于SMTP与SingleTo不兼容,PHPMailer的作者将删除SingleTo,而不是SMTP。