在PHP中发送最小1000或更多的电子邮件的最正确方法是什么?任何可靠的电子邮件排队技术能够处理吗?
答案 0 :(得分:5)
您只需将电子邮件插入邮件队列数据库表,然后让一个单独的进程检查队列并批量发送一定数量的邮件。
答案 1 :(得分:2)
有一个经过测试的解决方案:PEAR Mail_Queue
对我来说很好。
答案 2 :(得分:1)
正如mercutio建议的那样,我会为每个等待发送的电子邮件在邮件队列表中插入一条新记录,然后使用一个单独的进程(如CRON)定期检查表中是否有任何排队的项目。
如果有任何电子邮件排队(并且没有为每个收件人自定义电子邮件),我会按域对电子邮件进行分组并将块一起发送以减少必须发送的电子邮件总数,即如果您有1000封电子邮件排队和250是gmail帐户我会发送250块25块10(记得密送收件人,以避免他们看到对方)。
实际发送邮件我将使用PEAR mail通过php的mail()函数
发送电子邮件后,从队列中删除记录或更改状态标志以显示已发送并循环 - 我还会添加一个计数器来跟踪未能发送的电子邮件,并在x失败后将其删除尝试
克服超时问题我要么,(取决于具体情况) - 将set_time_limit()设置为x秒并跟踪脚本执行时间(在(x-1)秒后终止脚本) - 从命令行调用脚本以避免超时 - 设置脚本在一次执行中可以发送的电子邮件数量的限制
答案 3 :(得分:1)
当然,数据库表可能是一个想法。但是如果发送带有2mb附件的1000封电子邮件呢?你也必须考虑到这一点。我自己遇到了问题,最终我决定将电子邮件写入数据库,将文件写入文件系统。然后我使用的电子邮件脚本读取数据库记录,并尝试获取要发送的附件。
答案 4 :(得分:1)
您确定需要自己进行此邮件排队吗?
只需将所有邮件发送到本地计算机的邮件传输代理(sendmail ...),然后让它处理排队和发送。毕竟,这就是为...设计的。
换句话说:别担心!
答案 5 :(得分:1)
我创建了Emailqueue,它是一台服务器,可让您将电子邮件添加到队列中,从而使您的应用程序摆脱邮件的压力,并且还提供了有用的其他选项,例如能够对要在电子邮件中发送的电子邮件进行编程的功能。未来,或设置每个电子邮件的发送优先级。我认为这很可能正是您要寻找的。 p>
电子邮件队列在这里可用:https://github.com/tin-cat/emailqueue
还有一个Docker版本,可让您在短短几分钟内建立可用的Emailqueue服务器:https://github.com/tin-cat/emailqueue-docker
答案 6 :(得分:0)
我一般都依赖黑客攻击。 我有一个电子邮件地址的数据库列表,然后使用元重定向来自我增加'offset'参数,该参数指定我在数据库中的哪一行。服务器重定向会导致问题,因为浏览器会认为所花费的时间表示无限循环。