- PR -

メール送信エラーの件

1
投稿者投稿内容
タラン
大ベテラン
会議室デビュー日: 2004/03/17
投稿数: 138
投稿日時: 2004-06-02 16:15
いつもお世話になっております。

この間もメールの送信エラー質問させていただいたことがありますが
原因不明でした。サーバーを2回再起等したら送信できるようになりましたので。。。

今回もメール送信エラーですがサーバーの再起動でも直らなくて質問させていただきます。

環境 Linux7.x java 1.3 tomcat 3.3.1 です。
サーバーの設定、Tomcatの設定は私がしたわけではないので細かいことは良く分かりませんが。 ごめんなさい。 
昔(?)はメール送信できたって上司が言ってます。T.T

今のエラー状況を説明すると
サーブレットでメール送信を行ってますが
HTMLの値を取得してメールで送ります。
例外の発生してないのに送信した後の結果ページを表示してくれません。

デバッグしてみたところ

try {

MimeMessage msg = new MimeMessage(session);
String fromName[] = {"webmaster@xxx.com","Webmaster"} ;
msg.setFrom(new InternetAddress(fromName[0],MimeUtility.encodeWord(fromName[1], "iso-2022-jp","B")));
InternetAddress[] tolist = new InternetAddress[ 1 ];
tolist[0] = new InternetAddress("na@xxx.com", MimeUtility.encodeWord("To", "iso-2022-jp","B"));
msg.setRecipients(Message.RecipientType.TO, tolist);
String subject = "タイトル";
msg.setSubject(MimeUtility.encodeText(subject,"iso-2022-jp", "B"));

msg.setContent("message","text/plain; charset=\"iso-2022-jp\"");

Debug.write("na","1",""); //ここまではデバッグの内容の表示ができますが

Transport.send(msg);//なぜ例外を返さないのか不思議です。

Debug.write("na","2","");//表示されてません。
} catch (Exception ex) {

Debug.write("na","ex",ex.toString());//例外だったらここで例外の内容が表示されるはずです。

response.sendRedirect("/send.html");
return;
}

サーブレットが結構長い時間(5分くらい)回った後には
エラー画面がでます。

<15:08:14> error:javax.mail.SendFailedException: Sending failed;
nested exception is:
javax.mail.MessagingException: Could not connect to SMTP host: xxx.xxx.xx.xxx, port: 25;
nested exception is:
java.net.ConnectException: ???\?\?\?\?\???


JAVA APIを参照してみてもデバッグの方法がなかったのでまた@IT会議室に質問させていただきます。 

よろしくお願いします。





javax.mail
クラス Transport

public static void send(Message msg)
throws MessagingExceptionメッセージを送信します。メッセージは、メッセージに指定されたすべての受信アドレス (Message メソッド getAllRecipients から返される) に、各アドレスに適切なメッセージトランスポートを使用して送信されます。send メソッドは、メッセージを送信する前に、メッセージ上で saveChanges メソッドを呼び出します。
メッセージの送信中、Transport により受信者アドレスのいずれかについて無効であることが検出された場合、SendFailedException がスローされます。クライアントはこの例外を検査することで、障害の詳細情報を得ることができます。メッセージが有効なアドレスに無事送信されているかどうかは、Transport 実装に依存します。詳細については SendFailedException を参照してください。また、送信が正常に終了したことは、メッセージが最終的な受信者に届いたことを意味しません。配信の後の段階で障害が発生することもあります。Transport が受信者への配信に関するメッセージを受け取ったら、その後に発生する障害は、配信されなかったメッセージの返信など、別の仕組みを通して報告される必要があります。


[ メッセージ編集済み 編集者: ヒデミ 編集日時 2004-06-02 16:23 ]
raystar
ぬし
会議室デビュー日: 2003/01/16
投稿数: 251
お住まい・勤務地: Tokyo/Japan
投稿日時: 2004-06-02 17:05
SMTPサーバを指定しているコードがないので、詳しくわかりませんが、
SMTPサーバの名前、IPが変わった or ポート番号が変わったということはないですか?

メールサーバへのセッション確立のところで落ちているようですよ。
タラン
大ベテラン
会議室デビュー日: 2004/03/17
投稿数: 138
投稿日時: 2004-06-02 17:24
ご回答ありがとうございました。

サーバーの指定は下記の通りです。
Properties props = new Properties();
props.put("mail.smtp.host", "xxx.xxx.xxx.xxx");
Session session = Session.getDefaultInstance(props, null);

まずサーバーが二つあります。(別のPCでそれぞれ設定されています。)
サーバーAではちゃっと動きますがサーバーBでは
<15:08:14> error:javax.mail.SendFailedException: Sending failed;
nested exception is:
javax.mail.MessagingException: Could not connect to SMTP host: xxx.xxx.xx.xxx, port: 25;
nested exception is:
java.net.ConnectException: ???\?\?\?\?\???

こういうエラーがでます。

わけが分かりません。 T.T

Tomcatの設定が問題でしょうか。

でもJavaMailに逆らう設定は特にありませんが

AとBは大体同じ設定でAサーバーにはjdk1.4 Tomcat 4.24 がインストールされています。

バージョンによる問題ではなさそうですが

よろしくお願いします。


MINE
会議室デビュー日: 2003/07/02
投稿数: 17
投稿日時: 2004-06-02 19:05
>props.put("mail.smtp.host", "xxx.xxx.xxx.xxx");
>

>javax.mail.MessagingException: Could not connect to SMTP host: xxx.xxx.xx.xxx, >port: 25;

伏字になっていますが、設定しているSMTPホストと
エラーメッセージのSMTPホストのIPが異なってますが、
これは単なる記述ミスですか?
もしかして、アプリケーション内で、別のホストへメール送信する
プログラムがあって設定値が書き換えられていると言うことは
ないでしょうか

あとサーバBから設定しているIPにpingはとおりますよね

[ メッセージ編集済み 編集者: MINE 編集日時 2004-06-02 19:06 ]
raystar
ぬし
会議室デビュー日: 2003/01/16
投稿数: 251
お住まい・勤務地: Tokyo/Japan
投稿日時: 2004-06-02 19:16
プログラムの問題でなければ、
設定周りの問題ですね。

MINEさんの言うとおり、
ping serverB

telnet serverB 25
のコマンドを使用して、
プログラム以前の環境からテストしてみてはどうでしょうか。
1

スキルアップ/キャリアアップ(JOB@IT)