Вот что я бы сделал:
Есть два стола. Один для отправляемого электронного письма и один для электронных писем, на которые отправляется информационный бюллетень с тем, какой информационный бюллетень получает электронное письмо.
Примеры структуры
Таблица 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