Как перехватить вложенное исключение SMTPAddressFailedException с помощью Spring mail API

1

Я пытаюсь отправить электронное письмо на адрес электронной почты, указанный пользователем, и я получаю следующее:

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. Пожалуйста, предложите

Теги:
spring
javamail

2 ответа

1
Лучший ответ

Я понял это так. Spring MailSendException имеет getMessageExceptions() который будет содержать все вложенные корневые исключения. Это было моим требованием, поскольку я хотел выяснить, является ли исключение вложенного корня SMTPAddressFailedException или нет. Оказывается, вложенное исключение, которое я получил из getMessageExceptions() было javax mail 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;
                }
            }
        }
2

Похоже, вы можете получить эту деталь из getFailedMessages метода MailSendException.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню