PHP邮件发送器多个地址

104

可能是重复问题: PHPMailer AddAddress()

以下是我的代码。

require('class.phpmailer.php');
$mail = new PHPMailer();

$email = 'email1@test.example, email2@test.example, email3@test.example';
$sendmail = "$email";
$mail->AddAddress($sendmail,"Subject"); $mail->Subject = "Subject"; $mail->Body = $content;
if(!$mail->Send()) { # 发送邮件失败 $msg="未知错误,请稍后再试。"; } else { $msg="您的消息已发送,我们将尽快与您联系。"; } }

问题所在
如果$email 的值只有一个,它会发送。 但是多个地址时就无法发送。 我应该怎么做才能让它们都发送呢?我知道在mail函数中需要用逗号分隔多个电子邮件地址,但在phpmailer中似乎不起作用。

1个回答

298
你需要为每个收件人调用一次AddAddress方法。如下所示:
$mail->AddAddress('person1@domain.example', 'Person One');
$mail->AddAddress('person2@domain.example', 'Person Two');
// ..

更好的做法是将它们添加为抄送收件人。

$mail->AddCC('person1@domain.example', 'Person One');
$mail->AddCC('person2@domain.example', 'Person Two');
// ..
为了让事情变得简单,你应该通过循环数组来完成这个任务。
$recipients = array(
   'person1@domain.example' => 'Person One',
   'person2@domain.example' => 'Person Two',
   // ..
);
foreach($recipients as $email => $name)
{
   $mail->AddCC($email, $name);
}

22
注意:使用AddCC()替代AddAddress()会导致PHPMailer出现错误,错误信息为“Email error: You must provide at least one recipient email address”。PHPMailer好像通过将第一个CC地址复制到To字段来从中恢复过来。这最终导致邮件同时发送给了相同的电子邮件地址。 - doub1ejack
10
我只想补充一下,使用AddCC会向所有收件人发送电子邮件,但当他们打开电子邮件时,他们都会在标题中看到彼此的电子邮件。请改用AddBCC。 - badsyntax
4
问题不好,但这个回答一次性回答了我的三个问题 - 谢谢。 - RozzA
1
@doub1ejack 如何跟踪邮件是否已发送给所有收件人,包括“收件人”和“抄送”地址。如果有任何邮件未发送,如何记录它。 - Joyson
1
你应该总是将邮件发送给自己,因为你要发送的所有人都可能知道你的电子邮件地址,然后将所有收件人密送(BCC)或抄送(CC)。通常使用密送,以便收件人也不会看到彼此的电子邮件地址。 - Mattt
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接