如何使用phpmailer发送电子邮件到多个地址逐一


How to use phpmailer to send email to multiple addresses one by one?

我想要一个foreach循环发送电子邮件到多个地址每次我运行PHP代码:

$id = "a@a.com
    b@c.com
    d@e.com";
$new = explode("'n", $id);
foreach ($new as $addr) {
    $mail->addAddress($addr);
}
if (!$mail->send()) {
    echo "Mailer Error: " . $mail->ErrorInfo;
} else {
    echo "Message sent!";
}

但是它把所有的电子邮件地址放在to字段,然后发送电子邮件。

所以当有人收到邮件时,他可以看到to字段中所有的电子邮件地址。

我想要一个代码一个一个地发送电子邮件。

在每个循环中使用clearAddresses() (https://goo.gl/r5TR2B)方法来清除收件人列表:

$id = "a@a.com
    b@c.com
    d@e.com";
$new = explode("'n", $id);
foreach ($new as $addr) 
{
    $mail->clearAddresses();
    $mail->addAddress($addr);
    if (!$mail->send()) 
    {
        echo "Mailer Error: " . $mail->ErrorInfo;
    } 
    else 
    {
        echo "Message sent!";
    }
}

所以你会有相同的对象,相同的主体,主题和其他设置。

以PHPMailer为例。您可以使用抄送(编辑:密件抄送)字段。没有人会看到其他收件人。

$mail = new PHPMailer();
$mail->AddBCC('a@a.com');

问题是,在实际发送电子邮件之前,您实际上添加了多个收件人 addAddress()

, 你的循环…

$mail->addAddress('a@a.com');    // Add a recipient
$mail->addAddress('b@c.com');    // Add a another recipient
$mail->addAddress('d@e.com');    // Add a another recipient

TO地址现在是a@a.com, b@c.com, d@e.com
然后……你要把邮件发给他们所有人。

为了发送邮件one by one,我将在循环中初始化mail对象。
(或调用另一个函数将地址作为参数传递)

您应该循环创建和发送邮件-因此为每个收件人创建一个新的邮件消息。这样他们就看不到接收器了。例子:

<?php
$people = array("person1@mail.com", "person2@mail.com", "person3@mail.com");
foreach($people as $p) {
    $message = "Line 1'r'nLine 2'r'nLine 3";
    mail($p, 'My Subject', $message);
};
?>

也可以使用密件抄送字段(这是隐藏的抄送)。

之前建议的PHPMailer很好,但是您应该注意,邮件列表中的其他人仍然可以看到CC(普通副本)。

在foreach内部初始化新的PHPMailer,然后发送电子邮件。

$id = "a@a.com
b@c.com
d@e.com";
$new = explode("'n", $id);
foreach ($new as $addr) {
   $mail = new PHPMailer();
   $mail->addAddress($addr);
   if (!$mail->send()) {
      echo "Mailer Error: " . $mail->ErrorInfo;
   } else {
      echo "Message sent!";
   }
}
相关文章: