我想要一个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!";
}
}