我使用PHPMailer发送电子邮件。我在foreach循环中使用了它,以便向收件人列表发送电子邮件。
它正在工作,因为电子邮件正在发送,但每个收件人都会收到整个收件人列表!
foreach ($id as $item) {
$mail->addAddress($item);
$mail->Subject = $correo['mailAsunto'];
$mail->Body = $correo['mailMensaje'];
if(!$mail->send()) {
echo 'Error: ' . $mail->ErrorInfo;
} else {
echo 'Mail sent to '.$item.'<br>';
}
}
我试过:$mail->AddBCC($item);
而不是addAddress
,但电子邮件仍然可以在"TO"标题中看到。
我该怎么办?这可能会造成严重的隐私问题。
更新以防有人有类似的问题,在收到响应后,代码现在是这样的:
foreach ($id as $item) {
$mail->addAddress($item);
$mail->Subject = $correo['mailAsunto'];
$mail->Body = $correo['mailMensaje'];
if(!$mail->send()) {
echo 'Error: ' . $mail->ErrorInfo;
} else {
echo 'Mail sent to '.$item.'<br>';
$mail->ClearAddresses();
$mail->ClearAllRecipients();
}
}
您正在向同一个对象添加地址,因此它们正在累积。尝试在发送消息后删除每个地址:
foreach ($id as $item) {
$mail->addAddress($item);
$mail->Subject = $correo['mailAsunto'];
$mail->Body = $correo['mailMensaje'];
if(!$mail->send()) {
echo 'Error: ' . $mail->ErrorInfo;
} else {
echo 'Mail sent to '.$item.'<br>';
}
$mail->ClearAllRecipients(); ◄■■■■■■■■■■■■■■■■■■■■■■■■■
}
假设这是正确的PHPMailer github repo,请查看https://github.com/PHPMailer/PHPMailer/blob/master/class.phpmailer.php#L358。您需要将该标志设置为true。然后,等到循环结束后再执行send
函数。