Исключение Catch MailException

#email #playframework

#Адрес электронной почты #playframework

Вопрос:

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

Я вижу исключение MailException в консоли, но не могу перехватить его при вызове Mailer.send() . Mailer.send() Отправляет электронное письмо асинхронно, и поэтому я не могу перехватить исключение. Как я могу дождаться результата, приостанавливающего HTTP-запрос?

Другой вопрос: Mailer.sendAndWait() приостанавливает ли запрос?

Ответ №1:

Во-первых, метод mail () может вызвать исключение MailException, если отправка почты завершается неудачно.

Методы отправки возвращают значение Future типа Boolean, если вы вызовете get() в future, вы получите результат отправки почты, имейте в виду, что этот вызов блокируется и будет ждать завершения отправки почты. Это то же самое, что и при использовании sendAndWait()

Этот get также может вызывать исключение ExecutionException, но у меня не создается впечатления, что это используется программой play mailer. Вместо этого вы возвращаете false из будущего, и исключение регистрируется.

SendAndWait () не приостанавливает выполнение запроса, насколько я могу видеть в источниках

дополнительная информация здесь: http://download.oracle.com/javase/1 ,5.0/docs/api/java/util/concurrent/Future.html

https://github.com/playframework/play/blob/master/framework/src/play/mvc/Mailer.java https://github.com/playframework/play/blob/master/framework/src/play/libs/Mail.java

Комментарии:

1. На самом деле было бы чище, если бы будущий метод get() почты выдавал ExecutionException, указывающий на исходное исключение