2010-05-26 3 views
2

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

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

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

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

+0

Я не беспокоился и вместо этого использовал только сторонний API (в частности, http://postmarkapp.com/). – Intelekshual

+0

Аутсорсинг решает множество проблем, связанных с почтой, и я бы сильно подумал, был ли это коммерческий проект, но это бесплатный веб-сайт и ресурсы жесткие. Кроме того, даже с сторонним API, вопрос о том, как интегрировать отправку почты и обработку отказов в приложение, по-прежнему остается. –

+0

Образец называется «спам». Я думаю :-) –

ответ

2

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

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

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

0

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