【问题标题】:use PHPMailer to send a newsletter (multiple masked recipients without BCC)使用 PHPMailer 发送时事通讯(没有密件抄送的多个蒙面收件人)
【发布时间】: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();
}

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

【问题讨论】:

    标签: php phpmailer


    【解决方案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
    猜你喜欢
    • 1970-01-01
    • 2015-12-19
    • 2021-08-15
    • 2012-12-23
    • 2013-12-22
    • 1970-01-01
    • 2011-02-01
    • 2014-05-11
    • 1970-01-01
    相关资源
    最近更新 更多