关于从php发送电子邮件的意见

时间:2010-01-27 08:30:26

标签: php email codeigniter cron

我正准备一个会向注册用户发送电子邮件通知的网站。根据我的经验,我知道,发送电子邮件对PHP来说是一个痛苦的过程,特别是当我们谈论成千上万时。我的一个网站不时发送电子邮件给1000-1500人。 PHP需要大约5分钟来完成,所以我们在服务器负载最低的情况下一夜之间运行它。我使用的是本地mail()函数,没有任何SMTP。这在专用服务器上运行良好,但我不是这个解决方案的忠实粉丝。

我希望能够随时发送类似的金额而不会让服务器崩溃(并将其列入黑名单)。
我读过,理想的解决方案是每隔几分钟从Cron触发的脚本中批量发送电子邮件(比如20)。这在我看来是一个非常合理的想法,但是......如果我无法访问Cron(并非所有托管服务提供商都能访问它),并且网站不够流行,无法在页面上触发脚本加载?

我坚持使用我的服务器进行邮件发送,而不是任何外部解决方案。

PS。我找到了这样的解决方案:http://www.mywebcron.com/但是这有什么好处吗?


修改

添加:

  • 我正在使用CodeIgniter,
  • 从当前服务器发送电子邮件的速度通常为每封电子邮件0.2秒。

2 个答案:

答案 0 :(得分:3)

使用PHP邮件程序类,例如PHPmailerSwiftMailer,您可以通过SMTP直接发送邮件,速度会快得多。 是的,发送大量电子邮件最好通过cron完成,这样你每分钟都可以发送X封电子邮件。您将以这种方式避免服务器过载。 如果您无法在服务器上创建cron作业,我建议您切换您的托管服务提供商,否则您链接的网站是您唯一可行的替代方案(但您依赖于某些第三方,这不是很酷)

答案 1 :(得分:2)

如果您不能使用定期工作,您可能需要查看像Gearman这样的排队解决方案。

您要做的是将所有电子邮件推送到队列中,并让一个或多个长时间运行的工作人员从队列中挑选作业。如果您想在系统中添加延迟,只需在其中添加一个睡眠。

一些非常基本的伪代码:

#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)