假设我们有一个包含通讯订阅者的 2000 个电子邮件列表,我们需要向他们群发电子邮件。服务器在发送电子邮件以防止垃圾邮件时确实有每小时限制。
有些人每小时有 300 甚至 500 封电子邮件,这很公平。
例如,使用 swiftmailer 节流插件每分钟发送 8 封电子邮件(8 * 60 分钟 = 480 总邮件,低于 500 限制)服务器关闭连接并以“404 - 未找到页面”响应。
奇怪的是,它在脚本执行期间发送了 100 封或更少的电子邮件,但服务器仍将程序视为陷入无限循环并终止脚本执行。
如果我尝试在没有油门插件的情况下一次发送 500 封电子邮件,它就像一个魅力。但是,如果我需要发送更多的电子邮件,例如 1500 或 2000,该怎么办?
我已经阅读了油门插件使用 PHP 的本机函数sleep()
,它应该在这种情况下正常工作。
我被告知,如果该过程是通过 Cron Job 而不是通过 HTTP 协议执行的,它可以工作。我尝试过使用 wget 和 curl 来设置 cron 作业,但仍然没有运气。
我从我进行的研究中了解到,当使用带有 Swiftmailer 的 SMTP 服务器时,3 秒的过程需要 28 秒(比它应该的要长得多)。所有查询都经过优化,所有数据都正确放置在内存中,而不会使服务器过载。
之后,我决定不使用 SMTP 试一试,但 Throttler 插件(再次)无法正常工作。
任何建议或建议将不胜感激。
编辑:我也读过这个:SwiftMailer Batch email time my Server out
当然我用这个:
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);
PS:我现在被迫更改脚本的行为,以便它根据用户每分钟输入的电子邮件计算服务器的限制,如果活跃订阅者的总数小于或等于将要发送的电子邮件,它在没有油门插件的情况下发送它们。
最热烈的问候,乔治·吉尔索