Skip to Main Content

Java EE (Java Enterprise Edition) General Discussion

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Interested in getting your voice heard by members of the Developer Marketing team at Oracle? Check out this post for AppDev or this post for AI focus group information.

Javamail - Send mail over SSL

843830May 29 2007 — edited Jun 13 2007
must send a mail use a SMTP with SSL.
This is an example of my code :


	
public void sendMail(String destinatario,String mittente,String oggetto,String messaggio,String fileName,String fileNameInMail)throws Exception
	{		
		if (protocol.equals("smtps")){ 
	        Security.addProvider( new com.sun.net.ssl.internal.ssl.Provider());
	    }
 
        props=System.getProperties();
	    props.setProperty("mail."+protocol+".host", mailServer);
	    props.setProperty("mail.transport.protocol", protocol);
 
	    if (protocol.equals("smtps")){ 
	    	props.setProperty("mail.smtps.auth", "true");
	    	props.setProperty("mail.smtps.starttls.enable","true"); 
	    	props.setProperty( "mail.smtps.socketFactory.fallback", "false");
	    	props.setProperty( "mail.smtps.socketFactory.class", SSL_FACTORY);
	    	props.setProperty( "mail.smtps.socketFactory.port", UtilitaGenerale.getStringa(port));
	    }
 
	    Authenticator auth=null;
	    if(!mailUser.trim().equals(""))	    		
	    	auth= new MyAuthenticator(mailUser,mailPassword); 
	    boolean debug = false;
	    //Session session = Session.getInstance(props,auth);
	    Session session=Session.getInstance(props,auth);
	    session.setDebug(true);
	    try{
	        Message msg = new MimeMessage(session);
	        Address mit=new InternetAddress(mittente);
	        msg.setFrom(mit);
	        InternetAddress[] address ={new InternetAddress(destinatario)};
	        msg.setRecipients(Message.RecipientType.TO, address);
	        msg.setSubject(oggetto);
 
	        MimeBodyPart textPart = new MimeBodyPart();
	        textPart.setContent(messaggio, "text/plain");
 
	        MimeBodyPart attachFilePart = new MimeBodyPart();
	        FileDataSource fds = new FileDataSource(fileName);
	        attachFilePart.setDataHandler(new DataHandler(fds));
	        attachFilePart.setFileName(fileNameInMail);
 
	        Multipart mp = new MimeMultipart();
	        mp.addBodyPart(textPart);
	        mp.addBodyPart(attachFilePart);
 
	        msg.setContent(mp);
	        
			    Transport transportTemp=null;
		        transportTemp= session.getTransport(protocol);
		        	
		        transportTemp.connect(mailServer,port,mailUser,mailPassword);
		        transportTemp.send(msg);
		        transportTemp.close();
	    }
	    catch(Exception e)
	    {	    	
 
	    	throw e;
	    }
	    finally
	    {
	    	session=null;	    	
	    }
	    
	}
but I obtain this error :

javax.mail.MessagingException: Exception reading response
at com.sun.mail.smtp.SMTPTransport.readServerResponse(SMTPTransport.java:1427)
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1225)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:340)
at javax.mail.Service.connect(Service.java:275)
at it.maggioli.informatica.conciliaweb.applicazione.service.mail.InviaLotto.inviaLotto(InviaLotto.java:158)
at it.maggioli.informatica.conciliaweb.applicazione.service.GestioneInvioLotto.inviaLotto(GestioneInvioLotto.java:236)
at it.maggioli.informatica.conciliaweb.applicazione.service.GestioneInvioLotto.inviaLottoNotifiche(GestioneInvioLotto.java:53)
at it.maggioli.informatica.conciliaweb.interfacciaclientserver.richiesteclient.EsecutoreSingolaRichiesta.eseguiRichiesta(EsecutoreSingolaRichiesta.java:1285)
at it.maggioli.informatica.conciliaweb.interfacciaclientserver.richiesteclient.EsecuzioneRichieste.eseguiRichiesteWindows(EsecuzioneRichieste.java:74)
at it.maggioli.informatica.conciliaweb.interfacciaclientserver.richiesteclient.EsecuzioneRichieste.eseguiRichieste(EsecuzioneRichieste.java:93)
at it.maggioli.informatica.conciliaweb.serlvets.AJAX.EsecuzioneRichiesta.processRequest(EsecuzioneRichiesta.java:153)
at it.maggioli.informatica.conciliaweb.serlvets.AJAX.EsecuzioneRichiesta.doPost(EsecuzioneRichiesta.java:50)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.planetj.servlet.filter.compression.CompressingFilter.doFilter(CompressingFilter.java:217)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:228)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:216)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:634)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:445)
at java.lang.Thread.run(Thread.java:619)
Caused by: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1520)
at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:182)
at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:176)
at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:975)
at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:123)
at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:511)
at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:449)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:817)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1029)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readDataRecord(SSLSocketImpl.java:677)
at com.sun.net.ssl.internal.ssl.AppInputStream.read(AppInputStream.java:75)
at com.sun.mail.util.TraceInputStream.read(TraceInputStream.java:97)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
at java.io.BufferedInputStream.read(BufferedInputStream.java:237)
at com.sun.mail.util.LineInputStream.readLine(LineInputStream.java:75)
at com.sun.mail.smtp.SMTPTransport.readServerResponse(SMTPTransport.java:1405)
... 28 more
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:285)
at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:191)
at sun.security.validator.Validator.validate(Validator.java:218)
at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:126)
at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:209)
at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:249)
at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:954)
... 40 more
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:174)
at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:238)
at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:280)
... 46 more


I have use the option debug of javamail and i have Obtain this :

DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Sun Microsystems, Inc]
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: trying to connect to host "sendm.cert.legalmail.it", port 465, isSSL true
DEBUG SMTP: exception reading response: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

Can you help me ?

Sorry for my bad english.
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Jul 11 2007
Added on May 29 2007
7 comments
3,182 views