Como eu posso enviar emails no java?

46 respostas
Thallysson

Olá, eu gostaria de saber neste tópico como eu faço para enviar emails no java? Eu já coloquei no meu projeto esta biblioteca, esta, e esta, já tentei todo tipo de exemplo na internet e todos é lançado uma exceção dizendo que não foi possível se conectar ao servidor smtp, alguém pode me explicar como eu faço enviar o email?

46 Respostas

T

Ta aqui um exemplo de envio utilizando o Commons Mail. Caso não funcione, coloque seu código aqui para que possamos verificar o que você está fazendo de errado.

SimpleEmail mail = new SimpleEmail();
mail.setFrom("[email removido]", "Meu nome");
mail.setSubject("E-mail exemplo");
mail.setMsg("E-mail de exemplo");
mail.setSSLOnConnect(true);
mail.setAuthentication("[email removido]", "minhasenha");
mail.setHostName("smtp.gmail.com");
mail.setSmtpPort(465);
mail.addTo("[email removido]", "Nome do usuario");
mail.send();
Thallysson

É necessário nome de usuário ou só o endereço de email já funciona?

RoinujNosde

Tá falando do “mail.addTo”, certo?
Esse método aceita apenas email, se preferir:

Thallysson

Eu estava falando tanto do mail.addTo quanto do mail.setFrom

RoinujNosde

O mesmo vale para o setFrom.

guivirtuoso

Provavelmente você já deve ter feito isso, mas é sempre bom reforçar.
Dá uma olhada no fórum, essa dúvida sobre envio de e-mail aparece constantemente e tem inúmeras threads que podem te ajudar:

http://www.guj.com.br/search?q=email%20java

Da uma olhada nos resultados, veja os exemplos, as duvidas dos outros usuários, tente implementar e ai se ainda assim algo não der certo… poste o problema p/ pessoal poder continuar te ajudando a partir do ponto que você “empacou”.

No seu primeiro post você reclamou sobre não conseguir se conectar ao servidor SMTP, então preste muita atenção ao IP e a PORTA e se é necessário conexão segura TTL/SSL ou não.

O Ideal é você testar esses parâmetros todos em um cliente de E-mail, tipo Thunderbird (https://www.mozilla.org/pt-BR/thunderbird/) e se essas configurações SMTP funcionarem, é uma preocupação a menos na sua programação.

E COM CERTEZA, você irá precisar dos dados de autenticação deste SMTP para poder realizar o envio.
A um bom tempo que os servidor não aceitam mais envios sem autenticação.

Abs e bons estudos.

P

Aproveitando o Tópico tenho 2 duvidas:

  1. quanto cobrar para implementar este método em programa já criado ( tipo atualização)?
  2. nos meus testes o programa esta enviando o email 3 vezes?

botão para enviar:

CommonsMail enviar;

try {

enviar = new CommonsMail();

enviar.enviaEmailSimples();
} catch (EmailException ex) {
        Logger.getLogger(menuprincipal.class.getName()).log(Level.SEVERE, null, ex);
    } catch (MalformedURLException ex) {
        Logger.getLogger(menuprincipal.class.getName()).log(Level.SEVERE, null, ex);
    }

classe que envia:

public class CommonsMail {

public CommonsMail() throws EmailException, MalformedURLException {

enviaEmailSimples();

//enviaEmailComAnexo();

enviaEmailFormatoHtml();

}

/**
  • envia email simples(somente texto)
  • @throws EmailException
    /
    public void enviaEmailSimples() throws EmailException {
    SimpleEmail email = new SimpleEmail();
    email.setHostName(“smtp.gmail.com”); // o servidor SMTP para envio do e-mail
    email.addTo("[email removido]"); //destinatário
    email.setFrom("[email removido]"); // remetente
    email.setSubject(“Teste email simples”); // assunto do e-mail
    email.setMsg(" Esta é uma mensagem simples de email sem formatação"); //conteudo do e-mail
    email.setAuthentication("[email removido]",“xxxxxxxx”);
    email.setSmtpPort(465);
    email.setSSL(true);
    //email.setTLS(true);
    email.send();
    JOptionPane.showMessageDialog(null, “email enviado com sucesso!”);
    }
    /
    *
  • envia email com arquivo anexo
  • @throws EmailException
    /
    /public void enviaEmailComAnexo() throws EmailException{
    // cria o anexo 1.
    EmailAttachment anexo1 = new EmailAttachment();
    anexo1.setPath("teste/teste.txt"); //caminho do arquivo (RAIZ_PROJETO/teste/teste.txt)
    anexo1.setDisposition(EmailAttachment.ATTACHMENT);
    anexo1.setDescription("Exemplo de arquivo anexo");
    anexo1.setName("teste.txt");
    // cria o anexo 2.
    EmailAttachment anexo2 = new EmailAttachment();
    anexo2.setPath("teste/teste2.jsp"); //caminho do arquivo (RAIZ_PROJETO/teste/teste2.jsp)
    anexo2.setDisposition(EmailAttachment.ATTACHMENT);
    anexo2.setDescription("Exemplo de arquivo anexo");
    anexo2.setName("teste2.jsp");
    // configura o email
    MultiPartEmail email = new MultiPartEmail();
    email.setHostName("smtp.gmail.com"); // o servidor SMTP para envio do e-mail
    email.addTo("[email removido]", "Guilherme"); //destinatário
    email.setFrom("[email removido]", "Eu"); // remetente
    email.setSubject("Teste -> Email com anexos"); // assunto do e-mail
    email.setMsg("Teste de Email utilizando commons-email"); //conteudo do e-mail
    email.setAuthentication("teste", "xxxxx");
    email.setSmtpPort(465);
    email.setSSL(true);
    email.setTLS(true);
    // adiciona arquivo(s) anexo(s)
    email.attach(anexo1);
    email.attach(anexo2);
    // envia o email
    email.send();
    }
    /
  • Envia email no formato HTML
  • @throws EmailException
  • @throws MalformedURLException
    */
    public void enviaEmailFormatoHtml() throws EmailException, MalformedURLException {
    HtmlEmail email = new HtmlEmail();
    // adiciona uma imagem ao corpo da mensagem e retorna seu id
    URL url = new URL(“http://www.apache.org/images/asf_logo_wide.gif”);
    String cid = email.embed(url, “Apache logo”);
    // configura a mensagem para o formato HTML
    email.setHtmlMsg(" Logo do Apache - “);
    // configure uma mensagem alternativa caso o servidor não suporte HTML
    email.setTextMsg(“Seu servidor de e-mail não suporta mensagem HTML”);
    email.setHostName(“smtp.gmail.com”); // o servidor SMTP para envio do e-mail
    email.addTo("[email removido]”, “Destinatario”); //destinatário
    email.setFrom("[email removido]", “Remetente”); // remetente
    email.setSubject(“Teste de email em HTML”); // assunto do e-mail
    email.setMsg(“Teste de Envio de Email no formato HTML, caso tenha recebido este email entrar em contato no tel (xx) xxxx-xxxx”); //conteudo do e-mail
    email.setAuthentication("[email removido]",“xxxxxxxxxxx”);
    email.setSmtpPort(465);
    email.setSSL(true);
    email.setTLS(true);
    // envia email
    email.send();
    JOptionPane.showMessageDialog(null, “email enviado com sucesso!”);
    }
    }
RoinujNosde
  1. Não sei responder.

Nesse try, você está “chamando” o construtor de CommonsMail; e esse construtor chama os métodos “enviaEmailSimples” e “enviaEmailFormatoHtml”, o que já dá dois emails enviados. E, ainda no try, você chama o método “enviaEmailSimples” outra vez, ou seja, mais 1 email enviado.

P

Obrigado!

Quanto a questão de quanto cobrar fiz o seguinte, dividi o valor total que cobrei pela quantidade de horas gasta para finalizar o programa e obtive o valor/hora. Estou determinando o tempo que levarei pra desenvolver este módulo para chegar a um valor final (já determinei que o minimo que vou cobrar são 20 horas), também levei em consideração os outros módulos do programa para não cobrar demais.

Thallysson

Olá, eu tentei assim:
`

package pacote;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JDialog;
import javax.swing.JTextField;

import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.SimpleEmail;

import javax.swing.JButton;

public class Main extends JDialog implements ActionListener{
 JTextField field = new JTextField();
 JButton bt = new JButton("Enviar");
public Main() {
	setLayout(new BorderLayout());
	add(field,BorderLayout.NORTH);
	add(bt,BorderLayout.CENTER);
	bt.addActionListener(this);
	setSize(new Dimension(500,100));
	setTitle("Envia email");
	setVisible(true);
	setLocationRelativeTo(null);
}
public static void main(String[]args){
	new Main();
}
public void actionPerformed(ActionEvent evento) {
	if(evento.getSource()==bt){
		SimpleEmail mail = new SimpleEmail();
		try {
			mail.setFrom("[email removido]");
			mail.setSubject("E-mail exemplo");
			mail.setMsg("E-mail de exemplo");
			mail.setSSLOnConnect(true);
			mail.setAuthentication("[email removido]", "xxxx");
			mail.setHostName("smtp.gmail.com");
			mail.setSmtpPort(465);
			mail.addTo("[email removido]");
			mail.send();
		} catch (EmailException e) {
			e.printStackTrace();
		}
	}
}
}

`
Porém foi retornado issso:

`

org.apache.commons.mail.EmailException: Sending the email to the following server failed :     smtp.gmail.com:465
at org.apache.commons.mail.Email.sendMimeMessage(Email.java:1421)
at org.apache.commons.mail.Email.send(Email.java:1448)
at pacote.Main.actionPerformed(Main.java:44)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: 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
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1961)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:654)
at javax.mail.Service.connect(Service.java:317)
at javax.mail.Service.connect(Service.java:176)
at javax.mail.Service.connect(Service.java:125)
at javax.mail.Transport.send0(Transport.java:194)
at javax.mail.Transport.send(Transport.java:124)
at org.apache.commons.mail.Email.sendMimeMessage(Email.java:1411)
... 38 more
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 sun.security.ssl.Alerts.getSSLException(Unknown Source)
at sun.security.ssl.SSLSocketImpl.fatal(Unknown Source)
at sun.security.ssl.Handshaker.fatalSE(Unknown Source)
at sun.security.ssl.Handshaker.fatalSE(Unknown Source)
at sun.security.ssl.ClientHandshaker.serverCertificate(Unknown Source)
at sun.security.ssl.ClientHandshaker.processMessage(Unknown Source)
at sun.security.ssl.Handshaker.processLoop(Unknown Source)
at sun.security.ssl.Handshaker.process_record(Unknown Source)
at sun.security.ssl.SSLSocketImpl.readRecord(Unknown Source)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source)
at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)
at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)
at com.sun.mail.util.SocketFetcher.configureSSLSocket(SocketFetcher.java:549)
at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:354)
at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:211)
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1927)
... 45 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(Unknown Source)
at sun.security.validator.PKIXValidator.engineValidate(Unknown Source)
at sun.security.validator.Validator.validate(Unknown Source)
at sun.security.ssl.X509TrustManagerImpl.validate(Unknown Source)
at sun.security.ssl.X509TrustManagerImpl.checkTrusted(Unknown Source)
at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(Unknown Source)
... 57 more
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.security.provider.certpath.SunCertPathBuilder.build(Unknown Source)
at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(Unknown Source)
at java.security.cert.CertPathBuilder.build(Unknown Source)
... 63 more

`

cviniciusm

Olá,

Outro dia fiz algo semelhante.

Existem aplicativos que simulam um servidor SMTP, assim você pode testar seu código.

No meu caso, criei uma VM com SO Ubuntu e servidor SMTP Postfix, assim testei meu código enviando e-mail para uma caixa postal nesse. Dentro da VM, usei o cliente mutt para ler o conteúdo da caixa postal.

Antes de testar seu código, o teste básico: telnet nomedoservidorsmtp 25 ou telnet ipdoservidorsmtp 25; teste também a porta 587.
Se tiver comunicação então a infraestrutura básica está OK.

Assim você terá mais controle sobre o teste do seu código.

E uma vantagem, quando precisar novamente, você já terá seu próprio servidor configurado e pronto para teste.

cviniciusm

Olá,

Veja: https://www.hmailserver.com

E como outro colega disse, é um questionamento muito comum, assim também concordo que o fórum seja pesquisado primeiro antes de colocar sua dúvida.

Thallysson

Olá, eu não sei muito pouco sobre servidores e trabalhar com esse tipo de coisa no java, mais eu já tentei a porta 587 e não funcionou

Thallysson

Me esqueci de um detalhe, eu tenho instalado na minha máquina o wamp server, isso muda alguma coisa?

RoinujNosde

Não vi erro em seu código. Isso pode ser uma ferramenta de segurança do gmail contra apps não “confiáveis”. Eu sugiro que tente com outro “sistema” de emails (Outlook, Yahoo, etc). Se funcionar, é a ferramenta da qual falei.

Thallysson

se for para o outlook ou yahoo o smtp fica assim smtp.outlook.com, smtp.yahoo.com?

Thallysson

eu tentei assim:
`

SimpleEmail mail = new SimpleEmail();
		try {
			mail.setFrom("[email removido]");
			mail.setSubject("E-mail exemplo");
			mail.setMsg("E-mail de exemplo");
			mail.setSSLOnConnect(true);
			mail.setAuthentication("[email removido]", "xxxx");
			mail.setHostName("smtp.outlook.com");
			mail.setSmtpPort(587);
			mail.addTo("[email removido]");
			mail.send();
		} catch (EmailException e) {
			e.printStackTrace();
		}

`
e não funcionou

RoinujNosde


http://www.serversmtp.com/en/smtp-hotmail

Thallysson

Eu devo enviar para o meu email do yahoo ou enviar dele para outro?

RoinujNosde

enviar dele para outro

Thallysson

Eu tentei assim:
`

SimpleEmail mail = new SimpleEmail();
		try {
			mail.setFrom("[email removido]");
			mail.setSubject("E-mail exemplo");
			mail.setMsg("E-mail de exemplo");
			mail.setSSLOnConnect(true);
			mail.setAuthentication("[email removido]", "xxxx");
			mail.setHostName("smtp.mail.yahoo.com");
			mail.setSmtpPort(465);
			mail.addTo("[email removido]");
			mail.send();
		} catch (EmailException e) {
			e.printStackTrace();
		}
`

e novamente não funcionou.

foi retornado isso:

org.apache.commons.mail.EmailException: Sending the email to the following server failed : <a href="http://smtp.mail.yahoo.com:465">smtp.mail.yahoo.com:465</a>

at org.apache.commons.mail.Email.sendMimeMessage(Email.java:1421)

at org.apache.commons.mail.Email.send(Email.java:1448)

at pacote.Main.actionPerformed(Main.java:44)

at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)

at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)

at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)

at javax.swing.DefaultButtonModel.setPressed(Unknown Source)

at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)

at java.awt.Component.processMouseEvent(Unknown Source)

at javax.swing.JComponent.processMouseEvent(Unknown Source)

at java.awt.Component.processEvent(Unknown Source)

at java.awt.Container.processEvent(Unknown Source)

at java.awt.Component.dispatchEventImpl(Unknown Source)

at java.awt.Container.dispatchEventImpl(Unknown Source)

at java.awt.Component.dispatchEvent(Unknown Source)

at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)

at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)

at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)

at java.awt.Container.dispatchEventImpl(Unknown Source)

at java.awt.Window.dispatchEventImpl(Unknown Source)

at java.awt.Component.dispatchEvent(Unknown Source)

at java.awt.EventQueue.dispatchEventImpl(Unknown Source)

at java.awt.EventQueue.access$500(Unknown Source)

at java.awt.EventQueue$3.run(Unknown Source)

at java.awt.EventQueue$3.run(Unknown Source)

at java.security.AccessController.doPrivileged(Native Method)

at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)

at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)

at java.awt.EventQueue$4.run(Unknown Source)

at java.awt.EventQueue$4.run(Unknown Source)

at java.security.AccessController.doPrivileged(Native Method)

at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)

at java.awt.EventQueue.dispatchEvent(Unknown Source)

at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)

at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)

at java.awt.EventDispatchThread.pumpEvents(Unknown Source)

at java.awt.EventDispatchThread.pumpEvents(Unknown Source)

at java.awt.EventDispatchThread.run(Unknown Source)

Caused by: javax.mail.MessagingException: Could not connect to SMTP host: <a href="http://smtp.mail.yahoo.com">smtp.mail.yahoo.com</a>, 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

at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1961)

at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:654)

at javax.mail.Service.connect(Service.java:317)

at javax.mail.Service.connect(Service.java:176)

at javax.mail.Service.connect(Service.java:125)

at javax.mail.Transport.send0(Transport.java:194)

at javax.mail.Transport.send(Transport.java:124)

at org.apache.commons.mail.Email.sendMimeMessage(Email.java:1411)

… 38 more

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 sun.security.ssl.Alerts.getSSLException(Unknown Source)

at sun.security.ssl.SSLSocketImpl.fatal(Unknown Source)

at sun.security.ssl.Handshaker.fatalSE(Unknown Source)

at sun.security.ssl.Handshaker.fatalSE(Unknown Source)

at sun.security.ssl.ClientHandshaker.serverCertificate(Unknown Source)

at sun.security.ssl.ClientHandshaker.processMessage(Unknown Source)

at sun.security.ssl.Handshaker.processLoop(Unknown Source)

at sun.security.ssl.Handshaker.process_record(Unknown Source)

at sun.security.ssl.SSLSocketImpl.readRecord(Unknown Source)

at sun.security.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source)

at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)

at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)

at com.sun.mail.util.SocketFetcher.configureSSLSocket(SocketFetcher.java:549)

at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:354)

at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:211)

at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1927)

… 45 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(Unknown Source)

at sun.security.validator.PKIXValidator.engineValidate(Unknown Source)

at sun.security.validator.Validator.validate(Unknown Source)

at sun.security.ssl.X509TrustManagerImpl.validate(Unknown Source)

at sun.security.ssl.X509TrustManagerImpl.checkTrusted(Unknown Source)

at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(Unknown Source)

… 57 more

Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

at sun.security.provider.certpath.SunCertPathBuilder.build(Unknown Source)

at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(Unknown Source)

at java.security.cert.CertPathBuilder.build(Unknown Source)

… 63 more
RoinujNosde

Testei aqui e funcionou:

import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.SimpleEmail;

public class TestProgram {

    public static void main(String[] args) {
        SimpleEmail mail = new SimpleEmail();
        try {
            System.out.println("Enviando...");
            mail.setFrom("[email removido]");
            mail.setSubject("Sample email");
            mail.setMsg("Sample msg");
            mail.setSSLOnConnect(true);
            mail.setAuthentication("[email removido]", "senhaaqui");
            mail.setHostName("smtp.mail.yahoo.com");
            mail.setSmtpPort(465);
            mail.addTo("[email removido]");
            mail.send();
            System.out.println("Email enviado.");
        } catch (EmailException ex) {
            ex.printStackTrace();
            System.out.println("Email não enviado.");
        }
    }
}

Verifique se digitou os dados de acesso corretamente…

Thallysson

Eu já verifiquei, meus dados estão corretos agora eu fiz assim como tu fez e não funcionou:
`

package pacote;

import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.SimpleEmail;

public class Main {
public static void main(String[] args) {
SimpleEmail mail = new SimpleEmail();
try {
    System.out.println("Enviando...");
    mail.setFrom("[email removido]");
    mail.setSubject("Sample email");
    mail.setMsg("Sample msg");
    mail.setSSLOnConnect(true);
    mail.setAuthentication("[email removido]", "xxxxxxx");
    mail.setHostName("smtp.mail.yahoo.com");
    mail.setSmtpPort(465);
    mail.addTo("[email removido]");
    mail.send();
    System.out.println("Email enviado.");
} catch (EmailException ex) {
    ex.printStackTrace();
    System.out.println("Email não enviado.");
}
}
}

Enviando...
Email não enviado.org.apache.commons.mail.EmailException: Sending the email to the following     server failed : smtp.mail.yahoo.com:465
at org.apache.commons.mail.Email.sendMimeMessage(Email.java:1421)
at org.apache.commons.mail.Email.send(Email.java:1448)
at pacote.Main.main(Main.java:19)
 Caused by: javax.mail.MessagingException: Could not connect to SMTP host: smtp.mail.yahoo.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
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1961)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:654)
at javax.mail.Service.connect(Service.java:317)
at javax.mail.Service.connect(Service.java:176)
at javax.mail.Service.connect(Service.java:125)
at javax.mail.Transport.send0(Transport.java:194)
at javax.mail.Transport.send(Transport.java:124)
at org.apache.commons.mail.Email.sendMimeMessage(Email.java:1411)
... 2 more
  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 sun.security.ssl.Alerts.getSSLException(Unknown Source)
at sun.security.ssl.SSLSocketImpl.fatal(Unknown Source)
at sun.security.ssl.Handshaker.fatalSE(Unknown Source)
at sun.security.ssl.Handshaker.fatalSE(Unknown Source)
at sun.security.ssl.ClientHandshaker.serverCertificate(Unknown Source)
at sun.security.ssl.ClientHandshaker.processMessage(Unknown Source)
at sun.security.ssl.Handshaker.processLoop(Unknown Source)
at sun.security.ssl.Handshaker.process_record(Unknown Source)
at sun.security.ssl.SSLSocketImpl.readRecord(Unknown Source)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source)
at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)
at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)
at com.sun.mail.util.SocketFetcher.configureSSLSocket(SocketFetcher.java:549)
at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:354)
at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:211)
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1927)
... 9 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(Unknown Source)
at sun.security.validator.PKIXValidator.engineValidate(Unknown Source)
at sun.security.validator.Validator.validate(Unknown Source)
at sun.security.ssl.X509TrustManagerImpl.validate(Unknown Source)
at sun.security.ssl.X509TrustManagerImpl.checkTrusted(Unknown Source)
at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(Unknown Source)
... 21 more
   Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid   certification path to requested target
at sun.security.provider.certpath.SunCertPathBuilder.build(Unknown Source)
at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(Unknown Source)
at java.security.cert.CertPathBuilder.build(Unknown Source)
... 27 more

`

RoinujNosde

Desculpe a demora para responder…
Siga estes passos:
Opções da Internet -> Conteúdo -> Limpar estado de SSL.

Thallysson

`

Enviando...
org.apache.commons.mail.EmailException: Sending the email to the following server failed :     smtp.mail.yahoo.com:465
at org.apache.commons.mail.Email.sendMimeMessage(Email.java:1421)
at org.apache.commons.mail.Email.send(Email.java:1448)
at pacote.Main.main(Main.java:19)
 Caused by: javax.mail.AuthenticationFailedException: 
at com.sun.mail.smtp.SMTPTransport$Authenticator.authenticate(SMTPTransport.java:826)
at com.sun.mail.smtp.SMTPTransport.authenticate(SMTPTransport.java:761)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:685)
at javax.mail.Service.connect(Service.java:317)
at javax.mail.Service.connect(Service.java:176)
at javax.mail.Service.connect(Service.java:125)
at javax.mail.Transport.send0(Transport.java:194)
at javax.mail.Transport.send(Transport.java:124)
at org.apache.commons.mail.Email.sendMimeMessage(Email.java:1411)
... 2 more
Email não enviado.

`

RoinujNosde

Difícil…
Tenta desativar o Firewall/Antivirus.

Thallysson

Eu desativei meu antivirus e então foi retornado isso no console:
`

Enviando...
Email enviado.

`
Porém eu abri a minha caixa de entrada do outlook e não encontrei nada.

RoinujNosde

Tenta ver na pasta Lixo; ou envie para outro email.

OFF-Topic: Qual IDE está usando?

Thallysson

Está no lixo, muito obrigado pela ajuda, então funcionou porém eu tenho algumas duvidas ainda:
1) A senha do e-mail que eu usarei para enviar os emails vai ficar no código fonte? Assim qualquer pessoa que ver o código saberá a senha do meu e-mail?

2)Por que a mensagem foi classificada como lixo pelo outlook e não funcionou com o gmail? Se um usuário que utilizar meu programa tiver um e-mail de algum desses provedores ele terá esses problemas?

RoinujNosde
  1. Não precisa ficar no código. Você pode criar uma GUI que pede ao usuário para digitar a senha (ou pode fazer isso no modo de texto mesmo).

  2. Por que foi classificada como lixo? Não sei como funciona o anti-spam.
    […] não funcionou com o gmail? a) As informações do server SMTP podem estar incorretas; b) O Gmail tem um “mecanismo” de segurança (leia mais: https://support.google.com/accounts/answer/6010255?hl=en)
    […] ele terá esses problemas? Difícil de responder.

Thallysson

Primeiramente, na primeira pergunta eu falei da senha do e-mail que eu vou usar para enviar, eu pretendo fazer uma JDialog onde o usuário digita o e-mail dele e clica em um JButton e então ele recebe a sua senha por e-mail, sobre o gmail, funciona corretamente na hora de receber mas meu objetivo é utilizar um gmail para enviar, e isso eu não estou conseguindo fazer, eu olhei este link, e fiz assim:
`

package pacote;

import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.SimpleEmail;

public class Main {
public static void main(String[] args) {
	SimpleEmail mail = new SimpleEmail();
	try {
	    System.out.println("Enviando...");
	    mail.setFrom("[email removido]");
	    mail.setSubject("Sample email");
	    mail.setMsg("Sample msg");
	    mail.setSSLOnConnect(true);
	    mail.setAuthentication("[email removido]", "xxxxxx");
	    mail.setHostName("smtp.gmail.com");
	    mail.setSmtpPort(465);
	    mail.addTo("[email removido]");
	    mail.send();
	    System.out.println("Email enviado.");
	} catch (EmailException ex) {
	    ex.printStackTrace();
	    System.out.println("Email não enviado.");
	}
	}
}

`
porém foi retornado isso no console:

`

Enviando...
Email não enviado.
org.apache.commons.mail.EmailException: Sending the email to the following server failed :    smtp.gmail.com:465
at org.apache.commons.mail.Email.sendMimeMessage(Email.java:1421)
at org.apache.commons.mail.Email.send(Email.java:1448)
at pacote.Main.main(Main.java:19)
Caused by: javax.mail.AuthenticationFailedException: 534-5.7.14 <https://accounts.google.com/signin/continue?sarp=1&scc=1&plt=AKgnsbuF
534-5.7.14 fi_2TaC0W7Adgyo0B9E0C-XvhGg0JRghCHD53dB8BLN5oDndfZgoFklKxzbgKeZVltDDSU
534-5.7.14 fz7R2_a32pJAivCbBnERvn_-19YzJurkc2VnOl2ZGPbIeQTIGIbxR81DO6BvKRII8I_RtW
534-5.7.14 kiQ7r0MxogJetPLO6Uoio9NJPFz8SypBrANKx3eZZAnnFbROBaBhcZgUXOj5tGq9Ls4vMz
534-5.7.14 5o227YGxdTjN3qAYme6oIbgLmjVjE> Please log in via your web browser and
534-5.7.14 then try again.
534-5.7.14  Learn more at
534 5.7.14  https://support.google.com/mail/answer/78754 b13sm6114684qkg.44 - gsmtp

at com.sun.mail.smtp.SMTPTransport$Authenticator.authenticate(SMTPTransport.java:826)
at com.sun.mail.smtp.SMTPTransport.authenticate(SMTPTransport.java:761)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:685)
at javax.mail.Service.connect(Service.java:317)
at javax.mail.Service.connect(Service.java:176)
at javax.mail.Service.connect(Service.java:125)
at javax.mail.Transport.send0(Transport.java:194)
at javax.mail.Transport.send(Transport.java:124)
at org.apache.commons.mail.Email.sendMimeMessage(Email.java:1411)
... 2 more

`

RoinujNosde

Siga esses passos:
https://support.google.com/accounts/answer/6010255?hl=pt-BR

E

Olá Thalisson eu etava com o mesmo problema com o Gmail e resolvi fazendo deste jeito, perdi muito tempo pesquisando na internet até achar esta solução que usa um tal de Authenticador só assim funcionou com o Gmail.

private void send_email(Usuario usuario) throws Exception {
    
    Properties props = new Properties();
    props.put("mail.smtp.host", "smtp.gmail.com");
    props.put("mail.from", "[email removido]");
    props.put("mail.smtp.starttls.enable", "true");
    props.put("mail.smtp.ssl.enable", "false");
    props.put("mail.smtp.auth", "true");
    props.put("mail.smtp.port", "587");

    Authenticator authenticator = new Authenticator();
    props.setProperty("mail.smtp.submitter", authenticator.getPasswordAuthentication().getUserName());

    Session session = Session.getInstance(props, authenticator);
    MimeMessage msg = new MimeMessage(session);
    msg.setFrom();
    msg.setRecipients(Message.RecipientType.TO, "[email removido]");  
    // also tried @gmail.com
    msg.setSubject("Recuperação De Senha - Suite ESC");
    //msg.setSentDate(new Date());
    msg.setText("Usuário: " + usuario.getLoginUsuario() + "\n" + 
                "Este e-mail foi enviado por: http://www.esctecnologia.com.br" + "\n" + 
                "Você recebeu esta e-mail, pois você esqueceu sua senha no ESC Tecnologia." + "\n\n" + 
                "------------------------------------------------" + "\n" + 
                "IMPORTANTE!" + "\n" + 
                "------------------------------------------------" + "\n" + 
                "Se você não solicitou este lembrete de senha, por favor IGNORE e EXCLUA este e-mail imediatamente." + "\n\n" +
                "Dados Da Sua Conta:" + "\n" + 
                "Código Do Usuário: " + usuario.getCodigoUsuario() + "\n" + 
                "Nome Do Usuário: " + usuario.getLoginUsuario() + "\n" + 
                "Senha Do Usuário: " + usuario.getSenhaUsuario() + "\n" + 
                "Administrador: " + usuario.getAdministradorUsuario() + "\n" 
                );

    Transport transport;
    transport = session.getTransport("smtp");
    transport.connect();
    msg.saveChanges(); 
    transport.sendMessage(msg, msg.getAllRecipients());
    transport.close();
}

private class Authenticator extends javax.mail.Authenticator {
   
    private PasswordAuthentication passwordAuthentication;
    public Authenticator() {
        
        String username = "[email removido]";
        String password = "teste";
        passwordAuthentication = new PasswordAuthentication(username, password);
    }
    
    protected PasswordAuthentication getPasswordAuthentication() {
        return passwordAuthentication;
    }
}
E

tem que criar uma senha especifica pra isso se não, não funciona, comigo foi assim, não é a senha do email é uma senha criada lá em configurações na sua conta.

Thallysson

Como assim? Não é a senha que eu uso para fazer login?

E

Não é essa não Thallyson eu vou tentar lembrar o caminho aonde cadastra essa senha mais é nas configurações do Email é uma senha que você cria especifica pra isso só assim funcionou comigo com a senha normal do Login tambem não consegui.

Thallysson

Eu não tenho a mínima ideia de que senha é essa, e eu não registrei nenhuma, você sabe pelo menos o nome dessa senha pra mim pesquisar?

E

Encontrei amigo a senha se chama Senha de APP segue o link acesse já logado com sua conta no Gmail:

https://security.google.com/settings/security/apppasswords

é só criar e utilizar ela.

Thallysson

Porque essa mensagem?

E

xi não sei não mais é essa tela mesmo Senhas de App tenta procurar porque não aparece ou como habilitar.

Thallysson

Sua conta é normal ou gmail for work?

E

é normal mesmo.

Thallysson

O meu também, não sei o motivo desse erro, vou procurar pra ver se consigo e depois volto aqui.

E

Boa sorte.

Thallysson

Essa senha só funciona com contas de dupla verificação, então fiz isso na minha conta e consegui a senha, e tudo funcionou perfeitamente com todos os provedores de e-mail, muito obrigado mesmo!:slight_smile:

E

aí sim jovem, estamos aí.

Criado 24 de abril de 2016
Ultima resposta 11 de mai. de 2016
Respostas 46
Participantes 7