我希望每次运行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
字段中看到所有电子邮件收件人。
我想要一个代码逐个发送电子邮件。
答案 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!";
}
}