- - PR -
javaMailのリスナークラスの使用について(補足)
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-12-24 11:47
#情報を補足します。
今日は、優子です。 javaMailを使用しているのですが、MimeMessage#setRecipients()メソッドで送信先をしていして送信した時、 そのアドレスが無効な場合(fadfgagasggagg@yahoooo.co.jp等)、別処理をしたいと思っています。 その際、メッセージが正しく送れていない事をハンドルするリスナークラスがあり(TransportAdapter#messageNotDelivered())、このメソッドをオーバーライドしてみたのですが、 実行しても呼ばれず、MimeMessage#setFromで指定した送信元アドレスにメールが送れなかったという通知戻ってきました。 メールアドレスが無効な時というのはそもそもリスナー対象外なのでしょうか? あと例外(Exceptionでtry/catchしても)でハンドルしても無理でした。 ご存知の方いらっしゃいましたらご返答をお願い致します。 以上です。 開発環境 WIN2000 Eclipse 2.1 Tomcat 4.1 | ||||
|
投稿日時: 2004-12-24 12:35
JavaMailで正しく送れていないという通知は、指定しているメールサーバが処理できないって言うときに有効になるかと思います。
たとえば、fadfgagasggagg@yahoooo.co.jpにメールを送るとき、 JavaMailClient --> 自社メールサーバ(abc.co.jp) --> 相手メールサーバ(yahoooo.co.jp) と転送されていきます。 ここで自社メールサーバはfadfgagasggagg@yahoooo.co.jpが存在するしないにかかわらず、自社宛メールじゃないので転送を試みるよってな感じで一度受け取ります。 この時点でJavaMailClientの処理は正常に終了してしまいます。 (そうしないといつ届くかわからないメールにたいして非常に長い待ちが発生してしまいます。) ちなみに、自社メールあての存在しないアドレスfadfgagasggagg@abc.co.jpに送信を試みると、自社メールサーバはエラーを返してくれ、JavaMailClientでハンドリングできます。 これは自分のメーラーでも確認できると思いますよ。 (あて先のない自社ドメインのメールを打つと即座にエラーが表示されます。Thunderbirdでは・・・) | ||||
|
投稿日時: 2004-12-24 12:40
送信時の無効なアドレスが取得したい場合
javax.mail.event.TransportListenerを実装して messageNotDeliveredとmessagePartiallyDeliveredにしたい処理を書きましょう。 ちなみにこれが有効なのは 「接続先のSMTPサーバが受け取りを拒否した」場合であって 「送信したメールアドレスが存在しなかった」場合ではありませんので念のため。
[ メッセージ編集済み 編集者: na2fusi 編集日時 2004-12-24 12:45 ] | ||||
|
投稿日時: 2004-12-24 14:47
ホッシーさん、na2fusiさん、お返事ありがとうございました。
「受け取りを拒否するかどうか」という所はSMTPサーバに依存しているという事ですね。 javaMailの仕組みがよく分かりました。ありがとうございました。 |
1