- PR -

メール送信処理を実行できないサーバ?

1
投稿者投稿内容
アレク
ベテラン
会議室デビュー日: 2002/10/23
投稿数: 97
投稿日時: 2007-07-27 23:40
テスト環境で問題なく動いていたメール送信プログラムを本番環境のサーバに
移動したところ以下のエラーが出て送信が出来なくなってしまいました。

コード:
exception 

javax.servlet.ServletException: Sending failed;
  nested exception is: 
	javax.mail.MessagingException: Could not connect to SMTP host: hogehoge.com, port: 25
	org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:545)
	org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:486)
	org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
	org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	jp.tamax.filter.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:169)

root cause 

javax.mail.SendFailedException: Sending failed;
  nested exception is: 
	javax.mail.MessagingException: Could not connect to SMTP host: hogehoge.com, port: 25
	javax.mail.Transport.send0(Transport.java:219)
	javax.mail.Transport.send(Transport.java:81)
	jp.tamax.contents.inquiry.InquiryConfirmUnit.executeSendMail(InquiryConfirmUnit.java:149)
	jp.tamax.contents.inquiry.InquiryConfirmUnit.execute(InquiryConfirmUnit.java:57)
	jp.genux.WebUnit.ContentsCommonAction.execute(ContentsCommonAction.java:34)
	jp.genux.WebUnit.ContentsTemplateAction.execute(ContentsTemplateAction.java:30)
	org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
	org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
	org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	jp.tamax.filter.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:169)



デバッグのログは以下の通りです。

コード:
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: useEhlo true, useAuth true

DEBUG: SMTPTransport trying to connect to host "hogehoge.com", port 25

DEBUG SMTP RCVD: 
DEBUG: SMTPTransport could not connect to host "hogehoge.com", port: 25

Jul 27, 2007 10:43:28 PM org.apache.struts.action.RequestProcessor processException
WARNING: Unhandled Exception thrown: class javax.mail.SendFailedException



メールサーバの方に問題があるのかと思いましたが、メーラーではちゃんと送受信できていますし、
他のメールサーバに切り換えてみてもやはり同様の結果でした。

テスト環境では同じプログラムで送信できていましたし、
本番環境用のサーバに何か問題があるのかと思いますが、念のためにコードも記載しておきます。

コード:
private void executeSendMail(String to, String from) throws Exception
{
       String subject = "";
       String message = createMessage();        
        
       Properties props = System.getProperties();
       props.put("mail.smtp.host", "hogehoge.com");
       props.put("mail.smtp.port", "25");
       props.put("mail.smtp.auth", "true");
        
       Session session = Session.getInstance(props, new MyAuth());
       session.setDebug(true);
       
       MimeMessage msg = new MimeMessage(session);

       InternetAddress toList[] = InternetAddress.parse(to, false);
       msg.addRecipients(MimeMessage.RecipientType.TO, toList);

       InternetAddress fromAddress = new InternetAddress(from);
       msg.setFrom(fromAddress);

       msg.setSubject(subject,"ISO-2022-JP");
        
       MimeMultipart mm = new MimeMultipart("alternative");
  
       MimeBodyPart mbText = new MimeBodyPart();
       mbText.setText(message.replaceAll("<BR>", "\n"),"ISO-2022-JP");
       mm.addBodyPart(mbText);
        
       MimeBodyPart mbHtml = new MimeBodyPart();
       mbHtml.setContent(message, "text/html; charset=ISO-2022-JP");
       mm.addBodyPart(mbHtml);

       msg.setContent(mm);
        
       Transport.send(msg);
} 



本番環境用のサーバも特別普通のサーバと変わるものではありません。
違うと言えば SSL に対応していることぐらいですが、何か関係あるでしょうか?

お気付きの点ありましたら、ご指摘頂けると幸いです。
よろしくお願いいたします。
朝日奈ありす
大ベテラン
会議室デビュー日: 2007/05/02
投稿数: 189
お住まい・勤務地: 最北の地
投稿日時: 2007-07-28 08:08
Could not connect to SMTP host: hogehoge.com, port: 25

ホスト”hogehoge.com” ポート25で SMTP接続に失敗しました。

開発環境と同じネットワークに接続されているならば
ポートがふさがっている。プロキシ制限、フィルタがかけられているなどが考えられます。
未記入
ぬし
会議室デビュー日: 2004/09/17
投稿数: 667
投稿日時: 2007-07-28 12:42
・メーラーでのテスト動作を確認したのは本番環境サーバー上ですか?

・メーラーは何ですか? Outlook Express ですか?

・本番環境のサーバーから telnet hogehoge.com 25 で接続できますか?

以前、送信プログラムや telnet からの接続には失敗するが、なぜか Outlook Express からは接続が成功するということがありました。よくよく調べてみたところ、マカフィーウィルススキャンが、Outlook Express 以外からの 25番ポート宛アウトバウンドパケットをフィルタしていたのでした。

マカフィーウィルススキャンの設定で「大量のメール送信をするワームを禁止する」みたいな設定を無効にして解決したことがあります。
アレク
ベテラン
会議室デビュー日: 2002/10/23
投稿数: 97
投稿日時: 2007-07-31 09:03
ご返信頂いた皆様,誠にありがとうございます。

ご指摘頂いた点を含め,色々と検討・試行錯誤してみましたが,
やはり外部のメールサーバに接続することができませんでした。

今回は時間もないため,ローカルにメールサーバを構築し,
それを利用することによって問題解決いたしました。

ご協力に心から感謝いたします。
1

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