0

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

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

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

  • MySQL:由于系统中的其他所有内容都通过 MySQL,我想使用 MySQL 表作为队列。问题是发送者必须一直在看桌子,这会导致处理器负载过高。
  • 文件:可以通过目录中的 XML 文件来完成队列。这对一切都不利(性能、服务器寿命……)
  • FIFO:我在 C 应用程序中使用过 FIFO,但对于高级应用程序来说,这可能太低级了,而且原始数据有点难以处理(大小、参数顺序……)。

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

提前致谢。

4

2 回答 2

2

我为 PHP 开发了一个电子邮件队列系统,它完全符合您的要求,请在此处查看。https://github.com/tin-cat/emailqueue

于 2015-01-27T22:09:46.530 回答
0

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

今天,我将使用基于SwiftmailerWhite October SwiftMailer DB Bundle的基于 Symfony 的系统来实现。

为了让它避开数据库(这不是最佳的,但它确实可以工作)我会使用 DBBundle 作为基础,而是让它通过一个队列系统,比如Beanstalkd(这不是一项大工作将其发送到队列而不是数据库表)。如果发送系统认为它“太旧”,它可以删除该作业。为队列作业添加优先级也很容易——它直接内置在 Beanstalkd 中。

您还可以选择简单地将消息放在队列中,“向用户 X 发送更新电子邮件” - 并且队列运行器在发送电子邮件之前转到原始数据库来组装电子邮件。

于 2015-01-28T10:00:37.223 回答