#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, указывающий на исходное исключение