web-dev-qa-db-ja.com

アドレス無効な例外を解決する方法

javax.mailを使用してメールを送信しようとしました。メールの送信中に、次の例外が発生しました。

    **sendMail - Message Sending Failed: Invalid Addresses;
    nested exception is: 
javax.mail.SendFailedException: 550 #5.1.0 Address rejected.2013-02-28 13:17:08,236** 

何が問題なのでしょうか?

8
user2060679

これは、受信サーバーが電子メールアドレスのメールボックス(「@」の前の部分)を認識しないことを意味します。スペルが間違っているか、単に存在しない名前であるか、受信サーバーがコード550で応答することによってメッセージ(スパムなど)を拒否するように設定されている可能性があります。

これは、SMTP応答コードを要約し、関連するさまざまなRFCへのリンクを提供する多くのページの1つです。 http://www.greenend.org.uk/rjk/tech/smtpreplies。 html

編集:私はあなたの質問に答えるためにコメントが許すより少し多くのスペースが必要です。

@ RaghuKing、Javadoc for _javax.mail.SendFailedException_を見ると、そのような例外オブジェクト(catchブロック内)で3つのメソッドを呼び出すことができることがわかります。

  • getInvalidAddresses()無効であるために送信されないアドレスの配列を取得するには、
  • getValidSentAddresses()は、このメッセージが正常に送信されたアドレスの配列を取得し、
  • getValidUnsentAddresses()は、有効であるがメッセージの送信先ではないアドレスの配列を取得します。

(明らかに、複数の受信者にメッセージを送信すると、成功するものと失敗するものがありますが、成功の数に関係なく、少なくとも1つの失敗がある場合は例外がスローされます。もちろん、1つのアドレスのみに送信する場合も、これらの配列の1つだけにその1つのアドレスがあり、おそらくValidSentリストにはありません。

これらの配列は、アドレスが含まれる配列のタイプに応じて、例外の処理方法に関する詳細情報を提供します。これは明らかにアプリケーションによって異なりますが、これらは妥当な提案である可能性があります。

  • 無効なアドレス:リスト内の無効なアドレスごとに、アドレスが間違っていたためにメッセージが送信されなかったことをユーザーに通知し、修正する方法を提供しますアドレスを確認してから、正しいアドレスに再送信してみてください(または、ユーザーが別のアドレスを指定しない場合はキャンセルしてください)。
  • 有効な送信アドレス:再送信しないでください。
  • 有効な未送信アドレス:これらのアドレスに再送信してみてください。以前のアドレスが正しくないため、これらのアドレスに到達する前に送信が停止した可能性があります。

しかし、結局のところ、常識を適用しなければならないのはあなたであり、おそらくあなたがそれらを理解するまであなたが理解していない機能を少し実験してください。

13
fr13d

このコードは、無効なアドレスのログを出力できます。

    try {
        sender.send(message);
    }catch (MailSendException me){
        detectInvalidAddress(me);
    } 

private void detectInvalidAddress(MailSendException me) {
    Exception[] messageExceptions = me.getMessageExceptions();
    if (messageExceptions.length > 0) {
        Exception messageException = messageExceptions[0];
        if (messageException instanceof SendFailedException) {
            SendFailedException sfe = (SendFailedException) messageException;
            Address[] invalidAddresses = sfe.getInvalidAddresses();
            StringBuilder addressStr = new StringBuilder();
            for (Address address : invalidAddresses) {
                addressStr.append(address.toString()).append("; ");
            }

            logger.error("invalid address(es):{}", addressStr);
            return;
        }
    }

    logger.error("exception while sending mail.", me);
}
1
Clement.Xu

これと同じ例外が発生しました。不明なユーザーにメールを送信できないことに気付きました。相談したところ、SMTPサーバーがオープンメールリレーサーバーではないことがわかりました オープンメールリレー

0
kabugima2