2016-03-21 11 views
0

Ich arbeite seit einiger Zeit mit Wildfly und ich kann nicht das Mail-Subsystem arbeiten. Ich habe viele Tutorials gesehen, wie es eingerichtet werden, ob durch Web-Konsole, CLI oder direkt in standalone.xml so bin ich ziemlich sicher, dass mein Config ist richtig:Wildfly 9.1 SMTP-Mail-Substem - Verbindung zum Host nicht möglich, Port: localhost, 25; Zeitüberschreitung -1;

<subsystem xmlns="urn:jboss:domain:mail:2.0"> 
     <mail-session debug="true" name="Gmail" jndi-name="java:jboss/mail/Gmail" from="MAILFROM"> 
      <smtp-server outbound-socket-binding-ref="mail-smtp" ssl="true" username="MAILFROM" password="PASSWORD"/> 
     </mail-session> 
</subsystem> 
<outbound-socket-binding name="mail-smtp"> 
     <remote-destination host="smtp.gmail.com" port="465"/> 
</outbound-socket-binding> 

Und dann in meiner Java-Datei:

@Resource(mappedName = "java:jboss/mail/Gmail") 
private javax.mail.Session gmailSession; 

public void sendEmail(String to,String subject,String msg){ 
Message message = new MimeMessage(gmailSession); 
message.setFrom(newInternetAddress("MAILFROM")); 
message.setRecipients(Message.RecipientType.TO, 
InternetAddress.parse(to)); 
message.setSubject(subject); 
message.setContent(msg,"text/html"); 
Transport.send(message);} 

Und ich bekomme:

java.net.ConnectException: Connection refused: connect 
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:2054) 
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:697) 
at javax.mail.Service.connect(Service.java:364) 
at javax.mail.Service.connect(Service.java:245) 
at javax.mail.Service.connect(Service.java:194) 
at javax.mail.Transport.send0(Transport.java:253) 
at javax.mail.Transport.send(Transport.java:124) 
at com.liferoles.controller.UserManager.sendEmail(UserManager.java:487) 
at com.liferoles.controller.UserManager.sendResetLink(UserManager.java:520) 
at com.liferoles.rest.RestAuth.sendResetLink(RestAuth.java:82) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
at java.lang.reflect.Method.invoke(Unknown Source) 
at org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:137) 
at org.jboss.resteasy.core.ResourceMethodInvoker.invokeOnTarget(ResourceMethodInvoker.java:296) 
at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:250) 
at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:237) 
at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:356) 
at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:179) 
at org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:220) 
at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:56) 
at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:51) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) 
at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:86) 
at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62) 
at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36) 
at org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78) 
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) 
at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131) 
at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57) 
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) 
at io.undertow.security.handlers.AuthenticationConstraintHandler.handleRequest(AuthenticationConstraintHandler.java:51) 
at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46) 
at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64) 
at io.undertow.servlet.handlers.security.ServletSecurityConstraintHandler.handleRequest(ServletSecurityConstraintHandler.java:56) 
at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:58) 
at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:72) 
at io.undertow.security.handlers.NotificationReceiverHandler.handleRequest(NotificationReceiverHandler.java:50) 
at io.undertow.security.handlers.SecurityInitialHandler.handleRequest(SecurityInitialHandler.java:76) 
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) 
at org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61) 
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) 
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) 
at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:282) 
at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:261) 
at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:80) 
at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:172) 
at io.undertow.server.Connectors.executeRootHandler(Connectors.java:199) 
at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:774) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
at java.lang.Thread.run(Unknown Source) 
Caused by: java.net.ConnectException: Connection refused: connect 
at java.net.TwoStacksPlainSocketImpl.socketConnect(Native Method) 
at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source) 
at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source) 
at java.net.AbstractPlainSocketImpl.connect(Unknown Source) 
at java.net.PlainSocketImpl.connect(Unknown Source) 
at java.net.SocksSocketImpl.connect(Unknown Source) 
at java.net.Socket.connect(Unknown Source) 
at java.net.Socket.connect(Unknown Source) 
at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:329) 
at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:236) 
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:2020) 
... 52 more 

Die seltsame Sache, dass ist es mit gleichen Eigenschaften funktioniert, wenn javax.mail API direkt wie folgt aus:

public void sendEmail(String to,String subject,String msg){ 
     Properties properties = System.getProperties(); 
     String user = "MAILFROM"; 
     String passwd = "PASSWORD"; 
     properties.setProperty("mail.smtp.auth", "true"); 
     properties.setProperty("mail.smtp.starttls.enable", "true"); 
     properties.setProperty("mail.smtp.host", "smtp.gmail.com"); 
     properties.setProperty("mail.smtp.port", "587"); 
     javax.mail.Session gmailSession = javax.mail.Session.getInstance(properties, 
        new javax.mail.Authenticator() { 
        protected PasswordAuthentication getPasswordAuthentication() { 
         return new PasswordAuthentication(user, passwd); 
        } 
        }); 
     Message message = new MimeMessage(gmailSession); 
     message.setFrom(new InternetAddress("MAILFROM")); 
     message.setRecipients(Message.RecipientType.TO, 
     InternetAddress.parse(to)); 
     message.setSubject(subject); 
     message.setContent(msg,"text/html"); 
     Transport.send(message); 

Ich versuche, dieses Problem aus zwei Gründen zu lösen: nicht in meiner Java-Klasse

  1. ich meine Zugangsdaten in standalone.xml haben will.
  2. Und vor allem, weil ich hasse, wenn etwas komisch ist und ich kann es nicht funktionieren!

Das zweite, was ich verstehe nicht klar ist, warum bin ich diese Ausnahme bekommen:

 
    15:25:28,587 ERROR [stderr] (default task-10)javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorExc 
eption: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid cert 
ification path to requested target 
15:25:28,587 ERROR [stderr] (default task-10) at com.liferoles.controller.UserManager.sendEmail(UserManager.java:484) 
15:25:28,587 ERROR [stderr] (default task-10) at com.liferoles.controller.UserManager.sendResetLink(UserManager.java:5 
14) 
15:25:28,587 ERROR [stderr] (default task-10) ... 44 more 
15:25:28,588 ERROR [stderr] (default task-10) Caused by: javax.mail.MessagingException: Could not convert socket to TLS; 

15:25:28,588 ERROR [stderr] (default task-10) nested exception is: 
15:25:28,588 ERROR [stderr] (default task-10) javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorExc 
eption: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid cert 
ification path to requested target 
15:25:28,588 ERROR [stderr] (default task-10) at com.sun.mail.smtp.SMTPTransport.startTLS(SMTPTransport.java:2000) 
15:25:28,588 ERROR [stderr] (default task-10) at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:70 
9) 
15:25:28,588 ERROR [stderr] (default task-10) at javax.mail.Service.connect(Service.java:386) 
15:25:28,589 ERROR [stderr] (default task-10) at javax.mail.Service.connect(Service.java:245) 
15:25:28,589 ERROR [stderr] (default task-10) at javax.mail.Service.connect(Service.java:194) 
15:25:28,589 ERROR [stderr] (default task-10) at javax.mail.Transport.send0(Transport.java:253) 
15:25:28,589 ERROR [stderr] (default task-10) at javax.mail.Transport.send(Transport.java:124) 
15:25:28,589 ERROR [stderr] (default task-10) at com.liferoles.controller.UserManager.sendEmail(UserManager.java:481) 
15:25:28,590 ERROR [stderr] (default task-10) ... 45 more 
15:25:28,590 ERROR [stderr] (default task-10) Caused by: javax.net.ssl.SSLHandshakeException: sun.security.validator.Val 
idatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find v 
alid certification path to requested target

bei dem Versuch, E-Mail nach der zweiten Methode senden ich erwähnt. Dieser Fehler tritt nur auf, wenn ich meinen Wildfly-Server von der Konsole aus mit dem Standalone.bat-Befehl starte. Wenn ich ihn durch eclipse "run on server" laufen lasse, funktioniert es. Verwirrt für ein zweites Mal. Ich habe versucht, dieses zweite Problem zu lösen, indem ich mein selbstsigniertes Zertifikat zu jdks cacerts hinzufügte, aber es half nicht.

+0

Sie verwenden in Ihrem "funktionierenden" Java-Code einen anderen Port als einen in der xml-Konfiguration. – ctomc

Antwort

0

Um was für eine Klasse handelt es sich bei Ihrem Java-Code mit @Resource? Wahrscheinlich wird die Ressource nicht injiziert, da sich Ihr Code nicht in einer verwalteten Bean/Klasse befindet. Überprüfen Sie, ob gmailSession nicht null ist, um sicherzustellen, dass die Injektion funktioniert.

Der Zertifikatspfadfehler ist definitiv ein Problem mit Zertifikaten in Ihrem Truststore. Normalerweise sollte das Google Mail-Zertifikat mit dem Standard-Truststore überprüft werden. Vielleicht haben Sie ein Antivirenprodukt, das die Anfrage abfängt? Hast du die JavaMail FAQ entry überprüft?

+0

Null-Test positiv, Sie hatten Recht! G2g wird jetzt versuchen, es morgen zu lösen und eine Nachricht hinterlassen. Danke für jetzt :) –

+0

OK, beide Probleme gelöst. Im ersten Fall hatten Sie Recht, also änderte ich die Ressourceninjektion in: gmailSession = InitialContext.doLookup ("java: jboss/mail/Gmail"); Du warst auch mit dem zweiten Problem richtig, anfangs habe ich das keytool schlecht benutzt, dein Link hat mir geholfen es zu lösen. Vielen Dank! –

Verwandte Themen