2010-03-02 6 views
3

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

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

Я использую весну org.springframework.mail.javamail.JavaMailSender для отправки писем.

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

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

Есть ли какие-либо хорошие решения для очередей электронной почты для Java?

ответ

1

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

1

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

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

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