質問: new MimeMessage(session); //ToAddressのセット mimeMessage1.setRecipient(Message.RecipientType.TO, new InternetAddress(this.address)); //FRomAdressnoセット mimeMessage1.setFrom(new InternetAddress("chinuki@infinitys.co.jp")); new String("Subject"); mimeMessage1.setSubject("パスワード発行","iso-2022-jp");/*件名*/ new String ("Text"); mimeMessage1.setText("あなたのパスワードは" + pwd + "です","iso-2022-jp"); //保存 mimeMessage1.saveChanges(); //メールの送信 Transport.send(mimeMessage1); } catch (SendFailedException e) { /*ここの中がわからない メッセージ ”送信エラー"を表示 他はすべて送信*/ }catch(MessagingException e){/*すべての例外*/ e.printStackTrace(); return 0; } return 1; } } ``` ``` ### 補足情報(言語/FW/ツール等のバージョンなど) ecipse javamail1.4.7
回答: あて先に指定されたメールアドレスが正しいかどうかを知らせたい。 ということですね。 結論から言うと不可能です。 メール送信に指定されたメールアドレスが、存在するか、送達可能かということは、「送信してみないとわからない」ものです。SendFailedExceptionがそれを示すかというと、そうではありません。SendFaildExceptionは、メールが送信できなかった場合に発生する例外(kentaros511さんの言う異常)です。メールが送信できなかった場合の具体例は、メールサーバにメールを送達依頼をすることができなかったというものです。メールアドレスが正しくともメールが送信できない状態です。 メールが送信可能な状態であれば、不正なメールアドレスであろうとメール送信は行われるものだということです。メール送信がされる以上、メールクライアントであるJavaプログラムにおいて例外は発生しません。なので、kentaros511さんの考え方での実現は不可能なのです。 メール送信に指定されたメールアドレスが間違っている場合、メールはどうなるかというと、メールそのものはメールサーバに送信依頼が何の問題もなく実施されます。まったく異常は発生しません。例外も発生しません。メールはそのままメールサーバで送信処理が行われていきます。その中で、メールアドレスが存在しない等の問題が検出されます。メールアドレスが間違っていた場合、「メールアドレスが不正なメールはエラーメールとしてエラーメール送達先に送信されます」。Outlookなどのメーラで不正なメールアドレスにメール送信すると受信ボックスにエラーメールが届くことがありますね。あれです。(エラーメール送達先が発信元に指定されていたのでそうなる) kentaros511さんのやりたいことを実現するには、メールの受信を行いエラーメールを把握することが必要です。 メール送達あたりについては、SMTPについて知識を得ると良いと思います。 SMTPをコマンドで実行できるようになると私の言うことや背景がわかるでしょう。 目的を達成するにはSMTPの知識を得ることが近道と思います。 (JavaMailはSMTPコマンドの発行をJavaで行えるようにしているようなものなので) なお、メールアドレスが全角の時にしか異常にならない点は、メールアドレスの書式の判定によるものです。 逆に全角はメールアドレスの書式として不正なので異常になるのです。