web-dev-qa-db-ja.com

javax.mail.MessagingException:SMTPホストに接続できませんでした:localhost、ポート:25

メールの送信中に問題が発生します。

javax.mail.SendFailedException: Sending failed;
  nested exception is: 
    javax.mail.MessagingException: Could not connect to SMTP Host: localhost, port: 25;
  nested exception is: 
    Java.net.ConnectException: Connection refused: connect
    at javax.mail.Transport.send0(Transport.Java:219)
    at javax.mail.Transport.send(Transport.Java:81)
    at org.Apache.jsp.online_005fScheme_005fSend_005fMail_jsp.sendMail(online_005fScheme_005fSend_005fMail_jsp.Java:116)
    at org.Apache.jsp.online_005fScheme_005fSend_005fMail_jsp._jspService(online_005fScheme_005fSend_005fMail_jsp.Java:416)
    at org.Apache.jasper.runtime.HttpJspBase.service(HttpJspBase.Java:98)
    at javax.servlet.http.HttpServlet.service(HttpServlet.Java:729)
    at org.Apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.Java:369)
    at org.Apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.Java:308)
    at org.Apache.jasper.servlet.JspServlet.service(JspServlet.Java:259)
    at javax.servlet.http.HttpServlet.service(HttpServlet.Java:729)
    at org.Apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.Java:269)
    at org.Apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.Java:188)
    at org.Apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.Java:213)
    at org.Apache.catalina.core.StandardContextValve.invoke(StandardContextValve.Java:172)
    at org.Apache.catalina.core.StandardHostValve.invoke(StandardHostValve.Java:127)
    at org.Apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.Java:117)
    at org.Apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.Java:108)
    at org.Apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.Java:174)
    at org.Apache.coyote.http11.Http11Processor.process(Http11Processor.Java:879)
    at org.Apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.Java:665)
    at org.Apache.Tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.Java:528)
    at org.Apache.Tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.Java:81)
    at org.Apache.Tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.Java:689)
    at Java.lang.Thread.run(Thread.Java:619)

私は以下のコードスニペットを使用します。

Properties props = new Properties();
     props.put("mail.smtp.Host", "10.101.3.229");

電子メール送信プログラムはTomcat 5で実行されています。正常に動作している場合もあれば、例外を超える場合もあります。上記の例外が発生すると、すべてのアクセスで同じ結果になります。しかし、Tomcatサーバーを再起動するとすぐに再び正常に動作し始めます。

だから私は理由が何であるかを見つけることができませんでした。ときどき同じことがうまく機能し、時には例外を超える結果になることがあります。

誰でもこの問題を解決できますか?.

10
Sri Niwash
package sn;
import Java.util.Date;
import Java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class SendEmail {
  public static void main(String[] args) {
  final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
  // Get a Properties object
     Properties props = System.getProperties();
     props.setProperty("mail.smtp.Host", "smtp.gmail.com");
     props.setProperty("mail.smtp.socketFactory.class", SSL_FACTORY);
     props.setProperty("mail.smtp.socketFactory.fallback", "false");
     props.setProperty("mail.smtp.port", "465");
     props.setProperty("mail.smtp.socketFactory.port", "465");
     props.put("mail.smtp.auth", "true");
     props.put("mail.debug", "true");
     props.put("mail.store.protocol", "pop3");
     props.put("mail.transport.protocol", "smtp");
     final String username = "[email protected]";//
     final String password = "0000000";
     try{
     Session session = Session.getDefaultInstance(props, 
                          new Authenticator(){
                             protected PasswordAuthentication getPasswordAuthentication() {
                                return new PasswordAuthentication(username, password);
                             }});

   // -- Create a new message --
     Message msg = new MimeMessage(session);

  // -- Set the FROM and TO fields --
     msg.setFrom(new InternetAddress("[email protected]"));
     msg.setRecipients(Message.RecipientType.TO, 
                      InternetAddress.parse("[email protected]",false));
     msg.setSubject("Hello");
     msg.setText("How are you");
     msg.setSentDate(new Date());
     Transport.send(msg);
     System.out.println("Message sent.");
  }catch (MessagingException e){ System.out.println("Erreur d'envoi, cause: " + e);}
  }

}

12
Pape Diop

例外から、10.101.3.229ではなくlocalhostに接続しようとしていることが非常に明確です。

例外スニペット:Could not connect to SMTP Host: localhost, port: 25;

1.)localhostをデフォルト値として設定しているnullチェックがあるかどうかを確認してください

2.)再起動後、正常に機能している場合は、初回実行時のみプロパティから適切な値が取得され、次回実行時に値がデフォルトに設定されることを意味します。プロパティオブジェクトをシングルトンとして保持し、プロジェクト全体で使用します

3
Arun

JVMの起動時にプロパティを設定してください。たとえば、-Djava.net.preferIPv4Stack=true

Java.netはjvmの起動時にそれを読み取るだけなので、コードの実行時には設定できません。

そして根本的な原因について、この記事はいくつかのヒントを与えます: なぜJava.net.preferIPv4Stack = trueが一部のWindows 7システムでのみ必要なのですか?

0
freeman

これは起こらないはずです。これを試してもらえますか?システムプロパティを使用して、プロパティを以下のように設定します。

Properties properties = System.getProperties();
// Setup mail server
properties.setProperty("mail.smtp.Host", "10.101.3.229");

また、ポートが関連付けられている場合は、これも設定します。

properties.setProperty("mail.smtp.port", "8080");
0
Swaprks

私も同じエラーに直面していました。これは、環境にsmtpサーバーがないためです。偽のsmtpサーバーを作成するために、このfake-smtp.jarファイルを使用して、仮想サーバーを作成し、すべてのリクエストをリッスンしました。同じエラーが発生している場合は、このjarを使用し、抽出後に実行してからアプリケーションを実行することをお勧めします。

偽のsmtpの最新バージョンをダウンロード

0
Ashwani Sharma