Como eu posso enviar emails no java?

enviar dele para outro

Eu tentei assim:
`

SimpleEmail mail = new SimpleEmail();
		try {
			mail.setFrom("thallyssonklein@yahoo.com");
			mail.setSubject("E-mail exemplo");
			mail.setMsg("E-mail de exemplo");
			mail.setSSLOnConnect(true);
			mail.setAuthentication("thallyssonklein@yahoo.com", "xxxx");
			mail.setHostName("smtp.mail.yahoo.com");
			mail.setSmtpPort(465);
			mail.addTo("thallyssonklein@gmail.com");
			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 : 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.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.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)
… 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

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("edsonpassosjr@yahoo.com");
            mail.setSubject("Sample email");
            mail.setMsg("Sample msg");
            mail.setSSLOnConnect(true);
            mail.setAuthentication("edsonpassosjr@yahoo.com", "senhaaqui");
            mail.setHostName("smtp.mail.yahoo.com");
            mail.setSmtpPort(465);
            mail.addTo("edsonpassosjr@outlook.com");
            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…

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("thallyssonklein@yahoo.com");
    mail.setSubject("Sample email");
    mail.setMsg("Sample msg");
    mail.setSSLOnConnect(true);
    mail.setAuthentication("thallyssonklein@yahoo.com", "xxxxxxx");
    mail.setHostName("smtp.mail.yahoo.com");
    mail.setSmtpPort(465);
    mail.addTo("thallyssonklein@outlook.com");
    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

`

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

`

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.

`

Difícil…
Tenta desativar o Firewall/Antivirus.

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.

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

OFF-Topic: Qual IDE está usando?

1 curtida

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?

  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.

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("thallyssonklein@gmail.com");
	    mail.setSubject("Sample email");
	    mail.setMsg("Sample msg");
	    mail.setSSLOnConnect(true);
	    mail.setAuthentication("thallyssonklein@gmail.com", "xxxxxx");
	    mail.setHostName("smtp.gmail.com");
	    mail.setSmtpPort(465);
	    mail.addTo("thallyssonklein@yahoo.com");
	    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

`

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

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", "edersonsergiocoelho@gmail.com");
    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, "edersonsergiocoelho@gmail.com");  
    // 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 = "edersonsergiocoelho@gmail.com";
        String password = "teste";
        passwordAuthentication = new PasswordAuthentication(username, password);
    }
    
    protected PasswordAuthentication getPasswordAuthentication() {
        return passwordAuthentication;
    }
}

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.

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

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.

1 curtida

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?

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.

Porque essa mensagem?