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.