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

如何使用phpmailer逐个向多个地址发送电子邮件?,php,email,loops,foreach,phpmailer,Php,Email,Loops,Foreach,Phpmailer,我想要一个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; } e

我想要一个
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
字段中看到所有电子邮件收件人


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

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

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

?>

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


前面建议的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
收件人的
地址现在是
a@a.com, b@c.com, d@e.com

然后。。。你正在向他们所有人发送电子邮件

要一个接一个地发送电子邮件,我将在循环中完全初始化邮件对象。

(或者调用另一个函数,将地址作为参数传递)。

在foreach内部启动新的phpMail,然后发送电子邮件

$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()方法清除收件人列表:

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

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

谢谢您的回答。但这不是我想要的。我知道什么是CC,我不想那样做我该怎么做?我不想使用密件抄送和抄送。在答案中添加了一个例子,它不起作用。它是一个PHPmailer,没有邮件功能。我想使用PHPmailer发送电子邮件,而不仅仅是简单的PHP mail()函数。我有更多的游行例子,但你能提到哪个例子解释了如何做我想做的事吗?不要用那个老例子。在我对这个问题的评论中使用我链接到的答案。几乎所有的答案都有问题。我建议你使用它,它完全符合你的需要。这不是我想要的。我已经读过了。那么,为什么在读过之后,您选择完全错误地实现它,而忽略了它的所有正确建议呢?因为它将所有电子邮件地址都放在了字段中。我应该使用for或foreach并将所有内容放入循环中。这是它工作的唯一方式。不,它没有。阅读代码。它在“收件人”字段中放入一个地址,发送消息,然后清除“收件人”地址,然后重复。