Почтовые рассылки

Материал из Smart Core Wiki

Перейти к: навигация, поиск

ВНИМАНИЕ! эта статья является проектной!

Содержание

Описание

Работать будет как системная служба.
Для добавления письма в рассылку будут указываться следующие данные:

  1. Список емаилов (можно также задавать имя юзера в роли обращения)
  2. От кого будут отправлены письма: имя и емаил.
  3. Тема письма
  4. Содержимое письма
  5. Файлы вложений.
  6. Приоритет (в минутах).
  7. Флаг: «сохранить историю рассылки» - в этом режиме система будет вести лог на какой емаил в какое время было выслано письмо.

После вызова метода добавления рассылки, будет возвращен ID созданной рассылки, по нему можно будет посмотреть статус и историю.

Приоритет это указание системе как быстро надо отправить письмо, скорее всего лучше в системе задать некий жесткий список приоритетов и выставлять нужный как наиболее близкий к существующим, наприер приоритеты можно задавать по минутам:

  1. 1
  2. 5
  3. 10
  4. 30
  5. 60 — 1 час
  6. 120 — 2 часа
  7. 180 — 3 часа
  8. 240 — 4 часа
  9. 300 — 5 часов
  10. 360 — 6 часов

Скрипт который будет заниматься непосредственно отсылкой писем будет работать по следующему принципу:

  1. Запуск с определённой периодичностью. например один раз в минуту.
  2. Подразумевается что скрипт будет всегда работать в один поток, и ему будет известно какое время ему выделено (set_time_limit()); с самого начала он будет вычислять время потраченное на каждую операцию и если, например, суммарное время будет составлять 80% от лимита, то работа скрипта будет безопасно прекращаться.
  3. При старте извлекается из БД список писем готовых к отправке, основанный на приоритете. Кол-во подготовленных писем будет ограничиваться, например не более 20 писем за одну итерацию рассылки.
  4. При успешно произведенном факте отсылки письма оно будет удаляться из БД,а также в случае, если задан режим ведения истории, будет добавляться лог отсылки.

Система должна будет инстуллектуально вычислять справляется ли она с рассылкой.

Надо предусмотреть механизм при котором сервис будет проверять почтовые ящики с которых будет производить рассылки на предмет писем в которых будут письма с информации о нерабочих ящиках на которые были отправлены письма.

Надо плотно подумать как поступать с вложениями.

Конфигурирование

Для корректной работы сервис толжен иметь следующие данные.

  1. period – с какой часторой будет вызываться скрипт рассылки (итерации).
  2. max_sends – максимальное кол-во писем которое может быть отправлено за одну итерацию.

API

Класс можно назвать например просто Maillist  :) и находиться он будет прямо в папке ядра. Методы будут следующие (public):

  1. add($from, $subject, $content, array $emails, $priority = false, $is_archived = false) – добавить задачу на рассылку. Метод будет возвращать созданный maillist_id.
  2. getMaillistInfo($maillist_id) – получить информацию по рассылке.
  3. getStatus() - получить общую информацию о состоянии демона рассылок, например кол-во активных задач.

Алгоритм работы

Выбор писем для отправки, по приоритету

Таблицы

maillist

Данные о письме, которое будет отправлено пользователям. В случае если не будет вестись история, то запись о письме связанными с ним емайлами будет удалён после успешной полной отправки.

Для уменьшения нагрузки, можно сделать такое поле как emails_source и там указать, откуда брать список емаилов и по какому принципу, например модуль Subscribe может указать какой метод с каким параметром у какой ноды вызвать, чтобы получить нужный список. 

  1. maillist_id
  2. site_id
  3. is_archived — флаг, является ли письмо и связанные с ним емаилы архивные и их надо сохранить или надо удалить после всех отсылок.
  4. from — поле «от кого»
  5. subject — тема письма
  6. content — тело письма
  7. length — размер контента письма вместе с вложениями.
  8. datetime — дата добавления письма в рассылку.
  9. datetime_end — дата завершения рассылки.
  10. priority — приоритет с которым надо произвести рассылку.
  11. status — статус в процессе (1) или завершен (0).
  12. email_counts – кол-во связанных адресов для отсылки.

maillist_emails

Список емаил адресов на которые надо разослать письма.

  1. maillist_id
  2. email

maillist_email_archive

Список отправленных емаил адресов в случае если рассылку требуется заархивировать. Применяется для того, чтобы активная таблица была полегче.

  1. maillist_id
  2. email
  3. datetime — дата отправки письма.
Личные инструменты
Пространства имён
Варианты
Действия
Основные разделы
Ссылки
Навигация
Инструменты