Я создаю приложение списка рассылки. Он будет отправлять 40 электронных писем в час из-за ограничений почтовой службы. Как добавить таймер?PHP: добавление таймера
ответ
Если вам нужно создать запланированную задачу, я бы предложил создать Cron Job.
Вы можете приостановить выполнение скрипта с помощью функции sleep()
. Однако это нехорошее решение. Гораздо лучше использовать Cron, который позволяет выполнять скрипт каждые 40 минут. Сам сценарий должен только проверить, сколько раз оно было выполнено до сих пор - эта информация может храниться в некотором файле:
$counter = file_exists('counter') ? file_get_contents('counter') : 1;
echo sprintf('Send %d portion of emails.', $counter);
file_put_contents('counter', ++$counter);
Я нашел это: http://swiftmailer.org/docs/throttler-plugin
Одно решение было бы создать базу данных таблицу для хранения сведений о отправляемых вами электронных письмах. Скажем, это выглядит следующим образом:
CREATE TABLE SentEmail (
email_id INT NOT NULL,
recipient_id INT NOT NULL,
time_sent DATETIME NOT NULL,
PRIMARY KEY (email_id, recipient)
)
Здесь email_id
должен быть внешний ключ к таблице, содержащей сообщения электронной почты, помеченные для отправки, и recipient_id
должен быть внешний ключ к таблице, содержащей информацию о ваших получателей. time_sent
, очевидно, записывает время отправки электронного письма.
Теперь, когда вы хотите, чтобы отправлять сообщения электронной почты, вы хотите знать,
- сколько писем было отправлено в этот час; это можно найти с помощью запроса
COUNT
- , которому уже было отправлено электронное письмо, с которым вы в настоящее время имеете дело; это также простой запрос.
Возможная вариация в этом случае заключается в том, чтобы иметь строку в таблице для каждой комбинации электронной почты и пользователя, которую вы собираетесь отправлять, а не только по одному для каждого отправленного по электронной почте сообщения, и иметь столбец, указывающий, имеет ли это письмо был отправлен этому пользователю. Это позволит легко рассказать также, кому еще нужно отправить электронное письмо.
Вы могли бы объединить этот подход с заданием Cron, как это было предложено другими, чтобы убедиться, что очередь сообщений электронной почты рассматривается регулярно.