6
respostas

Loja virtual não envia e-mail

Pessoal, bom dia! Estou na 2’ parte do curso loja virtual 3 e fiz o mesmo exatamente como o curso. A loja não apresenta erros ao subir o servidor e realiza a venda dos livros, porém, não envia o e-mail ao usuário e apresenta o log abaixo.

Obs: criei e configurei uma conta gmail para tal e mesmo com ssl ligado e com portas 465 ou 587

15:05:38,570 ERROR [org.jboss.as.ejb3.invocation] (Thread-9 (ActiveMQ-client-global-threads-1764101507)) WFLYEJB0034: EJB Invocation failed on component EnviaEmailCompra for method public void br.com.casadocodigo.loja.service.EnviaEmailCompra.onMessage(javax.jms.Message): javax.ejb.EJBTransactionRolledbackException: 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

15:05:38,570 ERROR [org.jboss.as.ejb3.invocation] (Thread-9 (ActiveMQ-client-global-threads-1764101507)) WFLYEJB0034: EJB Invocation failed on component EnviaEmailCompra for method public void br.com.casadocodigo.loja.service.EnviaEmailCompra.onMessage(javax.jms.Message): javax.ejb.EJBTransactionRolledbackException: 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

Caused by: javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmail.com, port: 465;
  nested exception is:
6 respostas

Olá, João.

Parece problema na chave criptográfica do Google:

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

Provavelmente, um certificado raiz de uma autoridade certificadora foi considerado inválido.

Uma dúvida: qual é sua versão do Java?

Bom dia Alexandre Desde já obrigado, minha versão Java é 8 e o wildfly 10.x.

Teria alguma ideia de como eu poderia tentar pelo monos testar?

Peço opinião de todos os colegas e professores, obrigado.

insira seu código aqui

Dependendo da versão do Java, talvez o certificado do Google não seja reconhecido.

Então podemos:

1) Baixar o certificado do smtp.gmail.com:

echo -n | openssl s_client -connect smtp.gmail.com:443 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ~/gmail.crt

2) Adicionar o certificado no cacerts do Java

keytool -import -v -trustcacerts -alias smtp.gmail.com -file ~/gmail.crt -keystore $JAVA_HOME/jre/lib/security/cacerts -keypass changeit -storepass changeit

PS: Considerando um Linux e que a variável de ambiente JAVA_HOME aponta para a raiz da sua JDK

Referência: https://stackoverflow.com/questions/9619030/resolving-javax-net-ssl-sslhandshakeexception-sun-security-validator-validatore

Alexandre, pessoal, boa noite e desculpe a demora no retorno.

Segui o que o Alexandre informou, baixei e adicionei o certificado mas o problema continua.

Obs: meu SO é Ruindows mas consegui add o certificado. Outro fato que acredito não ter relevância foi testar em navegadores diferentes e com antivírus desativado.

Continuo na batalha e aguardo a ajuda dos amigos e professores.

Cordialmente João Junior

Olá, João Junior.

Uma pergunta: o erro continua o mesmo?

Opa Alexandre, bom dia.

Continua o mesmo. :(

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software