2

两个月前我就遇到了这个问题,现在还在苦苦挣扎。我将 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 调用它并从浏览器调用它得到不同的结果?

4

2 回答 2

1

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

于 2012-08-29T15:33:45.460 回答
0

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

于 2017-05-11T20:06:54.137 回答