Bom pessoal, sou novo aqui e também não tenho muita experiência em Java, porém, estou fazendo um projeto e quero que ele envie um e-mail para a pessoa quando ela se cadastrar no sistema. Para isso estou utilizando a biblioteca JavaMail. A seguir estou inserindo a classe que seria responsável por este envio de e-mail e também o erro que está surgindo.
package escambovirtual.model.service;
import java.util.Properties;
import javax.mail.Address;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
/**
*
* @author Joao
*/
public class EmailService {
public void sendEmail() {
Properties props = new Properties();
/**
* Parâmetros de conexão com servidor Gmail
*/
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 = Session.getDefaultInstance(props,
new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("meu_email@gmail.com", "minha_senha");
}
});
/**
* Ativa Debug para sessão
*/
session.setDebug(true);
try {
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress("meu_email@gmail.com")); //Remetente
Address[] toUser = InternetAddress //Destinatário(s)
.parse("email_destino@gmail.com");
message.setRecipients(Message.RecipientType.TO, toUser);
message.setSubject("Enviando email com JavaMail");//Assunto
message.setText("Enviei este email utilizando JavaMail com minha conta GMail!");
/**
* Método para enviar a mensagem criada
*/
Transport.send(message);
System.out.println("Feito!!!");
} catch (MessagingException e) {
throw new RuntimeException(e);
}
}
}
E este é o erro que está surgindo:
HTTP Status 500 - Request processing failed; nested exception is java.lang.RuntimeException: javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmail.com, port: 465;
type Exception report
message Request processing failed; nested exception is java.lang.RuntimeException: javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmail.com, port: 465;
description The server encountered an internal error that prevented it from fulfilling this request.
exception
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.RuntimeException: javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmail.com, port: 465;
nested exception is:
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
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:982)
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872)
javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:121)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
O método ainda não está adaptado para o que eu realmente quero fazer, por isso estou setando o email de destino dentro do próprio método. Mas acredito que desse jeito era pra funcionar.
Obs.: adicionei as bibliotecas mail.jar e activation.jar ao projeto.