Каркас или шаблон дизайна для рассылки всем пользователям веб-приложения - PullRequest
2 голосов
/ 26 мая 2010

Мое приложение заботится о регистрации пользователя (с возможностью получать уведомления по электронной почте) и может легко обрабатывать фактическое отображение электронной почты на основе шаблона для данного пользователя.JavaMail обеспечивает транспортный уровень почты.Но как мне спроектировать прикладной уровень между бизнес-объектами (например, пользователем) и почтовым транспортом?

Простым подходом будет простой синхронный цикл: перебирайте пользователей, ставьте в очередь электронные письма и выполняйтес этим.«Очередь» может означать отправку их прямо в MTA (почтовый сервер) или в очередь в памяти для использования другим потоком.

Однако , я также планирую реализовать функциинапример, снижение скорости отправки электронных писем, обработка отсканированных писем (NDR) и поддержание статуса при перезапуске приложений.Моя интуиция заключается в том, что хороший дизайн максимально отделил бы это от уровня бизнеса и уровня транспорта почты.Я задавался вопросом, решали ли раньше эту проблему другие, но после долгих поисков я не нашел библиотек Java, которые бы подходили для этой проблемы.Автономные почтовые приложения, такие как James или серверы списков, слишком велики;такие пакеты, как MailSender Spring или Commons Email слишком малы по объему (по сути, являются заменой JavaMail).Для других языков я также не нашел ничего подходящего.

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

Ответы [ 2 ]

3 голосов
/ 26 мая 2010

Подход, который меня больше всего порадовал, заключается в предоставлении интерфейса для моего приложения для «отправки» писем. В действительности реализация этого интерфейса просто помещает почту в базу данных для последующей обработки. С точки зрения приложения, этот интерфейс быстрый , поскольку он выполняет очень мало фактической работы. Кроме того, как вы упомянули, постоянство переживает время простоя сервера.

Другой поток читает из очереди и тратит время на отправку почты до настроенного газа и помечает сообщения в очереди после успешной их обработки (эффективно удаляя их из очереди без удаления). Это обеспечивает как историю отправленной почты, так и ссылку, когда почта отклонена и т. Д. Я удаляю из очереди через 7 дней после успешной отправки.

С точки зрения отделения решения от уровня почтового транспорта ... Я применил этот подход к автоматизированному клиенту Twitter и нашел его одинаково успешным.

0 голосов
/ 26 мая 2010

Одним из вариантов является использование аппаратного устройства. Моя компания использует Strongmail, по крайней мере, для маркетинговых коммуникаций: http://www.strongmail.com/index.php. Я не знаю много об этом, но я думаю, что он обрабатывает массовые проблемы с электронной почтой, такие как списки контактов, регулирование, предотвращение фильтрации спама и т. д.

...