使用PHPMailer发送简报的最佳方式是什么?

时间:2018-05-15 11:19:01

标签: php email phpmailer privacy

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

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

什么是面对这个问题的最佳选择?

2 个答案:

答案 0 :(得分: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块之前的特定命令中提供的信息。当然,大多数邮件工具都会创建标题以匹配处理说明中的地址,但这些标题仅供参考,并且不需要相同。事实上,Bcc实际上是如何运作的:你指示你的邮件程序将电子邮件发送到这样的地址,但是从标题中省略它。

所以:

  • 你可以快速完成(密送和所有人的单一消息)
  • 你可以做得很好(To和每个收件人一条消息)

如果您征求我的意见,我们总是很高兴知道发送简报的确切电子邮件地址 - 我们中的许多人都有多个地址。如果您想提供自动取消订阅链接,那么发送自定义消息实际上是强制性的。

答案 1 :(得分:0)

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

为了实现这一点,我只是简单地从我的db中获取地址:

$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();非常重要,因为它是清除最后一圈收件人的人,以便“#{0}电子邮件的部分不会显示您的所有简报收件人。