Как справиться с ограничением отправки электронной почты с помощью Cron в Cpanel?

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

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

Любая помощь будет оценена.


person Aamir Bashir    schedule 04.06.2014    source источник


Ответы (1)


Вот что я бы сделал:

Есть два стола. Один для отправляемого электронного письма и один для электронных писем, на которые отправляется информационный бюллетень с тем, какой информационный бюллетень получает электронное письмо.

Примеры структуры

Таблица 1_ :

  • id - Авто INC
  • email_subject - Тема бюллетеня
  • email_html — HTML-версия письма.
  • email_plain_text — текстовая версия сообщения электронной почты.
  • created_datetime - информационный бюллетень даты и времени создан

таблица newsletter_recipients:

  • id - Авто ИНК
  • newsletter_id - идентификатор того, какой информационный бюллетень рассылается (создайте внешний ключ, ссылающийся на поле id в таблице newsletter
  • email — HTML-версия письма
  • name - Имя клиента
  • sent - Было ли письмо отправлено или нет (это не обязательно, см. ниже)

Когда администратор отправляет электронное письмо, создайте строку информационного бюллетеня с версией html/обычный текст (вы можете использовать только один столбец, просто лучше иметь html и текстовую версию электронной почты), а также добавьте получателей в таблицу информационный бюллетень, ссылаясь на информационный бюллетень_id к идентификатору новостной рассылки, которую вы добавили.

Теперь у вас есть файл задания PHP cron, который запускается каждый час. Этот файл будет проверять, нужна ли кому-либо из клиентов рассылка информационных бюллетеней, и если да, то отправлять их. После отправки вы можете либо удалить строку получателя, либо пометить ее как отправленную. Лично я бы удалил их, чтобы предотвратить резервное копирование данных. Запустите задание php только до 500 или любого количества электронных писем, которые вы хотите отправить, а затем завершите сценарий. В следующий час он запустится и подберет следующие 500.

С этой системой информационный бюллетень не будет отправлен немедленно, это будет сделано, когда запустится задание cron. Но это лучшее решение, которое я могу быстро придумать для вас. Это или получить почтовый сервер, который позволяет отправлять все электронные письма, которые вы хотите, и использовать что-то вроде gearman для балансировки нагрузки.

ПРИМЕЧАНИЕ. Хранение информационного бюллетеня в базе данных может быть удобным, чтобы администратор мог оглянуться назад и увидеть, когда он отправил свой информационный бюллетень. Также вы можете перейти на другой уровень и создать столбец sent_date в таблице newsletter_recipient, в котором хранится, когда электронное письмо было отправлено (если вы просто отмечаете получателя как отправленного или нет вместо удаления), чтобы вы знали, когда электронные письма закончили отправку, кто получил электронные письма в какое время и т. д. Это полностью зависит от вас).

person Skylord123    schedule 04.06.2014