【问题标题】:PHPMailer: Batch mailing using addBCC()PHPMailer:使用 addBCC() 批量发送邮件
【发布时间】:2022-01-26 07:57:18
【问题描述】:

好的,所以我需要从数据库中获取所有电子邮件地址,并批量发送电子邮件通知给每个地址。使用 addAddress() 将向每个收件人显示所有目标电子邮件。使用 addBCC() 修复了它,但现在还有另一个问题是缺少“To:”标头,我不知道如何添加它。

一个快速而肮脏的解决方法是这样的:

while($email = mysql_fetch_row($res)[0] {
   $mail->addAddress($email);
   $mail->send();
   $mail->clearAllRecipients();
}

这非常简单,这里根本不需要 addBCC()。除了它必须发送与电子邮件地址一样多的次数。显然,这不是很优雅,而且速度要慢得多。我认为仍然必须坚持使用 addBCC() 并辅以 addCustomHeader() 之类的东西,但我看不出这种组合如何不会遇到与 addAddress() 相同的命运,所有地址都在 send() 之前添加。是否存在真正的解决方法?

【问题讨论】:

  • 即使您正确设置了 SPF、DKIM 和 DMARC,密件抄送邮件也很有可能被投递到垃圾邮件文件夹。我通常会自动删除收件人:或抄送:字段中没有我的名字的任何内容。您可能会发现发送单独的电子邮件是唯一可靠的做法。
  • 这并不是密件抄送的真正目的。如果收件人过多,您的电子邮件也可能会被标记为垃圾邮件
  • 你是说即使自定义标题也不会阻止它进入垃圾邮件?

标签: php phpmailer bcc


【解决方案1】:

您可以单独使用addBCC。如果您不添加地址,PHPMailer 将创建一个名为undisclosed-recipients:; 的占位符,这是一个空的组地址,因此发送给任何人。这是一种非常常见的模式,已经使用了几十年。不同的服务对一条消息可以使用的密件抄送地址数量有不同的限制,因此您需要查看他们的文档。

一般来说,您最好单独发送每条消息。最快和最有效的发送方式是运行本地邮件服务器并将其用作中继。这将尽可能快地接收消息,并自动处理排队、重试和退回。 PHPMailer wiki 有an article about this

【讨论】:

  • 谢谢,非常有用。我不确定此时我真正需要什么。我这样做的社区相对较小,所以从技术上讲,我可以只使用 addBCC。然而,会员数量波动和不同邮件服务有不同限制的事实让我很困扰。我不认为我可以设置 MTA,因为服务器是私有的,我无法直接访问它。因此,唯一的其他选择是单独使用 PHPMailer 发送单个电子邮件,随着成员列表的增长,这可能会变得非常慢......所以最终它要么丢失邮件,要么性能低下。
  • 我认为你真的不需要太担心性能。电子邮件传递的瓶颈通常是接收者而不是发送者(通常是故意的)。 FWIW 我使用 PHPMailer 的发送速率高达每秒约 250 条消息,但接收者接受这种速率的可能性很小 - 而您自己的邮件服务器在中间意味着您可以将其留给继续。
猜你喜欢
  • 2011-12-07
  • 1970-01-01
  • 2018-08-30
  • 2018-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-13
相关资源
最近更新 更多