【问题标题】:What's the best way to send a newsletter with PHPMailer?使用 PHPMailer 发送时事通讯的最佳方式是什么?
【发布时间】:2018-10-25 05:01:56
【问题描述】:

我正在尝试使用 PHPMailer 发送时事通讯,同时保护我的客户隐私。

一开始我用mail->addAddress('customerEmail']);设置了receiver配置,但我发现这样发送,每个receiver都可以看到其他客户的订阅者E-mail地址。 我将addAddress 更改为mail->addBCC('customerEmail']);,这样它就不会显示每个电子邮件地址(实际上现在它甚至不会显示要发送到的客户的收件人电子邮件地址),但是这样如果有人想回复电子邮件,他们的回复也会发送给其他订阅者...

对于您来说,面对这个问题的最佳选择是什么?

【问题讨论】:

  • 遍历每个客户并向他们发送时事通讯,而不是每个客户?示例:10 个客户。循环遍历您的客户表,让它每隔 10 个发送简报?
  • 不会增加发送时间吗?
  • 嗯,是的,它可能会,您可以在凌晨 3/4 点左右发送它吗?因此,当您必须使用构建 PHPMailer 的系统时,它不会真正影响性能吗?
  • 你怎么可能回复其他密件抄送收件人?检查生成的电子邮件源代码,它们甚至都不存在!
  • @ÁlvaroGonzález Es verdad, pensé que que como estaba en una carbon copy aunque fuese oculta al responder el email les llegaría a todos en copia。 Sin embargo si lo envío como BCC no hay manera de que aparezca el correo del receptor pero no el del resto。 ¿Alguna forma de lograr esto?

标签: php email phpmailer privacy


【解决方案1】:

电子邮件服务器不使用邮件标头来传递邮件。当您发送电子邮件时,您的电子邮件客户端会保持这样的对话*:

EHLO example.com
MAIL FROM: mail@example.com
RCPT TO: info@example.net, customers@example.org, john@example.com
DATA
From: Me <webmaster@example.com>
To: Customers <whatever@example.com>
Subject: Important info
Dear Blah,

Blah blah.

Regards,
.

(*)它是一个对话,因为它包括服务器对每个命令的响应,但我省略了那部分。

真正重要的是DATA 块之前的特定命令中提供的信息。当然,大多数邮件工具会创建标题以匹配处理指令中的地址,但这些标题纯粹是为了提供信息,它们不需要相同。事实上,这就是密件抄送的实际工作方式:您指示您的邮件程序将电子邮件发送到该地址,但在标题中省略它。

所以:

  • 您可以快速完成(密件抄送和一条消息供所有人使用)
  • 你可以做得很好(收件人和每个收件人一条消息)

如果您征求我的意见,最好知道发送时事通讯的确切电子邮件地址——我们中的许多人都有不止一个地址。如果您想提供自动退订链接,实际上必须发送自定义消息。

【讨论】:

  • 谢谢,我想我会为每个客户发送一封电子邮件,尽管这意味着发送时间会增加。
【解决方案2】:

据我所知,管理时事通讯的最佳方式是将电子邮件单独发送给每个客户,尽管这意味着发送时间会略有增加。通过这种方式,您可以提供自动退订链接和其他您无法提供的功能。

为了实现这一点,我只是做了一个简单的循环,从我的数据库中获取地址:

$sql = "SELECT `email` FROM `emails`";
$statement = $db->prepare($sql);
$statement->execute();

while ($fila = $statement->fetch()) {
    if(!empty($fila['email'])){
        $mail->addAddress($fila['email']);
        $success = $mail->Send();
        $mail->clearAllRecipients(); //Don't forget this!
    }
}

clearAllRecipients(); 方法非常重要,因为它会清除最后一圈的收件人,这样电子邮件的“收件人”部分就不会显示您的所有通讯收件人。

【讨论】:

    猜你喜欢
    • 2021-11-20
    • 2013-11-28
    • 2011-06-18
    • 1970-01-01
    • 2010-10-25
    • 2021-03-04
    • 1970-01-01
    • 1970-01-01
    • 2010-09-10
    相关资源
    最近更新 更多