2013-12-24 1 views
0

У меня есть веб-приложение, которое отправляет электронные письма для различной функциональности, как и многие приложения. Он использует API JavaMail для отправки сообщений.Как приложение Java может узнать, какие письма были отправлены, в случае неправильного завершения работы

Некоторые электронные письма отправляются в ответ на пользовательские события (отправка форм и т. Д.), А некоторые отправляются асинхронно в течение жизненного цикла приложения.

Теперь мое приложение может быть остановлено в любой момент, главным образом, путем остановки контейнера сервлетов. Это мое тоже внезапно исчезает, если процесс jvm убит или сервер выключен, или сила умирает.

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

Любая помощь, мысли и предложения были высоко оценены.

Благодаря

ответ

0

Вам нужно будет иметь механизм, который может надежно сказать, что должно быть сделано здесь. Это часто база данных (Derby - встроенная база данных на Java).

Относительно того, отправлено ли данное сообщение, иметь реальный SMTP-сервер, выполняющий фактическую доставку, и просто отправьте приложение на это и учтите, что SMTP-сервер достаточно для его отправки в приложении.

+1

Кроме того, если вы потеряете электроэнергию, вы должны сказать, что мощность отключена, и ваше приложение должно слушать то, что говорит взлет. –

0

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

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

Смежные вопросы