2

注:私の現在のソリューションは機能しています(私は思います)。何かを見逃していないことを確認したいだけです。

私の質問:無効な電子メールアドレスが原因で例外が発生したかどうかを確認する方法を知りたいです。Javaメールの使用。

現在、getAddress()を使用してSMTPAddressFailedExceptionをチェック、getRef 使用してAddressExceptionをチェックしています。

これが私の現在のチェック方法です。私は何かが足りないのですか?

/**
* Checks to find an invalid address error in the given exception. Any found will be added to the ErrorController's
* list of invalid addresses. If an exception is found which does not contain an invalid address, returns false.
*
* @param exception the MessagingException which could possibly hold the invalid address
* @return if the exception is not an invalid address exception.
*/
public boolean handleEmailException(Throwable exception) {
  String invalidAddress;
  do {
    if (exception instanceof SMTPAddressFailedException) {
      SMTPAddressFailedException smtpAddressFailedException = (SMTPAddressFailedException) exception;
      InternetAddress internetAddress = smtpAddressFailedException.getAddress();
      invalidAddress = internetAddress.getAddress();
    } else if (exception instanceof AddressException) {
      AddressException addressException = (AddressException) exception;
      invalidAddress = addressException.getRef();
    }
    //Here is where I might do a few more else ifs if there are any other applicable exceptions.
    else {
      return false;
    }
    if (invalidAddress != null) {
      //Here's where I do something with the invalid address.
    }
    exception = exception.getCause();
  } while (exception != null);
  return true;
}

注:興味がある場合(または役立つ場合)は、Javaヘルパーライブラリを使用して電子メールを送信します(このを参照)。これにより、最初にエラーがスローされます。

4

1 に答える 1

2

通常、例外をキャストする必要はありません。これが、複数のキャッチブロックを持つことができる理由です。

try {
    // code that might throw AddressException
} catch (SMTPAddressFailedException ex) {
    // Catch subclass of AddressException  first
    //  ...
} catch (AddressException ex) {
    // ...
}

ネストされた例外が心配な場合は、Guavaのを使用できますThrowables.getRootCause

于 2012-08-08T14:46:39.993 に答える