12

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

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サーバーを再起動するとすぐに、再び正常に動作し始めます。

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

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

4

6 に答える 6

12
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 = "xxxx@gmail.com";//
    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("xxxx@gmail.com"));
      msg.setRecipients(Message.RecipientType.TO, 
                        InternetAddress.parse("user120@example.com",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);
    }
  }
}
于 2014-12-28T05:04:06.610 に答える
0

JVM の開始時にプロパティーを設定してみてください (例: add ) -Djava.net.preferIPv4Stack=true

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

根本的な原因については、この記事でヒントが得られます:一部の Windows 7 システムでのみ java.net.preferIPv4Stack=true が必要なのはなぜですか? .

于 2016-09-06T00:45:52.717 に答える
0

これは起こらないはずです。これをやってみることができますか?システム プロパティを使用して、次のようにプロパティを設定します。

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

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

properties.setProperty("mail.smtp.port", "8080");
于 2015-04-04T14:06:53.557 に答える
0

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

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

于 2018-08-21T13:15:20.900 に答える