1

我正在尝试向用户提供的电子邮件 ID 发送电子邮件,但结果如下:

org.springframework.mail.MailSendException: 
Failed messages: javax.mail.SendFailedException: Invalid Addresses;
nested exception is:
com.sun.mail.smtp.SMTPAddressFailedException

现在的问题是我可以捕获 MailSendException 并向客户端发送一条有意义的错误消息,说请提供有效的 emailId,但是 MailSendException 是一个非常通用的异常,捕获它并不能保证由于无效的电子邮件 ID 而发生异常。由于各种其他原因,可能会发生此异常。

我的问题是我想捕获 SMTPAddressFailedException 但不幸的是,在这种情况下它是一个嵌套异常,而 Spring 抛出的实际异常是一个非常通用的 MailSendException。请建议

4

2 回答 2

2

看起来您可以从MailSendException的getFailedMessages方法中获取此详细信息。

于 2014-06-05T17:47:19.813 回答
1

我是这样想的。Spring 的 MailSendException getMessageExceptions()将包含所有嵌套的根异常。这是我的要求,因为我想知道嵌套的根异常是否是 SMTPAddressFailedException。结果我得到的嵌套异常 getMessageExceptions()是 javax 邮件SendFailedException,所以我不得不使用SendFailedExceptiongetNextException() 来找出嵌套的根异常。有点冗长但完全值得找出确切的嵌套根异常:

 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;
                }
            }
        }
于 2014-06-06T06:37:53.150 回答