Отправка писем в пакетном режиме с использованием phpmailer с set_time_limit и sleep - PullRequest
0 голосов
/ 25 октября 2018

Я пытаюсь создать почтовую программу для моего клиента.Хостинг, который использует мой клиент, имеет очень строгие правила в отношении исходящей почты.Поэтому я должен быть очень осторожен с громкостью и частотой.

Сначала я пытался отправить все электронные письма за один раз (около 500 подписчиков), но это приводило к ошибке времени ожидания, так как письма не отправлялись.То, что я пытаюсь сделать, это отправить 50 писем, подождать час и снова отправить 50 писем, повторять процесс до тех пор, пока все письма не будут отправлены.Мой код работает только для первого лота.Я понятия не имею, как уснуть процесс и разбудить его через 1 час.

Я искал помощь в Google и 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 писем, но не отправляет оставшуюся партию.Где я делаю не так?

РЕДАКТИРОВАТЬ: Использование сторонних сценариев / Framework не вариант (клиент категорически против этого), в противном случае SwiftMailer было идеальным решением.

...