【问题标题】:Sending emails with PHPMailer()使用 PHPMailer() 发送电子邮件
【发布时间】:2010-02-19 01:09:41
【问题描述】:

我创建了一个时事通讯系统,我的问题是:考虑到我必须将邮件发送到数百个电子邮件地址,我应该如何编写代码?

我已经和我的主机管理员讨论过,他告诉我我应该一个接一个地发送我的电子邮件,但每分钟不要超过 6 封。

我可以使用 $Timeout 属性吗?如果是这样,怎么做?

谢谢。

【问题讨论】:

  • 您是否将相同的邮件发送给不同的收件人?还是发给每个人的个性化邮件?
  • 许多recipents的相同电子邮件
  • 在这种情况下,您可以将繁重的负载外包给 smtp 服务器,只需发送一次电子邮件,并将收件人添加为密件抄送(出于隐私考虑)。所以,不是 php 发送每封邮件,只有一封。正如 Todd 已经提到的,您可以使用非常强大的 Pear Mail。或者,如果您无法安装它,PHPMailer() 也可以很好地完成。
  • 是的,我没有安装梨包的权限,我试图将收件人添加为密件抄送,但它不起作用(它根本不起作用,即使我没有错误我把我的代码写成try-catch)
  • @PvB:但大多数情况下,您可以向其发送电子邮件的收件人数量是有限的,具体取决于提供商的配置。

标签: php timeout phpmailer newsletter


【解决方案1】:

如果您必须逐一发送邮件(而不是使用密件抄送),我会使用数据库队列来遵守每分钟仅发送 6 封邮件的限制(无论您最终会采用什么解决方案用于实际发送邮件)。

例如你会有一个包含收件人、主题、邮件正文、最后发送日期、发送时间和状态的数据库表。

保存所有邮件,您将发送到数据库,然后设置一个每分钟运行一次的 cronjob 并检查队列中是否仍有邮件等待发送(例如 status = "unsend")。然后,您最多可以从队列中选择 6 封(或任何您的限制)邮件,将它们发送出去,将状态设置为“发送”(并增加“timessent”并将“lastsenddate”设置为实际时间,如果您like) 并等待下一个 cronjob 直到所有邮件都发送完毕。

这样你有几个好处:

  1. 您可以遵守每分钟限制
  2. 您将所有邮件都保存在数据库中,以后可以与它们相关联(例如,了解您上周五发送了多少封邮件 - 以及哪些邮件,或者了解某个地址是否已处理 - 以及何时以及如何处理)很多次 - 如果有人声称他从未收到过邮件/或太多)
  3. 通过跟踪邮件状态,您可以实现一个退回处理程序,例如如果邮件返回,请将邮件状态设置为“退回”,这样您就可以稍后重新发送邮件,以到达第一次返回“邮箱已满”消息的地址
  4. 通过将您的邮件保存到数据库中,您甚至可以通过添加数据库字段“开始时间”来设置“延迟邮件服务”,并使您的发送脚本尊重此日期,这样您就可以将圣诞节邮件排入队列春天:)

【讨论】:

  • 这是一篇很棒的帖子,我希望能找到一些 cronjob 参考资料:D 我从未使用过它。谢谢
【解决方案2】:

Pear Mail 将允许您从 PHP 发送电子邮件给很多人。

http://pear.php.net/package/Mail/

【讨论】:

  • 但是 PEAR Mail 有很多问题和 PHP 5.3 不兼容
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-06
相关资源
最近更新 更多