添加多个接收器时,PHPMailer 5.1会发送重复的电子邮件

时间:2012-02-13 17:06:45

标签: php email phpmailer

我使用PHPMailer的,而现在,从来没有真正出现过任何问题,但上周我安装了一个网站上我的CMS之一,客户坚持要2电子邮件接收的接触形式的内容,他的网站。

好的,我没想过,只需使用$ phpmailer-> AddAddress()函数添加电子邮件地址。但是,添加第二个接收器会导致PHPMailer将邮件两次发送到两个接收器。我尝试添加第三个接收器,看看我是否得到它三次,但这并没有改变任何东西。因此,添加2个以上的接收器会导致PHPMailer将消息两次发送给所有接收者。

我的代码中没有什么奇怪的。这是一个基本的PHPMailer示例:

$mail             = new PHPMailer();
$mail->AddReplyTo("name@yourdomain.com","First Last");
$mail->SetFrom('name@yourdomain.com', 'First Last');

$mail->AddAddress("info@address.com");
$mail->AddAddress("info@address.nl");
$mail->Subject    = "PHPMailer Test Subject via mail(), basic"; 

$mail->Send();

我的选项用完了。我完全不知道哪里出错了。

提前致谢

-

只是一些随意的想法:我注意到邮件是iso-8859-1默认,我的网站运行utf8。服务器本身可以进行“静默”重定向吗?

//编辑,^^解决了我的问题

// EDIT2:

好吧,它没有..今天脚本工作正常(只有1个邮件有2个接收器)但不久前这个奇怪的行为又开始了。有什么提示吗?

//解决方案:

好吧,我觉得安静愚蠢!答案Zulkhaery Basrul最接近实际问题!这就是发生的事情:我正在向“to”字段中的多个地址发送电子邮件。例如:

收件人:A,B,C

A / B都是我自己的地址。在Outlook中,我有一些消息规则可以将特定文件夹中的某些收件人的电子邮件放入其中。 A和B都有这个规则。

当我收到我的电子邮件时,这两封邮件都包含了to-field中的mailaddresses。导致两个邮件都满足两个规则的规则要求。因此,将原件保存在一个文件夹中并在另一个文件夹中创建一个副本(两次)。

感谢您的思考:)

7 个答案:

答案 0 :(得分:5)

您可以使用$SingleTo属性。

来自PHPMailer文档:

  

<强> $ SingleTo

     

提供让TO字段处理个别电子邮件的功能,   而不是发送到整个'TO地址'

$mail = new PHPMailer();

$mail->SingleTo = true; //will send mail to each email address individually


$mail->AddReplyTo("name@yourdomain.com","First Last");
$mail->SetFrom('name@yourdomain.com', 'First Last');

$mail->AddAddress("info@address.com");
$mail->AddAddress("info@address.nl");
$mail->Subject    = "PHPMailer Test Subject via mail(), basic"; 

$mail->Send();

答案 1 :(得分:4)

尝试在

之后添加
$mail->send();


$mail->ClearAddresses();

答案 2 :(得分:1)

好的,如果有人像我一样遇到这个问题:

我的网站运行在utf-8中,PHPMailer默认使用iso-8859-1。不知何故,脚本在两个字符集中运行,导致重复。将class.phpmailer.php文件中的charset更改为utf-8解决了这个问题!

答案 3 :(得分:1)

SingleTo不是个好主意。它仅适用于“sendmail”或“mail”传输,而不适用于SMTP。如果将SingleTo与SMTP一起使用,则只会忽略此参数而不会出现任何错误或警告,并且您可能会获得重复项。

根据该库的作者,SingleTo计划在PHPMailer 6.0的发布中弃用,并在7.0中删除。作者已经解释过,最好控制向更高级别的多个收件人发送邮件:“PHPMailer不是邮件列表发件人”。他们告诉我们不鼓励使用PHP mail()函数,因为它非常难以安全使用; SMTP更快,更安全,并提供更多控制和反馈。

但是SMTP与SingleTo不兼容 - 这就是PHPMailer的作者将删除SingleTo而不是SMTP的原因。

答案 4 :(得分:0)

我认为这些可以完成这项工作:)

$mail->SingleTo   = true;
$mail->CharSet    = "UTF-8";

答案 5 :(得分:0)

我尝试了一切,UTF8 / BOM检查所有文件,SingleTo-property,CharSet-property。 它不起作用。

我使用了Gmail中的“查看详细信息”功能,发现我的重复邮件是在没有主题的情况下发送的。

所以,我最后得到了一个非常非常脏的修复程序。 我把它直接放在类文件中send函数的第一行下面:

public function Send() {
  if ($this->Subject == "") {
    return true;
  }
  // ... rest of code...
}

答案 6 :(得分:0)

我遇到了同样的问题。唯一正确的答案是$mail->ClearAllRecipients() 当我使用接受的答案时,BCC邮件被发送给所有收件人。