php/mysql планирование электронной почты с почтовой квотой

Мне нужно написать свой собственный диспетчер электронной почты в php/mysql. Я использую Amazon SES для отправки электронных писем. У меня есть записи о том, кому и что нужно отправить по электронной почте в таблице MySQL «Очередь». Каждая запись удаляется после успешной отправки электронной почты. Я хотел бы отправить эти электронные письма как можно быстрее, но мне нужно помнить о квоте Amazon. Они ограничивают ваши разрешенные электронные письма, отправленные в секунду.

Как я могу организовать это, чтобы не превышать лимит? Я знаю, что могу написать php-скрипт cron, который будет извлекать только X записей из очереди и отправлять их, но если мой cron запускается только один раз в минуту, много времени уходит впустую. (X — лимит квоты в секунду)

С другой стороны, если моя квота электронной почты будет увеличена, и я смогу отправлять 1000 писем в секунду (или что-то смешное), у меня, вероятно, возникнут проблемы, если мой скрипт будет выполняться долго. Потенциально cron может запуститься снова и извлечь те же записи из таблицы Queue.


person David    schedule 19.09.2012    source источник
comment
опубликуйте какой-нибудь код .. так что вы хотите выбрать * из ограничения очереди 1, maxallowance .. если он не отправит сейчас, он, вероятно, никогда не отправит, потому что вы, надеюсь, отправляете на прямую электронную почту, поэтому, если вы не можете подключиться .. это так же хорошо как получится.. Покажите какой-нибудь код, ожидайте, что он запустится через cron.. если вы используете php..   -  person BugFinder    schedule 19.09.2012


Ответы (1)


Вы должны создать файл блокировки при выполнении скрипта и удалить его, когда выполнение будет завершено. Затем вы можете предупредить себя, если сценарий запускается снова без завершения предыдущего выполнения.

$filename = 'sending_emails.txt';
if (file_exists($filename)) {
    mail('[email protected]', 'Execution overlap', 'Adjust script parameters!');
    exit;
}
file_put_contents('sending_emails.txt', '1');
// Send e-mail logic here
unlink($filename);
person Niklas Modess    schedule 19.09.2012