使用 PHPMailer 发送时事通讯(没有密件抄送的多个蒙面收件人)

Posted

技术标签:

【中文标题】使用 PHPMailer 发送时事通讯(没有密件抄送的多个蒙面收件人)【英文标题】:use PHPMailer to send a newsletter (multiple masked recipients without BCC) 【发布时间】:2013-07-07 19:50:45 【问题描述】:

我想使用 phpMailer 向 1000 位左右的收件人发送简报。我目前正在使用 addBCC 循环添加每个地址。时事通讯发送良好,但当我的订阅者收到时,“收件人”字段显示我设置为填充符的地址,而不是他们自己的地址。

我正在考虑改成这样的代码:

$mail = new PHPMailer();
$mail->SetFrom('info@domain.com', 'Domain.com');
$mail->Subject = $subject;
$mail2->Msghtml($body);

while ($row = mysql_fetch_array ($result)) 
    $mail2 = clone $mail;
    $mail2->AddAddress($row["email"]);
    $mail2->send();

但它似乎比密件抄送方法慢得多,效率也低得多。有没有更好的发送到列表的方法,这样每个用户都会收到带有正确“收件人”地址的电子邮件,并且无法访问其他用户的电子邮件?

【问题讨论】:

【参考方案1】:

你不需要克隆 PHPMailer;一个实例就足够了。每次在循环中清除您要发送到的地址即可。

$mail = new PHPMailer;
$mail->setFrom('info@domain.com', 'Domain.com');
$mail->Subject = $subject;
$mail->msgHTML($body);

while ($row = mysql_fetch_array ($result)) 
    $mail->addAddress($row["email"]);
    $mail->send();
    $mail->clearAllRecipients();

您可能还想对send() 进行一些错误检查,并且您不应再使用mysql* 函数。

【讨论】:

这个答案让我很开心 对不起,我知道这是一个旧线程 - 但我想做和 OP 一样的事情。 $mail->clearAllAddresses();运行致命错误时,此函数给我以下错误:调用未定义的方法 PHPMailer\PHPMailer\PHPMailer::clearAllAddresses() 呃,那么按照我的建议做吗? PHPMailer 提供了一个更完整的邮件列表示例。通常,发送单独的消息比使用密件抄送更可取,因为它允许使用 VERP 寻址等内容来更好地处理退回邮件。 @Synchro,看来正确的函数名是:ClearAllRecipients();不是“地址” 非常正确,谢谢,已修复。我提到的例子是here。

以上是关于使用 PHPMailer 发送时事通讯(没有密件抄送的多个蒙面收件人)的主要内容,如果未能解决你的问题,请参考以下文章

PHPMailer 或 php 邮件功能 - 显示密件抄送地址

使用 PHP 向使用 Gmail API 发送的电子邮件添加密件抄送

magento 时事通讯

Mandrill 规则将密件抄送电子邮件发送给另一个收件人

在 Rails 3 中发送时事通讯

通过 mailchimp 发送时事通讯