Помощь при зависании SMTP-сервера при отправке писем с Java - PullRequest
3 голосов
/ 02 марта 2010

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

Пару раз в последнее время на этом почтовом сервере возникали проблемы, и это приводило к полному зависанию моего Java-приложения (Struts / Spring) при ожидании ответа от почтового сервера.

Я использую Spring org.springframework.mail.javamail.JavaMailSender для отправки почты.

При возникновении проблем на внешнем почтовом сервере следующая строка останавливается mailEngine.send (mailMessage);

Я не возражаю, что иногда электронные письма не отправляются, но как я могу остановить это от зависания моего приложения, пока оно ожидает ответа от SMTP-сервера?

Существуют ли хорошие решения для организации очередей электронной почты для Java?

Ответы [ 2 ]

1 голос
/ 02 марта 2010

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

Если вы получите объект Future от Исполнителя после отправки, вы можете позвонить get() с подходящим тайм-аутом и отменить (и, возможно, повторно отправить / повторить) по истечении тайм-аута.

1 голос
/ 02 марта 2010

Вы можете отправлять электронные письма в фоновом потоке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...