关于从 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 发送电子邮件的意见的主要内容,如果未能解决你的问题,请参考以下文章

使用 php 脚本从自己的本地 apache 服务器发送电子邮件 [关闭]

如果我需要从gmail回复到我的php网站该怎么办?

从邮件功能php发送电子邮件

如何使用php从xampp发送具有匿名名称的电子邮件

从 PHP 脚本发送电子邮件的最佳做法是啥?

需要JS帮助 - 观看谷歌工作表专栏,通过Gmail发送更新价值的电子邮件