如何使用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 字段中看到所有电子邮件收件人。

我要一个代码,一个一个发邮件。[​​=14=]

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

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

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

<?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);
};

?>

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

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

您遇到的问题是您在实际发送电子邮件之前实际上添加了多个收件人 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 对象。
(或调用另一个将地址作为参数传递的函数)。

在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!";
   }
}

在每个循环中使用方法 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!";
    }
}

因此您将拥有具有相同正文、主题和其他设置的相同对象。