Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.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 使用SwiftMailer';s Throttle插件导致服务器断开连接_Php_Apache_Email_Swiftmailer - Fatal编程技术网

Php 使用SwiftMailer';s Throttle插件导致服务器断开连接

Php 使用SwiftMailer';s Throttle插件导致服务器断开连接,php,apache,email,swiftmailer,Php,Apache,Email,Swiftmailer,让我们假设我们有一个2000电子邮件列表,其中有时事通讯订户,我们需要向他们发送大量电子邮件。服务器在发送电子邮件以防止垃圾邮件时有小时限制 有些人每小时有300封甚至500封电子邮件,这很公平 当使用swiftmailer throttle插件每分钟发送8封电子邮件(8*60分钟=480封邮件总数,低于500封限制)时,服务器关闭连接并以“404-未找到页面”响应 奇怪的是,它在脚本执行期间发送了100封或更少的电子邮件,但服务器仍然将该过程视为陷入无限循环并终止脚本执行 如果我不使用油门插件

让我们假设我们有一个2000电子邮件列表,其中有时事通讯订户,我们需要向他们发送大量电子邮件。服务器在发送电子邮件以防止垃圾邮件时有小时限制

有些人每小时有300封甚至500封电子邮件,这很公平

当使用swiftmailer throttle插件每分钟发送8封电子邮件(8*60分钟=480封邮件总数,低于500封限制)时,服务器关闭连接并以“404-未找到页面”响应

奇怪的是,它在脚本执行期间发送了100封或更少的电子邮件,但服务器仍然将该过程视为陷入无限循环并终止脚本执行

如果我不使用油门插件一次发送500封电子邮件,效果会很好。但是如果我需要发送更多的电子邮件,比如1500或2000封呢

我已经阅读了throttle插件使用PHP的本机函数
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{}中也很好,可以很好地处理错误

希望这有帮助,即使对你来说有点晚了