Я пытаюсь создать программу рассылки подписчиков для моего клиента. Хостинг, который использует мой клиент, имеет очень строгие правила в отношении исходящей почты. Поэтому я должен быть очень осторожен с громкостью и частотой.
Сначала я пытался отправить все электронные письма за один раз (около 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 писем, но не отправляет оставшуюся партию. Где я делаю не так?
РЕДАКТИРОВАТЬ: Использование сторонних скриптов / фреймворка не вариант (клиент категорически против), в противном случае SwiftMailer было идеальным решением.
Задача ещё не решена.
Других решений пока нет …