我正在尝试为我的客户构建一个批量订阅者邮件程序。我的客户使用的主机对外发邮件有非常严格的政策。因此,我需要对音量和频率非常谨慎。
起初,我尝试同时发送所有电子邮件(大约 500 个订阅者),但这给了我超时错误以及邮件没有发送。我要完成的是发送 50 封邮件,等待一个小时,然后再次发送 50 封邮件,不断重复该过程,直到所有邮件都发送完毕。我的代码仅适用于第一批。我不知道如何使该过程休眠并在 1 小时后将其唤醒。
我搜索了谷歌和 SO 寻求帮助,但他们似乎都没有针对这个特定模型的解决方案。这是我的代码。
function process_mails() {
set_time_limit(0);
$i=0;
foreach ( $mails as $mail ) {
$i++;
// My mailer code here. Removed it for simplicity
if ($i > 0 && $i % 50 == 0) {
sleep(3600);
}
}
}
问题是,此代码正确发送了前 50 封电子邮件,但没有发送剩余的一批。我在哪里做错了?
编辑:使用第三方脚本/框架不是一个选项(客户端严格反对它),否则SwiftMailer是一个完美的解决方案。