Как перехватить вложенное исключение SMTPAddressFailedException с помощью Spring mail API
Я пытаюсь отправить электронное письмо на указанный пользователем идентификатор электронной почты и получаю ниже:
org.springframework.mail.MailSendException:
Failed messages: javax.mail.SendFailedException: Invalid Addresses;
nested exception is:
com.sun.mail.smtp.SMTPAddressFailedException
Теперь проблема в том, что я могу поймать MailSendException и отправить осмысленное сообщение об ошибке клиенту, сказав, что, пожалуйста, предоставьте действительный emailId, но MailSendException - это очень общее исключение, и перехват его не гарантирует, что исключение произошло из-за неверного идентификатора электронной почты. Это исключение может возникать по ряду других причин.
Моя проблема в том, что я хочу перехватить SMTPAddressFailedException, но, к сожалению, в этом случае это вложенное исключение, а фактическое исключение, генерируемое Spring, является очень общим MailSendException. Пожалуйста, предложите
2 ответа
Я понял это так. Весеннее MailSendException имеет getMessageExceptions()
который будет содержать все вложенные корневые исключения. Это было мое требование, так как я хотел выяснить, является ли вложенное корневое исключение SMTPAddressFailedException или нет. Оказывается, вложенное исключение, которое я получил от getMessageExceptions()
была почта javax SendFailedException
поэтому я должен был использовать это SendFailedException
getNextException(), чтобы узнать вложенное корневое исключение. Немного длинно, но вполне стоит узнать точное исключение вложенного корня:
catch (MailSendException e){
logger.error("MailSendException found.",e);
Exception[] exceptionArray = e.getMessageExceptions();
e.getFailedMessages();
boolean isSMTPAddressFailedException = false;
for(Exception e1 : exceptionArray){
if(e1 instanceof SendFailedException){
Exception e2 = ((SendFailedException)e1).getNextException();
if(e2 instanceof SMTPAddressFailedException){
logger.error("Caught SMTPAddressFailedException. Invalid email id of User/Dealer",e2);
utilityService.formatBasicResponseWithMessage(response, ResponseCodes.INVALID_EMAILID, serviceRequestVO.getLanguageId());
isSMTPAddressFailedException=true;
break;
}
}
}
Похоже, вы можете получить эту информацию из метода getFailedMessages MailSendException.