Wildfly 9.1 smtp邮件子项

编程入门 行业动态 更新时间:2024-10-27 06:22:32
Wildfly 9.1 smtp邮件子项 - 无法连接到主机,端口:localhost,25;(Wildfly 9.1 smtp mail substem - Couldn't connect to host, port: localhost, 25; timeout -1;)

我和wildfly一起工作了一段时间,我无法让它的邮件子系统工作。 我已经看过许多教程如何通过Web控制台,CLI或直接在standalone.xml中进行设置,所以我很确定我的配置是正确的:

<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>

然后在我的Java文件中:

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

我得到:

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

奇怪的是, 它直接使用javax.mail API时可以使用相同的属性,如下所示:

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

我试图解决这个问题有两个原因:

我希望在standalone.xml中拥有我的凭据,而不是在我的java类中。 主要是因为我讨厌什么东西很奇怪,我不能让它工作!

我不明白的第二件事是为什么我得到这个例外:

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

当我尝试通过我提到的第二种方法发送电子邮件时。 只有在我使用standalone.bat命令从控制台启动我的wildfly服务器时才会出现此错误。如果我通过eclipse运行它“运行在服务器上”它可以工作。 第二次困惑。 我试图通过将我的自签名证书添加到jdks cacerts来解决第二个问题,但它没有帮助。

I'm working with wildfly as for a while and I cant get its mail subsystem working. I have seen many tutorials how to set it up whether through web console, CLI or directly in standalone.xml so I'm pretty sure that my config is right:

<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>

And then in my Java file:

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

And I get:

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

The weird thing is that it works with same properties when using javax.mail API directly like this:

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

I'm trying to solve this issue for two reasons:

I want to have my credentials in standalone.xml not in my java class. And mainly because I hate when something is weird and i cant get it working!

The second thing i do not understand clearly is why am I getting this exception:

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

when trying to send email by the second method I mentioned. This error only occurs in case that I am running starting my wildfly server from console with standalone.bat command.. If I am runing it through eclipse "run on server" it works. Confused for a second time. I tried to solve this second problem by adding my selfsigned certificate to jdks cacerts but it didn't help.

最满意答案

你的Java代码是什么类的@Resource? 很可能资源没有被注入,因为您的代码不在某种托管bean /类中。 检查gmailSession是否为非null以确保注入正常。

证书路径错误肯定是信任存储中的证书的问题。 通常,Gmail证书应使用默认信任库进行验证。 也许你有一个拦截请求的反病毒产品? 您是否查看了JavaMail FAQ条目 ?

What kind of class is your Java code with @Resource in? Most likely the resource is not being injected because your code is not in a managed bean/class of some sort. Check whether gmailSession is non-null to make sure the injection is working.

The cert path error is definitely a problem with certificates in your trust store. Normally the Gmail certificate should validate with the default trust store. Perhaps you have an anti-virus product that's intercepting the request? Did you check the JavaMail FAQ entry?

更多推荐

本文发布于:2023-07-24 01:59:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1240176.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:邮件   Wildfly   smtp

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!