Инструмент для отправки электронной почты из БД - PullRequest
3 голосов
/ 28 октября 2010

Мы разрабатываем веб-приложение, которое должно отправлять электронные письма, написанные на Java / Groovy.В настоящее время мы сохраняем каждое электронное письмо в базе данных, прежде чем вызвать API почты Java для отправки почты на наш SMTP-сервер.

Я хочу отправлять электронную почту асинхронно.Я хочу сохранить письмо, а затем попросить другой процесс взять письмо и отправить его (и отправить только один раз).В идеале этот процесс выполняется за пределами моего веб-приложения.

Существуют ли какие-либо инструменты, которые делают это?

Обновление : это решение должно предотвращать дублирование электронных писем иобрабатывать шипы в электронной почте.Я надеялся, что кто-то уже написал автономный процессор электронной почты.(Я бы предпочел не реализовывать это сам.)

Ответы [ 6 ]

4 голосов
/ 28 октября 2010

Предложения по использованию задания cron для чтения базы данных вполне работоспособны.

Другим хорошим подходом здесь является использование очереди сообщений Java Message Service (JMS). Они постоянны (поддерживаются базой данных) и надежны. У вас может быть одна или несколько программ-производителей, помещающих в очередь сообщения с соответствующими данными, а затем один или несколько потребителей обрабатывают сообщения и удаляют их из очереди. Все это настроено на очень высокую надежность, и вы получаете гибкость асинхронного разделения операций, что означает, что во время скачков электронной почты очередь сообщений может увеличиваться, пока потребители не догонят скачок. Еще одним преимуществом является то, что электронное письмо отправляется, как только потребитель получает его, а не по таймеру. Кроме того, если вам требуется высокая доступность, у вас может быть несколько потребителей в случае отказа одного из них.

Проверьте Apache ActiveMQ для хорошей реализации JMS с открытым исходным кодом.

1 голос
/ 28 октября 2010

Если вы используете Linux / Unix, вы можете создать задание cron для запуска каждые несколько минут, которое вызывает программу, которая получает почту из базы данных и отправляет ее. Вы также можете иметь поле в базе данных, чтобы указать, было ли отправлено сообщение. Недостатком этого подхода является то, что может быть задержка в несколько минут после того, как ваше веб-приложение сохранит электронную почту и когда запустится задание cron.

0 голосов
/ 28 октября 2010

Вы можете использовать Quartz, библиотеку расписаний (похожую на cron), чтобы запланировать повторяющуюся задачу, которая читает DB и отправляет электронные письма.Если вы используете Grails, есть плагин Quartz, который делает работу с Quartz немного более Groovy.

0 голосов
/ 28 октября 2010

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

http://gaq.sourceforge.net/

0 голосов
/ 28 октября 2010

На случай, если это БД Oracle, вы можете использовать пакет UTL_MAIL, чтобы написать PL / SQL для отправки почты через ваш SMTP-сервер. Затем создайте запланированное задание для выполнения по желаемому расписанию.

http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14258/u_mail.htm

0 голосов
/ 28 октября 2010

Настройка задания cron и использование сценариев для запроса базы данных и отправки электронных писем через sendmail.

...