users@glassfish.java.net

GF V3.1 - Error when sending email using SMTPS

From: CasMeiron <casmeiron_at_gmail.com>
Date: Thu, 30 Sep 2010 13:42:02 -0300

Hi guys,

The follow code works perfectly on glassfish v2.2 but doesn't work on latest
3.1 build:
                        Properties props = new Properties();
props.put("mail.transport.protocol", "smtps");
 props.put("mail.smtps.host", "smtp.gmail.com");
props.put("mail.smtps.auth", "true");
 props.put("mail.smtps.quitwait", "false");

Session mailSession = Session.getDefaultInstance(props);
 mailSession.setDebug(false);
Transport transport = mailSession.getTransport();

MimeMessage message = new MimeMessage(mailSession);
message.setSubject("bla bla bla");
 message.setContent("bla bla bla", "text/html");

String[] addresses = "user_at_gmail.com,user2_at_gmail.com".split(",");

for(String address: addresses)
message.addRecipient(javax.mail.Message.RecipientType.TO,
 new InternetAddress(address));

transport.connect
("smtp.gmail.com", 465, "user_sender_at_gmail.com", "the password");

transport.sendMessage(message,
message.getRecipients(javax.mail.Message.RecipientType.TO));

transport.close();

Whether you try to run this piece of code on gf v3.1 you gonna get the
follow output:


INFO: FileResourceLoader : adding path '.'
javax.mail.MessagingException: Could not connect to SMTP host:
smtp.gmail.com, port: 465;
  nested exception is:
java.net.SocketException: java.security.NoSuchAlgorithmException: Error
constructing implementation (algorithm: Default, provider: SunJSSE, class:
com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl)
 at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1706)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:525)
 at javax.mail.Service.connect(Service.java:291)
at
br.com.bestdeal.np.redirect.server.driven.EmailSenderMDB.onMessage(EmailSenderMDB.java:115)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
 at
org.glassfish.ejb.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:1052)
at
org.glassfish.ejb.security.application.EJBSecurityManager.invoke(EJBSecurityManager.java:1124)
 at
com.sun.ejb.containers.BaseContainer.invokeBeanMethod(BaseContainer.java:5363)
at com.sun.ejb.EjbInvocation.invokeBeanMethod(EjbInvocation.java:619)
 at
com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:801)
at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:571)
 at
org.jboss.weld.ejb.SessionBeanInterceptor.aroundInvoke(SessionBeanInterceptor.java:57)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 at java.lang.reflect.Method.invoke(Method.java:597)
at
com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:862)
 at
com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:801)
at
com.sun.ejb.containers.interceptors.InterceptorManager.intercept(InterceptorManager.java:371)
 at
com.sun.ejb.containers.BaseContainer.__intercept(BaseContainer.java:5335)
at com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:5323)
 at
com.sun.ejb.containers.MessageBeanContainer.deliverMessage(MessageBeanContainer.java:1092)
at
com.sun.ejb.containers.MessageBeanListenerImpl.deliverMessage(MessageBeanListenerImpl.java:81)
 at
com.sun.enterprise.connectors.inbound.MessageEndpointInvocationHandler.invoke(MessageEndpointInvocationHandler.java:171)
at $Proxy329.onMessage(Unknown Source)
 at com.sun.messaging.jms.ra.OnMessageRunner.run(OnMessageRunner.java:260)
at com.sun.enterprise.connectors.work.OneWork.doWork(OneWork.java:114)
 at
com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.performWork(ThreadPoolImpl.java:496)
at
com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.run(ThreadPoolImpl.java:532)
Caused by: java.net.SocketException: java.security.NoSuchAlgorithmException:
Error constructing implementation (algorithm: Default, provider: SunJSSE,
class: com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl)
 at
javax.net.ssl.DefaultSSLSocketFactory.throwException(SSLSocketFactory.java:179)
at
javax.net.ssl.DefaultSSLSocketFactory.createSocket(SSLSocketFactory.java:186)
 at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:276)
at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:227)
 at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1672)
... 31 more
Caused by: java.security.NoSuchAlgorithmException: Error constructing
implementation (algorithm: Default, provider: SunJSSE, class:
com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl)
at java.security.Provider$Service.newInstance(Provider.java:1245)
 at sun.security.jca.GetInstance.getInstance(GetInstance.java:220)
at sun.security.jca.GetInstance.getInstance(GetInstance.java:147)
 at javax.net.ssl.SSLContext.getInstance(SSLContext.java:125)
at javax.net.ssl.SSLContext.getDefault(SSLContext.java:68)
 at javax.net.ssl.SSLSocketFactory.getDefault(SSLSocketFactory.java:102)
at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:275)
 ... 33 more
Caused by: java.security.UnrecoverableKeyException: Password must not be
null
at sun.security.provider.JavaKeyStore.engineGetKey(JavaKeyStore.java:107)
 at
sun.security.provider.JavaKeyStore$JKS.engineGetKey(JavaKeyStore.java:38)
at java.security.KeyStore.getKey(KeyStore.java:763)
 at
com.sun.net.ssl.internal.ssl.SunX509KeyManagerImpl.<init>(SunX509KeyManagerImpl.java:113)
at
com.sun.net.ssl.internal.ssl.KeyManagerFactoryImpl$SunX509.engineInit(KeyManagerFactoryImpl.java:48)
 at javax.net.ssl.KeyManagerFactory.init(KeyManagerFactory.java:239)
at
com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl.getDefaultKeyManager(DefaultSSLContextImpl.java:170)
 at
com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl.<init>(DefaultSSLContextImpl.java:40)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
 at
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
 at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at java.lang.Class.newInstance0(Class.java:355)
 at java.lang.Class.newInstance(Class.java:308)
at java.security.Provider$Service.newInstance(Provider.java:1221)
 ... 39 more


Any thoughts?

Thanks.

-------------------------------
Paulo Reis