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

时间:2015-07-20 08:14:22

标签: php email loops foreach phpmailer

我希望每次运行PHP代码时都有foreach循环向多个地址发送电子邮件:

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

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

5 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:2)

例如使用PHPMailer。您可以使用CC(EDIT:BCC)字段。那时没有人会看到其他收件人。

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

答案 2 :(得分:0)

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

<?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(纯碳复制品)仍然可以被邮件列表中的其他人看到。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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