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

4
我想要一个 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提供的邮件列表示例,它可以完全满足您的需求。 - Synchro
这不是我想要的。我已经读过了。 - delacc
那么,既然你已经阅读了这些内容,为什么选择完全错误地实现它,无视所有正确的建议呢? - Synchro
因为它将所有的电子邮件地址都放在一个字段中。我应该使用for或foreach,并将所有内容放入循环中。这是唯一的工作方式。 - delacc
不,它并没有。请阅读代码。它将一个单一的地址放入“to”字段中,发送消息,然后清除该地址,然后重复此过程。 - Synchro
5个回答

4
在每个循环中使用clearAddresses()方法(https://goo.gl/r5TR2B)来清除收件人列表。请保留HTML标记。
$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!";
    }
}

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


2
例如,使用PHPMailer代替。您可以在其中使用CC(编辑:BCC)字段。然后其他收件人将不会被看到。
$mail = new PHPMailer();
$mail->AddBCC('a@a.com');

谢谢你的回答。但这不是我想要的。我知道什么是CC,我不想这样做。 - delacc

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很好用,但请注意,抄送(普通的抄送)仍然会对邮件列表中其他人可见。


我该怎么做?我不想使用BCC和CC。 - delacc
为了更好地解释问题,我在答案中添加了一个示例。 - Samvel Avanesov
它不起作用了。它是一个PHPmailer,它没有邮件功能。我想使用PHPmailer发送电子邮件,而不仅仅是简单的PHP mail()函数。 - delacc
我已经阅读了这篇文章,并且还有更多专业的例子。但是,您能否告诉我哪个例子解释了如何做我想要的事情? - delacc
不要使用那个旧的例子。请使用我在问题评论中链接的那个。 - Synchro

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
然后...你要把邮件发送给所有这些人。

如果要逐个发送邮件,我会在循环内完全初始化mail对象。
(或调用另一个函数并将地址作为参数传递)。


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

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