两个月前我遇到了这个问题,并且还在继续这个问题。 我正在使用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调用它并从浏览器调用它得到不同的结果?
答案 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。