【问题标题】:Mailing queue in PHPPHP中的邮件队列
【发布时间】:2023-03-30 07:56:01
【问题描述】:

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

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

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

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

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

提前致谢。

【问题讨论】:

  • 如果 mysql 是瓶颈...您发送到许多电子邮件;) ...什么比数据库更快?
  • 不,不。问题不在于 MySQL。问题是电子邮件发件人。它是一个异步系统,发送者必须知道它什么时候有工作要做。使用 MySQL 的唯一方法是定期执行查询,这是一项非常消耗 CPU 的任务。
  • 我有一个这样的邮件队列,但我不保存电子邮件的文本/内容。如果邮件太旧(不发送),可能已经有更新的信息可用。就我而言,5-10 分钟 = 旧。这对于每小时数千封电子邮件非常有效。
  • 好吧,看看队列,如果还有一些数据要发送......你也调用数据库来处理其他页面请求......你知道什么时候你在队列中添加了一个新行,所以这正是排队的好时机......
  • 所以你有一个发件人每 2 秒(说些什么)检查数据库中的电子邮件?那么可能是因为之前在C方面的经验,我在这个问题上想太多了。

标签: php email queue


【解决方案1】:

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

【讨论】:

  • 由于原始链接似乎已死,看来这是指向正确的回购:github.com/tin-cat/emailqueue
  • 我刚刚发布了一个 Emailqueue Docker 包,它可以让您在几分钟内设置一个完整的 Emailqueue 服务器!它现在还带有 API 支持和其他一些改进,我认为它可能对您非常有用!这是:github.com/tin-cat/emailqueue-docker
【解决方案2】:

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

今天,我将在 SwiftmailerWhite October SwiftMailer DB Bundle 周围使用基于 Symfony 的系统。

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

您也可以选择简单地将队列中的消息设置为“向用户 X 发送更新电子邮件”,然后队列运行器会在发送电子邮件之前转到原始数据库来组装电子邮件。

【讨论】:

    猜你喜欢
    • 2010-09-06
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 2013-07-27
    • 1970-01-01
    • 2020-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多