首页 > 解决方案 > 使用带有 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是一个完美的解决方案。

标签: phpphpmailermax-execution-timeout

解决方案


推荐阅读