Php 使用SwiftMailer';s Throttle插件导致服务器断开连接
让我们假设我们有一个2000电子邮件列表,其中有时事通讯订户,我们需要向他们发送大量电子邮件。服务器在发送电子邮件以防止垃圾邮件时有小时限制 有些人每小时有300封甚至500封电子邮件,这很公平 当使用swiftmailer throttle插件每分钟发送8封电子邮件(8*60分钟=480封邮件总数,低于500封限制)时,服务器关闭连接并以“404-未找到页面”响应 奇怪的是,它在脚本执行期间发送了100封或更少的电子邮件,但服务器仍然将该过程视为陷入无限循环并终止脚本执行 如果我不使用油门插件一次发送500封电子邮件,效果会很好。但是如果我需要发送更多的电子邮件,比如1500或2000封呢 我已经阅读了throttle插件使用PHP的本机函数Php 使用SwiftMailer';s Throttle插件导致服务器断开连接,php,apache,email,swiftmailer,Php,Apache,Email,Swiftmailer,让我们假设我们有一个2000电子邮件列表,其中有时事通讯订户,我们需要向他们发送大量电子邮件。服务器在发送电子邮件以防止垃圾邮件时有小时限制 有些人每小时有300封甚至500封电子邮件,这很公平 当使用swiftmailer throttle插件每分钟发送8封电子邮件(8*60分钟=480封邮件总数,低于500封限制)时,服务器关闭连接并以“404-未找到页面”响应 奇怪的是,它在脚本执行期间发送了100封或更少的电子邮件,但服务器仍然将该过程视为陷入无限循环并终止脚本执行 如果我不使用油门插件
sleep()
,在这种情况下应该可以正常工作
我被告知,如果进程是通过Cron作业而不是通过HTTP协议执行的,那么它就可以工作。我尝试过使用wget和curl来设置cron作业,但仍然没有成功
从我进行的研究中我了解到,当使用带有Swiftmailer的SMTP服务器时,一个3秒的过程需要28秒(比应该的时间长很多)。所有查询、所有优化和所有数据都正确地放置在内存中,而不会使服务器过载
之后,我决定在不使用SMTP的情况下试一试,但节流器插件没有正常工作(再次)
如有任何建议,将不胜感激
编辑:我也读过:
我当然用这个:
ignore_user_abort(true);
set_time_limit(0);
ini_set('max_execution_time', 0);
ini_set('memory_limit', '256M');
ini_set('mysql.connect_timeout', 500);
ini_set('default_socket_timeout', 500);
附言:我现在被迫更改脚本的行为,以便它根据用户每分钟输入的电子邮件计算服务器的限制,如果活动订阅者的总数小于或等于将要发送的电子邮件,它将不使用throttle插件发送它们
致以最热烈的问候,
乔治·吉特索
我认为这与SMTP连接超时有关
当您在循环中处理电子邮件并结合Throttle插件时,Swiftmailer没有机会关闭与SMTP服务器的连接,并且一个连接中发送的电子邮件数量也可能受到限制
这就是为什么建议将插件也加入到组合中,它在发送x封邮件后关闭SMTP连接,并等待y秒,直到重新连接
$transport->start()
和$transport->stop()
是连接和断开插件使用的SMTP服务器的手动方法
对于SMTP传输,还有一个超时参数,您可能会感兴趣
将代码放在try{}catch{}中也很好,可以很好地处理错误
希望这有帮助,即使对你来说有点晚了
我认为这与SMTP连接超时有关
当您在循环中处理电子邮件并结合Throttle插件时,Swiftmailer没有机会关闭与SMTP服务器的连接,并且一个连接中发送的电子邮件数量也可能受到限制
这就是为什么建议将插件也加入到组合中,它在发送x封邮件后关闭SMTP连接,并等待y秒,直到重新连接
$transport->start()
和$transport->stop()
是连接和断开插件使用的SMTP服务器的手动方法
对于SMTP传输,还有一个超时参数,您可能会感兴趣
将代码放在try{}catch{}中也很好,可以很好地处理错误
希望这有帮助,即使对你来说有点晚了