关于从 php 发送电子邮件的意见
Posted
技术标签:
【中文标题】关于从 php 发送电子邮件的意见【英文标题】:Opinion on sending emails from php 【发布时间】:2011-01-09 20:45:53 【问题描述】:我正在准备一个向注册用户发送电子邮件通知的网站。根据我的经验,我知道,发送电子邮件对于 php 来说是一个痛苦的过程,尤其是当我们谈论成千上万的邮件时。我的一个网站不时向 1000-1500 人发送电子邮件。 PHP 大约需要 5 分钟才能完成,所以我们在服务器负载最低的时候运行它一夜。我正在使用没有任何 SMTP 的本机 mail()
函数。这在专用服务器上运行良好,但我不是这个解决方案的忠实粉丝。
我希望能够随时发送类似的金额,而不会冒服务器宕机(并将其列入黑名单)的风险。 我读过,理想的解决方案是每隔几分钟从由 Cron 触发的脚本分批发送电子邮件(比如 20 封)。在我看来,这似乎是一个非常合理的想法,但是...加载?
我坚持使用我的服务器来发送邮件,而不是任何外部解决方案。
附言。我找到了这样的解决方案:http://www.mywebcron.com/,但这有什么好处吗?
编辑
只是补充:
我正在使用 CodeIgniter, 从我当前的服务器发送电子邮件的速率通常是每封电子邮件 0.2 秒。【问题讨论】:
SwiftMailer 有一个 CodeIgniter 包装器;它在 wiki 中,试一试:codeigniter.com/wiki/CI_SWIFT_MAILER 【参考方案1】:使用PHPmailer或SwiftMailer等PHP邮件类,可以直接通过SMTP发送邮件,这样会快很多。 是的,发送大量电子邮件最好通过 cron 完成,因此您每分钟发送 X 封电子邮件。您将通过这种方式避免服务器过载。 如果您无法在您的服务器上创建 cron 作业,我建议您更换您的托管服务提供商,否则您链接的网站是您唯一可行的选择(但是您以这种方式依赖于某些第三方,这不是很酷)
【讨论】:
作为对 Jan 的回答的补充:如果您无法在服务器上安排 cron 作业(就像最便宜的托管解决方案一样),有一些纯 php 替代方案可以运行预定作业:@ 987654323@ 是其中一种选择。【参考方案2】:如果您不能使用定期作业,您可能需要研究像 Gearman 这样的排队解决方案。
您想要做的是将所有电子邮件推送到队列中,并让 1 个或多个长期运行的工作人员从队列中挑选工作。如果您想在系统中添加延迟,只需在其中添加一个 sleep 即可。
一些非常基本的伪代码:
#wherever you launch the jobs from
for each user
gearman.push(user.generateEmail())
#in your consumer script
while true
message = gearman.consume()
message.send()
sleep(5)
【讨论】:
以上是关于关于从 php 发送电子邮件的意见的主要内容,如果未能解决你的问题,请参考以下文章