php - 使用带有 set_time_limit 和 sleep 的 phpmailer 批量发送电子邮件
问题描述
我正在尝试为我的客户构建一个批量订阅者邮件程序。我的客户使用的主机对外发邮件有非常严格的政策。因此,我需要对音量和频率非常谨慎。
起初,我尝试同时发送所有电子邮件(大约 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是一个完美的解决方案。
解决方案
推荐阅读
- python - Python:对列表进行排序,使 5.10 在 5.9 之后
- java - Gradle:无法通知构建侦听器
- botframework - 我可以合并现有的 Bot 构建以在 Bot Composer 中运行吗
- git - Git 在单次提交中从 master 获取快照
- javascript - 如何将页面链接导航到特定 div?
- java - 无法识别的 VM 选项“AggressiveOpts”
- google-chrome - 安装时有什么方法可以自动固定 Chrome 扩展程序?
- r - 如何在 ggplot2 中绘制 2 个样本的 QQ 图?
- sql-server - 遍历 SQL Server 中的逗号分隔值
- json - Axios 解析打字稿对象不正确