Как перехватить вложенное исключение 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.

Другие вопросы по тегам