【发布时间】:2023-03-30 07:56:01
【问题描述】:
我正在开发一个可以处理大量电子邮件发送的应用程序,并且我正在寻找一个最小的电子邮件队列解决方案。
发送代码的作用是从队列中获取“收件人”、“发件人”、“主题”、“文本”、“格式”字段,生成标题,然后发送电子邮件。如果发送不成功,可以重试。我也想要一个优先级系统,至少有两个优先级。
我一直在思考,得到的想法是:
- MySQL:由于系统中的其他所有内容都通过 MySQL,因此我考虑使用 MySQL 表作为队列。问题是发送者必须一直在看桌子,这会导致处理器负载过高。
- 文件:队列可以通过目录中的 XML 文件来完成。这对一切都不利(性能、服务器寿命……)
- FIFO:我在 C 应用程序中使用过 FIFO,但对于高级应用程序来说,这可能太低级了,而且原始数据有点难以处理(大小、参数顺序...)。
所以我正在寻找有关如何以简单的方式处理此电子邮件队列的想法。该系统是用 PHP 完成的,如果有解决方案,我希望它是用 PHP 完成的。
提前致谢。
【问题讨论】:
-
如果 mysql 是瓶颈...您发送到许多电子邮件;) ...什么比数据库更快?
-
不,不。问题不在于 MySQL。问题是电子邮件发件人。它是一个异步系统,发送者必须知道它什么时候有工作要做。使用 MySQL 的唯一方法是定期执行查询,这是一项非常消耗 CPU 的任务。
-
我有一个这样的邮件队列,但我不保存电子邮件的文本/内容。如果邮件太旧(不发送),可能已经有更新的信息可用。就我而言,5-10 分钟 = 旧。这对于每小时数千封电子邮件非常有效。
-
好吧,看看队列,如果还有一些数据要发送......你也调用数据库来处理其他页面请求......你知道什么时候你在队列中添加了一个新行,所以这正是排队的好时机......
-
所以你有一个发件人每 2 秒(说些什么)检查数据库中的电子邮件?那么可能是因为之前在C方面的经验,我在这个问题上想太多了。