PHP中的电子邮件排队

时间:2020-03-05 18:41:01  来源:igfitidea点击:

用PHP发送最少1000个或者更多电子邮件的最合适方法是什么?有任何可靠的电子邮件排队技术可以处理此问题吗?

解决方案

回答

我们可以将电子邮件插入"邮件队列"数据库表,然后进行单独的过程检查队列并批量发送一定数量的邮件。

回答

我通常依靠黑客攻击。
我有一个电子邮件地址的数据库列表,然后使用一个元重定向到self并带有递增的" offset"参数,该参数指定我要访问数据库中的哪一行。服务器重定向会导致问题,因为浏览器认为所花费的时间表明了无限循环。

回答

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

如果有任何电子邮件排队(并且不是为每个收件人定制电子邮件),那么我将按域将电子邮件分组并一起发送块,以减少必须发送的电子邮件总数,即,如果有1000封电子邮件排队并且250封电子邮件对于gmail帐户,我会在25个10块中发送250个(记住,密件抄送收件人要避免彼此看见)。

实际发送邮件,我会在php的mail()函数上使用PEAR邮件

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

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

回答

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

回答

有一个经过测试的解决方案:PEAR Mail_Queue

对我来说很好。

回答

我们确定我们需要自己对这封邮件进行排队吗?

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

换句话说:不用担心!