[ https://issues.apache.org/jira/browse/TOMEE-1697?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15113670#comment-15113670 ]
Tamás Greguss commented on TOMEE-1697: -------------------------------------- Ok, I have found an almost completely different way how to use JavaMail API to send e-mail on SSL connection and it works well with new version of TomEE. However this new code does not work with TomEE 1.7.1. So is there an undocumented change in the java mail API? Another problem is that for sending html emails I use HtmlEmail class from Apache Commons Email library that underneath uses Java Mail API. And it also fails sending email on TomEE 1.7.3. So I don't think that the changes in the geronimo java mail library are correct changes. Or backward incompatibility is intentional? In this case why isn't it well documented? Here is the code that uses HtmlEmail class: {noformat} public static void SendMailSSL( String to_address, String to_name, String from_address, String from_name, String subject, String message, String smtpHost, int smtpPort, String senderuser, String senderpass ) throws RuntimeException { try { HtmlEmail email = new HtmlEmail(); email.setHostName(smtpHost); email.setSmtpPort(smtpPort); email.setAuthentication(senderuser, senderpass); email.setSSLOnConnect(true); email.setFrom(from_address, from_name); email.addTo(to_address, to_name); email.setSubject(subject); email.setContent(message, EmailConstants.TEXT_HTML); email.setCharset(EmailConstants.UTF_8); email.send(); } catch (EmailException ex) { throw new RuntimeException("Sending email failed: " + ex.getMessage() + " ### " + ex.toString() + " ### " + to_address + " " + to_name + " " + from_address + " " + from_name + " " + subject + " " + message + " " + senderuser + " " + senderpass); } } {noformat} > javamail: sending email fails > ----------------------------- > > Key: TOMEE-1697 > URL: https://issues.apache.org/jira/browse/TOMEE-1697 > Project: TomEE > Issue Type: Bug > Affects Versions: 1.7.3 > Environment: Linux (Ubuntu 14.04.3 LTS), Oracle Java 1.8.0_66 > Reporter: Tamás Greguss > Priority: Critical > Fix For: 1.7.4 > > > Sending email fails. javamail's Transport.send(...) function throws an > exception. The same code works fine with previous versions of TomEE which > includes javamail 1.8.3. But TomEE 1.7.3 upgraded to javamail 1.9.0-alpha2 > which does not work well. > If in TomEE 1.7.3 lib folder I change the content of > geronimo-javamail_1.4_mail-1.9.0-alpha-2.jar file to the previous > geronimo-javamail_1.4_mail-1.8.3.jar, it also works well. > Here is the code that works fine with sendmail 1.8.3 in TomEE 1.7.1 but fails > with sendmail.1.9.0-alpha2 in TomEE 1.7.3: > (This is a low level code only. But using apache commons email library which > uses java.mail in the background, also fails.) > {code:title=MailSender.java|borderStyle=solid} > public static void SendWithGMailSSL( String email_to, String subject, String > text, String email_from, final String senderuser, final String senderpass ) { > Properties props = new Properties(); > props.put("mail.smtp.host", "smtp.gmail.com"); > props.put("mail.smtp.socketFactory.port", "465"); > props.put("mail.smtp.socketFactory.class", > "javax.net.ssl.SSLSocketFactory"); > props.put("mail.smtp.auth", "true"); > props.put("mail.smtp.port", "465"); > Session session; > try { > session = Session.getInstance(props, new > javax.mail.Authenticator() { > @Override > protected PasswordAuthentication > getPasswordAuthentication() { > return new PasswordAuthentication(senderuser, > senderpass); > } > }); > } catch (Exception e) { > throw new RuntimeException(e); > } > try { > Message message = new MimeMessage(session); > message.setFrom(new InternetAddress(email_from)); > message.setRecipients(Message.RecipientType.TO, > InternetAddress.parse(email_to)); > message.setSubject(subject); > message.setText(text); > Transport.send(message); > //System.out.println("e-mail sending done."); > } catch (MessagingException e) { > throw new RuntimeException(e); > } > } > {code} > The calling of Transport.send(message) throws an exception: > {noformat} > javax.mail.SendFailedException: Send failure (javax.mail.MessagingException: > Connection error (java.io.IOException: Error connecting to smtp.gmail.com, > 465)) > at javax.mail.Transport.send(Transport.java:163) > at javax.mail.Transport.send(Transport.java:48) > at com.gbit.lib.GBITMail.SendWithGMailSSL(GBITMail.java:136) > at com.gbit.lib.GBITMail.SendMail(GBITMail.java:103) > at > com.gbit.efoglalo.test.UnitTestMB.testSendingEmailOld(UnitTestMB.java:503) > at > com.gbit.efoglalo.test.UnitTestMB$$OwbNormalScopeProxy0.testSendingEmailOld(com/gbit/efoglalo/test/UnitTestMB.java) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > at java.lang.reflect.Method.invoke(Method.java:497) > at org.apache.el.parser.AstValue.invoke(AstValue.java:278) > at > org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:273) > at > org.apache.myfaces.view.facelets.el.ContextAwareTagMethodExpression.invoke(ContextAwareTagMethodExpression.java:96) > at > javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:88) > at javax.faces.event.ActionEvent.processListener(ActionEvent.java:51) > at > javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:420) > at javax.faces.component.UICommand.broadcast(UICommand.java:103) > at javax.faces.component.UIViewRoot._broadcastAll(UIViewRoot.java:1041) > at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:289) > at javax.faces.component.UIViewRoot._process(UIViewRoot.java:1415) > at > javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:765) > at > org.apache.myfaces.lifecycle.InvokeApplicationExecutor.execute(InvokeApplicationExecutor.java:38) > at > org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:170) > at > org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117) > at javax.faces.webapp.FacesServlet.service(FacesServlet.java:197) > at > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) > at > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) > at > org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) > at > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) > at > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) > at com.ocpsoft.pretty.PrettyFilter.doFilter(PrettyFilter.java:145) > at > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) > at > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) > at > org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:748) > at > org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:486) > at > org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:411) > at > org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:338) > at com.ocpsoft.pretty.PrettyFilter.doFilter(PrettyFilter.java:137) > at > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) > at > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) > at > org.omnifaces.filter.CacheControlFilter.doFilter(CacheControlFilter.java:226) > at org.omnifaces.filter.HttpFilter.doFilter(HttpFilter.java:108) > at > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) > at > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) > at > org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) > at > org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) > at org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve.java:44) > at > org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505) > at > org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170) > at > org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) > at > org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:957) > at > org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) > at > org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423) > at > org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079) > at > org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:620) > at > org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316) > at > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) > at > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) > at > org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) > at java.lang.Thread.run(Thread.java:745) > Caused by: javax.mail.MessagingException: Connection error > (java.io.IOException: Error connecting to smtp.gmail.com, 465) > at > org.apache.geronimo.javamail.transport.smtp.SMTPConnection.protocolConnect(SMTPConnection.java:166) > at > org.apache.geronimo.javamail.transport.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:165) > at javax.mail.Service.connect(Service.java:274) > at javax.mail.Service.connect(Service.java:91) > at javax.mail.Service.connect(Service.java:76) > at javax.mail.Transport.send(Transport.java:94) > ... 59 more > Caused by: java.io.IOException: Error connecting to smtp.gmail.com, 465 > at > org.apache.geronimo.javamail.util.MailConnection.createSocketFromFactory(MailConnection.java:408) > at > org.apache.geronimo.javamail.util.MailConnection.createSocket(MailConnection.java:504) > at > org.apache.geronimo.javamail.util.MailConnection.getConnectedSocket(MailConnection.java:322) > at > org.apache.geronimo.javamail.util.MailConnection.getConnection(MailConnection.java:274) > at > org.apache.geronimo.javamail.transport.smtp.SMTPConnection.protocolConnect(SMTPConnection.java:145) > ... 64 more > Caused by: java.lang.InstantiationException > at > sun.reflect.InstantiationExceptionConstructorAccessorImpl.newInstance(InstantiationExceptionConstructorAccessorImpl.java:48) > at java.lang.reflect.Constructor.newInstance(Constructor.java:422) > at java.lang.Class.newInstance(Class.java:442) > at > org.apache.geronimo.javamail.util.MailConnection.createSocketFromFactory(MailConnection.java:355) > ... 68 more > {noformat} -- This message was sent by Atlassian JIRA (v6.3.4#6332)