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

时间:2012-08-22 14:05:16

标签: php email phpmailer

两个月前我遇到了这个问题,并且还在继续这个问题。 我正在使用PHPMailer作为我的邮件列表程序。我有一个在某些时候运行的cron工作。但是,电子邮件存在问题。

我在一个循环中使用PHPMailer,我发送给所有的邮件列表成员。代码如下所示:

<?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调用它并从浏览器调用它得到不同的结果?

2 个答案:

答案 0 :(得分:1)

似乎存在与此相关的未解决问题:http://code.google.com/a/apache-extras.org/p/phpmailer/issues/detail?id=31。您可能希望将PHPMailer的副本升级到最新版本,然后重试。问题状态是“已修复”,但问题单中的注释中显示问题可能仍然存在。

答案 1 :(得分:0)

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