web-dev-qa-db-fra.com

javax.mail.MessagingException: impossible de se connecter à l'hôte SMTP: hôte local, port: 25

Je reçois un problème lors de l'envoi d'un courrier électronique.

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)

J'utilise le code ci-dessous.

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

le programme d’envoi de courrier électronique est exécuté sur Tomcat 5. Il arrive parfois que cela fonctionne correctement et qu’il aboutisse parfois au-dessus de l’exception. une fois que satart résultant de l'exception ci-dessus, il en résulte le même résultat pour chaque accès. mais dès que je redémarre le serveur Tomcat, il recommence à fonctionner correctement.

Donc, je ne pouvais pas trouver quelle est la raison. comme parfois cela fonctionne très bien et aboutit parfois à des exceptions.

Quelqu'un peut-il m'aider à résoudre ce problème?.

7
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);}
  }

}

11
Pape Diop

Il est très clair d'après votre exception qu'il tente de se connecter à localhost et non à 10.101.3.229 

extrait d'exception: Could not connect to SMTP Host: localhost, port: 25;

1.) S'il vous plaît vérifier s'il existe un contrôle null qui définit localhost comme valeur par défaut

2.) Après le redémarrage, si cela fonctionne correctement, cela signifie que la valeur correcte est extraite de Propriétés uniquement lors de la première exécution et que la valeur suivante est définie par défaut. Alors gardez l'objet-propriété comme un objet singleton et utilisez-le partout dans votre projet

2
Arun

Essayez de définir la propriété lors du démarrage de la machine virtuelle Java. Par exemple, ajoutez -Djava.net.preferIPv4Stack=true.

Vous ne pouvez pas le définir lors de l'exécution du code, car Java.net le lit au démarrage de jvm.

Et à propos de la cause première, cet article donne un indice: Pourquoi ai-je besoin de Java.net.preferIPv4Stack = true sur certains systèmes Windows 7?

0
freeman

Cela ne devrait pas arriver. Pouvez-vous essayer ceci? Utilisez les propriétés du système et définissez la propriété comme suit:

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

Et si vous avez un port associé, définissez-le également.

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

J'étais également confronté à la même erreur… .. La raison en est qu'il n'y a pas de serveur smtp sur votre environnement. Pour créer un faux serveur smtp, j'ai utilisé ce fichier fake-smtp.jar pour créer un serveur virtuel et écouter toutes les demandes. Si vous faites face à la même erreur, je vous recommande d'utiliser ce fichier jar et de l'exécuter après l'extraction, puis d'essayer d'exécuter votre application. 

Téléchargez la dernière version de fake smtp

0
Ashwani Sharma