在 PHP 中发送至少 1000 封或更多电子邮件的最正确方法是什么?有什么可靠的电子邮件排队技术能够处理这个问题吗?­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­

有帮助吗?

解决方案

您可以将电子邮件插入邮件队列数据库表中,并让一个单独的进程检查队列并一次性批量发送一定数量的邮件。

其他提示

有一个经过测试的解决方案:梨 邮件队列

对我来说效果很好。

正如mercutio建议的那样,我会为每封等待发送的电子邮件在邮件队列表中插入一条新记录,然后使用单独的进程(如CRON)定期检查表中是否有任何排队的项目。

如果有任何电子邮件排队(并且电子邮件不是为每个收件人定制的),我将按域对电子邮件进行分组并将块一起发送以减少必须发送的电子邮件总数,即如果您有 1000 封电子邮件排队,其中 250 封发送至 Gmail 帐户,我会将这 250 封邮件分成 25 封,每封 10 封(请记住密件抄送收件人,以免他们互相看到)。

实际发送我会使用的邮件 梨邮件 通过 php 的 mail() 函数

发送电子邮件后,从队列中删除记录或更改状态标志以显示它已发送并循环 - 我还会添加一个计数器来跟踪未能发送的电子邮件,并在 x 次失败尝试后将其删除

为了克服超时问题,我要么(取决于情况) - 将set_time_limit()设置为x秒,并跟踪脚本执行时间(杀死(x -1)秒后杀死脚本) - 从命令中调用脚本避免超时的行 - 设置脚本可以在一个执行中发送的电子邮件数量的限制

当然,数据库表可能是一个想法。但是如果发送 1000 封带有 2mb 附件的电子邮件呢?你也必须考虑到这一点。我自己也遇到了这个问题,最终我将电子邮件写入数据库,将文件写入文件系统。然后,我使用的电子邮件脚本读取数据库记录,并尝试获取要发送的附件。

您确定需要自己排队这封邮件吗?

只需将所有邮件传送到本地计算机的邮件传输代理(sendmail...),并让它负责排队和发送。毕竟,这就是设计的目的。

换句话说:不用担心!

我通常依赖黑客。我有一个电子邮件地址的数据库列表,然后使用元重定向到自身,并增加“偏移”参数,该参数指定我要访问的数据库中的哪一行。服务器重定向会导致问题,因为浏览器认为所用的时间表示无限循环。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top