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?.
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);}
}
}
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
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? .
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");
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.