PHP中的邮件队列

时间:2013-09-09 10:34:05

标签: php email queue

我正在开发一个可以处理大量电子邮件发送的应用程序,我正在寻找一个最小的电子邮件队列解决方案。

发送代码将执行的操作是从队列中获取“收件人”,“发件人”,“主题”,“文本”,“格式”字段,生成标题并发送电子邮件。如果发送不成功,则可以重试。我也想要一个优先系统,至少有两个优先级。

我一直在思考,我得到的想法是:

  • MySQL:由于系统中的其他所有内容都通过MySQL,我认为使用MySQL表作为队列。问题是发送方必须始终在桌面上查看,这会导致处理器负载过高。
  • 文件:队列可以通过目录中的XML文件完成。这对一切都很糟糕(性能,服务器寿命......)
  • FIFO:我在C应用程序中使用了FIFO,但对于高级应用程序来说可能这个级别太低了,原始数据处理起来有点困难(大小,参数顺序......)。

因此,我正在寻找有关如何以简单方式执行此电子邮件队列的想法。系统是用PHP完成的,如果有解决方案的话,我希望它是PHP语言。

提前致谢。

2 个答案:

答案 0 :(得分:2)

我已经为PHP开发了一个电子邮件队列系统,它完全符合您的要求,请在此处查看。 http://lorenzoherrera.github.io/emailqueue/

答案 1 :(得分:0)

我之前做过类似的事情,一天发送大约200,000封电子邮件。由于它们不是时间关键,我生成它们(使用Mail_Mime),然后将它们全部存储到数据库中,使用Mail_Queue,使用保持重新运行的shell脚本将它们发送出去如果机器的负载平均值正常。

今天,我使用围绕SwiftmailerWhite October SwiftMailer DB Bundle的基于Symfony的系统来做这件事。

让它避开数据库(这不是最佳的,但它确实工作)我会使用DBBundle作为基础,而是让它通过队列系统,如Beanstalkd(将它发送到队列而不是数据库表并不是一件大事。如果作业决定它太旧,发送系统可以删除该作业。为队列作业添加优先级也非常简单 - 它内置于Beanstalkd。

您也可以选择让队列中的消息简单,"向用户X发送更新电子邮件" - 并且队列运行器转到原始数据库,以便在发送之前汇编电子邮件。