Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php中的电子邮件排队_Php_Email_Queue - Fatal编程技术网

php中的电子邮件排队

php中的电子邮件排队,php,email,queue,Php,Email,Queue,用PHP发送最少1000封或更多电子邮件的最合适方式是什么?有没有可靠的电子邮件排队技术能够处理这个问题? 您可以将电子邮件插入邮件队列数据库表,然后让一个单独的进程检查队列并立即批量发送特定的号码。我通常依靠黑客。 我有一个电子邮件地址的数据库列表,然后使用一个指向self的元重定向,该重定向带有一个递增的“offset”参数,该参数指定我在数据库中的哪一行。服务器重定向会导致问题,因为浏览器假定所花费的时间表示无限循环。正如mercutio所建议的,我会为等待发送的每封电子邮件在邮件队列表中

用PHP发送最少1000封或更多电子邮件的最合适方式是什么?有没有可靠的电子邮件排队技术能够处理这个问题?
您可以将电子邮件插入邮件队列数据库表,然后让一个单独的进程检查队列并立即批量发送特定的号码。

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

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

如果有任何电子邮件排队(并且电子邮件不是针对每个收件人定制的),我会按域将电子邮件分组并发送区块,以减少必须发送的电子邮件总数,即,如果您有1000封电子邮件排队,250封邮件发送到gmail帐户,我会将250封邮件分为25个区块,每10个区块发送一次(请记住向密件抄送收件人发送邮件,以避免他们见面)

要实际发送邮件,我将使用php的mail()函数

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

为了克服超时问题,我会(视情况而定) -将set_time_limit()设置为x秒,并跟踪脚本执行时间(在(x-1)秒后终止脚本) -从命令行调用脚本以避免超时
-设置脚本在一次执行中可以发送的电子邮件数量的限制当然,数据库表可能是个好主意。但是发送1000封带有2mb附件的电子邮件怎么样?你也必须考虑到这一点。我自己也遇到了问题,最终我求助于将电子邮件写入数据库,将文件写入文件库然后我使用的电子邮件脚本读取数据库记录,并尝试获取要发送的附件。

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


对我来说很好。

你确定你需要自己排队吗

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


换句话说:别担心!

我创建了Emailqueue,这是一个服务器,允许你将电子邮件添加到队列中,这样你的应用程序就可以减轻邮件的压力,还提供了有用的附加选项,比如对将来发送的电子邮件进行编程的能力,或者设置每个电子邮件发送的优先级。我认为这可能是可行的很好,这就是你要寻找的

Emailqueue在以下位置可用:


还有一个Docker版本,允许您在几分钟内设置一个工作的Emailqueue服务器,这里:

我用它一次排队30000多封邮件。一个相当简单的脚本一次发送大约250封邮件-如果平均负载不太高的话。您发送邮件的速度不会更快,但不会有任何问题。如果您是del发送几十封,这不是问题。发送数千封电子邮件将为每个人带来一个新的sendmail过程-然后你会得到巨大的平均负载,使服务器崩溃。我已经在没有问题的情况下排队50000多封了。我试过了,发现sendmail开始出现长时间的暂停,请参阅