Envio de email de forma fácil com Java!

Alguns dias atrás precisei enviar um e-mail de um programa Java, estava crente que, por ser um serviço comum, encontraria alguma solução no J2SE, pra minha decepção não  encontrei! Então fui até ao Google e pra minha surpresa não encontrei nenhuma solução simples para fazer isso, então resolvi escrever este post pra mostrar a solução que utilizei e que espero que ajude a resolver este problema de outras pessoas de forma mais rápido!

Inicialmente será necessário baixar algumas bibliotecas necessárias:

commons-email-1.2.jar

http://commons.apache.org/downloads/download_email.cgi

activation.jar

http://java.sun.com/javase/technologies/desktop/javabeans/jaf/downloads/index.html

mail 1.4.3.jar

http://java.sun.com/products/javamail/downloads/index.html

1º Passo:

Adicionar as bibliotecas necessárias ao projeto

2º Passo:

Criar uma nova classe chamada Email.java responsável pelo envio de emails

3º Passo:

Adicionar o método abaixo na nova classe:


public void sendEmail() throws EmailException {
   
   SimpleEmail email = new SimpleEmail();
   //Utilize o hostname do seu provedor de email
   System.out.println("alterando hostname...");
   email.setHostName("smtp.gmail.com");
   //Quando a porta utilizada não é a padrão (gmail = 465)
   email.setSmtpPort(465);
   //Adicione os destinatários
   email.addTo("xxx@xxx.com", "Jose");
   //Configure o seu email do qual enviará
   email.setFrom("seuemail@seuprovedor.com", "Seu nome");
   //Adicione um assunto
   email.setSubject("Test message");
   //Adicione a mensagem do email
   email.setMsg("This is a simple test of commons-email");
   //Para autenticar no servidor é necessário chamar os dois métodos abaixo
   System.out.println("autenticando...");
   email.setSSL(true);
   email.setAuthentication("username", "senha");
   System.out.println("enviando...");
   email.send();
   System.out.println("Email enviado!");
}

Pronto! Modifique as configurações do método para enviar a mensagem desejada a quem quizer!

Simples assim!
Qualquer dúvida estamos aí..
Abraços, José Alexandre!

48 comments for “Envio de email de forma fácil com Java!

  1. Mateus Drigo
    8 de Fevereiro de 2010 at 3:12

    Muito bom o artigo! Vou testar aqui 🙂

  2. Bruno
    17 de Agosto de 2010 at 17:58

    Desculpe a pergunta mas onde eu coloco as bibliotecas baixadas para o projeto?

    • José Alexandre Macedo
      17 de Agosto de 2010 at 20:20

      Olá Bruno!
      As bibliotecas devem ser incluídas no seu projeto de acordo com a IDE que você estiver utilizando! Se for no netbeans é de um jeito e se for no eclipse é de outro. Caso nunca tenha feito isso de uma procurada no google que tem bastante coisa!

      Qualquer coisa estou a disposição!

      Abraços!

      • Guilherme
        28 de Fevereiro de 2015 at 16:20

        José Alexandre Macedo, voce pode me tirar algumas duvidas?

  3. Rodrigo Renno
    3 de Novembro de 2011 at 15:53

    Olá José Alexandre!
    Não estou conseguindo mandar o email, acho que o servidor está barrando por causa do proxy, tem algum jeito de configurar? Procurei na documentação da biblioteca não achei nenhum método…
    Valeu!

  4. goularta
    22 de Outubro de 2012 at 10:56

    Obrigado pela sua contribuição,
    Já tinha utilizado outro metódo, mas realmente desta forma é
    bem mais rápido de se enviar um e-mail, utilizando o ‘SimpleEmail’.

    Valeu.

  5. Paulo Henrique
    13 de Novembro de 2012 at 19:22

    Bom sou iniciante nessa area de programar .
    onde encontro a classe SimpleEmail que esta estanciada no começo do codigo ou como posso fazer ela?
    Agradeço desde ja;

    • 19 de Novembro de 2012 at 19:15

      Olá Paulo,
      Essa classe faz parte das bibliotecas usadas nesse tutorial. Essas bibliotecas podem ser encontradas nos links que estão junto aos seus nomes no início do tutorial… qualquer outra dúvida estou a disposição! Att. José Alexandre.

  6. bruno
    28 de Novembro de 2012 at 15:14

    Muito bom!, tbm tava procurando um codigo assim: simples e facl. diferente daquele montoeiro de codigos.
    blz valew.

  7. PEDRO
    7 de Fevereiro de 2013 at 19:44

    Ola td, bom..
    Implementei aqui porem não funcionou acho que é por causo do “username” e “senha”….

  8. 10 de Fevereiro de 2013 at 18:36

    Peguei da documentação:

    public void setAuthentication(String userName, String password)

    Sets the userName and password if authentication is needed. If this method is not used, no authentication will be performed.
    This method will create a new instance of DefaultAuthenticator using the supplied parameters.

    Parameters:
    userName – User name for the SMTP server
    password – password for the SMTP server

  9. Davi S.S
    21 de Março de 2013 at 13:45

    Os link dos downloads mudaram…
    agora são outro… José Alexandre Macedo atualiza aew.. flw

    • 21 de Março de 2013 at 18:24

      Obrigado Davi, vou atualizar!

      • Dyego Crisostomo
        23 de Setembro de 2015 at 15:27

        Não estou conseguindo baixar as bibliotecas. baixo a pasta do projeto mas não encontro nenhum jar dentro das pastas

  10. Rafael Moreira
    4 de Abril de 2013 at 17:56

    Então brother, seu código funcinou perfeito para mim, mas apenas no ambiente da minha IDE. Ao publicar a aplicação no meu server remoto, não roda, diz que não consegue conectar no servidor e porta especificados. O estranho é que roda legal na minha máquina, só não roda no server. Tem algo que precise ser configurado a mais?

  11. Eduardo o Terrível
    9 de Abril de 2013 at 17:28

    Da pra colocar anexo pelo SimpleEmail?

  12. Rodrigo
    16 de Abril de 2013 at 11:47

    Bom dia Companheiro, primeiramente parabéns pelo post, mas estou com o seguinte erro:
    org.apache.commons.mail.EmailException: Sending the email to the following server failed : smtp.gmail.com:587
    at org.apache.commons.mail.Email.sendMimeMessage(Email.java:1242)
    at org.apache.commons.mail.Email.send(Email.java:1267)
    at comercio.email.SimplesEmail.sendEmail(SimplesEmail.java:44)
    at comercio.email.SimplesEmail.main(SimplesEmail.java:51)
    Caused by: javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmail.com, port: 465;
    nested exception is:
    java.net.SocketException: Software caused connection abort: recv failed
    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:1232)
    … 3 more
    Caused by: java.net.SocketException: Software caused connection abort: recv failed
    at java.net.SocketInputStream.socketRead0(Native Method)
    at java.net.SocketInputStream.read(SocketInputStream.java:150)
    at java.net.SocketInputStream.read(SocketInputStream.java:121)
    at sun.security.ssl.InputRecord.readFully(InputRecord.java:442)
    at sun.security.ssl.InputRecord.read(InputRecord.java:480)
    at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:927)
    at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1312)
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1339)
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1323)
    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)
    … 10 more

  13. Leandro
    27 de Maio de 2013 at 16:10
  14. Leandro
    28 de Maio de 2013 at 12:08

    Obrigado Marcelo
    ocorre o seguinte erro

    500
    javax.servlet.ServletException: org/apache/commons/mail/EmailException

    tem alguma ideia do que seja?

  15. Leandro
    28 de Maio de 2013 at 15:37

    fiz um managedbean ao clicar no botão enviar e-mail ocorre:

    HTTP Status 500 –

    type Exception report

    message

    descriptionThe server encountered an internal error () that prevented it from fulfilling this request.

    exception

    javax.servlet.ServletException: org/apache/commons/mail/EmailException
    root cause

    java.lang.NoClassDefFoundError: org/apache/commons/mail/EmailException
    note The full stack traces of the exception and its root causes are available in the GlassFish Server Open Source Edition 3.1.2.2 logs.

    GlassFish Server Open Source Edition 3.1.2.2

  16. Pedro Soares
    29 de Maio de 2013 at 10:38

    Olá, Bom dia…Estou fazendo uma aplicação para controle de estoque de um determinado produto com banco de dados. Vi o seu artigo e pensei em colocar no meu sistema, consegui fazer enviar o e-mail, mas tenho um problema, por exemplo eu busco no meu banco de dados alguns produtos que estão acabando e coloca em uma lista, e esta lista eu quero que seja escrita no e-mail para enviar para o administrador, só que quando ele escreve usando o email.setMsg(“”); consigo escrever somente uma linha, ou seja, ele sobrescreve o que tinha antes, tens alguma idéia de alguma função que eu possa escrever sem apagar o resgistro anterior? Obrigado.

  17. Jorge David Jr
    1 de Agosto de 2013 at 17:34

    Olá, boa tarde!
    Preciso criar uma aplicação parecida com e-mail marketing e para isso necessito enviar um email para vários usuários.
    Como posso fazer isso?

  18. Carlos
    11 de Agosto de 2013 at 3:33

    Olá, sou novo em java, como eu crio os métodos de acesso nas linhas 6, 8, 10,12,14, 16, 19,20 e 22? grato, Att

  19. elton
    8 de Novembro de 2013 at 0:17

    muito bom cara….segui o seu post e ocorreu tudo certinho….

  20. Elias de Abreu
    13 de Fevereiro de 2014 at 17:26

    Olá, no meu método esta acontecendo o seguinte erro o que pode estar causando este problema?

    Exception in thread “main” 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:1401)
    at org.apache.commons.mail.Email.send(Email.java:1428)
    at br.com.email.Enviar_Email.enviar(Enviar_Email.java:42)
    at br.com.email.Enviar_Email.main(Enviar_Email.java:19)
    Caused by: javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmail.com, port: 465;
    nested exception is:
    java.net.ConnectException: Connection timed out: connect
    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:1391)
    … 3 more
    Caused by: java.net.ConnectException: Connection timed out: connect
    at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    at java.net.Socket.connect(Socket.java:579)
    at sun.security.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:618)
    at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:319)
    at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:211)
    at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1927)
    … 10 more
    Java Result: 1

  21. 19 de Fevereiro de 2014 at 19:28

    Olá José Alexandre Macedo você teria um exemplo utilizando outro smtp porque este exemplo só funciona com o gmail e eu precisava utilizá-lo com um webmail da hospedagem e não estou conseguindo, pode me ajudar?

  22. 6 de Março de 2014 at 10:28

    Como inserir anexo no email?

  23. Ivan Miranda
    13 de Setembro de 2014 at 10:22

    Eu não estou conseguindo baixar o activation.jar (http://java.sun.com/javase/technologies/desktop/javabeans/jaf/downloads/index.html). Alguém pode me ajudar?

  24. Benvindo Dominguile
    9 de Março de 2015 at 3:32

    ola cara valeu mesmo pelo seu tuturial o que me deixa feliz eh que muita gente seguiu ele e conseguiu enviar email, mas o que me deixa triste eh que ainda nao consegui enviar email e queria a tua ajuda, incluzive ja tentei de outras formas mais nao consegui,
    fiz tudo que esta no teu tuturial e me deu o seguinte erro:

    Exception in thread “main” 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:1410) at org.apache.commons.mail.Email.sendMimeMessage(Email.java:1410)
    at org.apache.commons.mail.Email.send(Email.java:1437)
    at mandaremail1.Email.sendEmail(Email.java:125)
    at mandaremail1.Email.main(Email.java:159)
    Caused by: javax.mail.AuthenticationFailedException
    at javax.mail.Service.connect(Service.java:319)
    at javax.mail.Service.connect(Service.java:169)
    at javax.mail.Service.connect(Service.java:118)
    at javax.mail.Transport.send0(Transport.java:188)
    at javax.mail.Transport.send(Transport.java:118)
    at org.apache.commons.mail.Email.sendMimeMessage(Email.java:1400)
    … 3 more
    Java Result: 1

    veja o codigo:
    package mandaremail1;

    import java.net.Authenticator;
    import java.net.PasswordAuthentication;
    import org.apache.commons.mail.EmailException;
    import org.apache.commons.mail.SimpleEmail;

    public class Email {

    public void sendEmail() throws EmailException {

    SimpleEmail email = new SimpleEmail();
    //Utilize o hostname do seu provedor de email
    System.out.println(“alterando hostname…”);
    email.setHostName(“smtp.gmail.com”);
    //Quando a porta utilizada não é a padrão (gmail = 465)
    email.setSmtpPort(465);
    //Adicione os destinatários
    email.addTo(“group.mind.brilliant.bkd@gmail.com”, “Benvindo”);
    //Configure o seu email do qual enviará
    email.setFrom(“benvindok7@gmail.com”, “Benvindo”);
    //Adicione um assunto
    email.setSubject(“Test message”);
    //Adicione a mensagem do email
    email.setMsg(“This is a simple test of commons-email”);
    //Para autenticar no servidor é necessário chamar os dois métodos abaixo
    System.out.println(“autenticando…”);
    email.setSSL(true);
    email.setAuthentication(“Benvindo Dominguile”, “bkiala20”);
    System.out.println(“enviando…”);
    email.send();
    System.out.println(“Email enviado!”);
    }
    public static void main(String[] args) throws EmailException {
    //System.setProperty(“http.proxyPort”, “portaDoSeuProxy”);
    /* Authenticator.setDefault(new Authenticator() {
    @Override
    protected PasswordAuthentication getPasswordAuthentication() {
    return new PasswordAuthentication(“Benvindo”, “bkiala20”.toCharArray());
    }
    }); */

    Email e = new Email();
    e.sendEmail();

    }

    }
    // por favor ajuda, desde ja agradeço muito

    • 9 de Março de 2015 at 21:36

      Olá,

      o usuário e senha foram preenchidos corretamente?
      email.setAuthentication(“Benvindo Dominguile”, “bkiala20″);

  25. Aline
    8 de Junho de 2015 at 9:34

    Olá, também estou com problemas, será que pode me ajudar?

    Segue o erro:
    alterando hostname…
    autenticando…
    enviando…
    Exception in thread “main” 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 Email.enviaEmail(Email.java:38)
    at TesteAplicacao.main(TesteAplicacao.java:18)
    Caused by: javax.mail.MessagingException: Exception reading response;
    nested exception is:
    java.net.SocketTimeoutException: Read timed out
    at com.sun.mail.smtp.SMTPTransport.readServerResponse(SMTPTransport.java:2210)
    at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1950)
    at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:642)
    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)
    … 3 more
    Caused by: java.net.SocketTimeoutException: Read timed out
    at java.net.SocketInputStream.socketRead0(Native Method)
    at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
    at java.net.SocketInputStream.read(SocketInputStream.java:170)
    at java.net.SocketInputStream.read(SocketInputStream.java:141)
    at com.sun.mail.util.TraceInputStream.read(TraceInputStream.java:110)
    at java.io.BufferedInputStream.fill(BufferedInputStream.java:246)
    at java.io.BufferedInputStream.read(BufferedInputStream.java:265)
    at com.sun.mail.util.LineInputStream.readLine(LineInputStream.java:89)
    at com.sun.mail.smtp.SMTPTransport.readServerResponse(SMTPTransport.java:2188)
    … 11 more
    Java Result: 1
    CONSTRUÍDO COM SUCESSO

    Segue o código:
    public class Email {
    public void enviaEmail() throws EmailException {

    SimpleEmail email = new SimpleEmail();
    //Utilize o hostname do seu provedor de email
    System.out.println(“alterando hostname…”);
    email.setHostName(“smtp.gmail.com”);
    //Quando a porta utilizada não é a padrão (gmail = 465)
    email.setSmtpPort(465);
    //Adicione os destinatários
    email.addTo(“testesalineedu@gmail.com”, “Aline”);
    //Configure o seu email do qual enviará
    email.setFrom(“testeslineedu@gamilcom”, “Aline”);
    //Adicione um assunto
    email.setSubject(“teste de email para projeto”);
    //Adicione a mensagem do email
    email.setMsg(“Teste de mensagem”);
    //Para autenticar no servidor é necessário chamar os dois métodos abaixo
    System.out.println(“autenticando…”);
    email.setTLS(false);
    email.setSSL(false);
    email.setAuthentication(“testesalineedu@gmail.com”, “82748542”);
    System.out.println(“enviando…”);
    email.send();
    System.out.println(“Email enviado!”);
    }
    }

  26. Alvaro de Araujo
    23 de Outubro de 2015 at 4:22

    Muito bom cara, obrigado!!

  27. Lucas
    17 de Janeiro de 2016 at 17:25

    Cara muito bom o post consegui enviar o e-mail! Só tive que configurar minha conta para ativar “Aplicativos menos seguros”, para que assim pudesse receber os e-mails..

  28. Silas
    16 de Março de 2016 at 12:49

    Perfeito!

    Para usar o gmail tive que seguir esses passos aqui: http://notepad2.blogspot.com.br/2012/04/import-gmail-certificate-into-java.html

  29. 19 de Julho de 2016 at 17:56

    Tudo dá certo, porém o setHtmlMsg não roda nem com MultiPartEmail e HtmlMail todos só rodam com setMsg ou setTextmsg, não tenho como saltar linhas e colocar acentuação, o setCharset também não funciona UTF-8 ou ISO – Só funciona com texto plano sem salto de linha e sem formatação.

    • Nelson Cruz
      17 de Dezembro de 2016 at 16:10

      Provavelmente não deve estar mais precisando dessa informação mas pode servir para um outra pessoa que venha aqui busca-la.

      para usar o SetHtmlMsg você precisa usar a classe HtmlEmail, basta mudar o SimpleEmail por HtmlEmail

  30. 18 de Setembro de 2016 at 0:32

    Quando vc disse que procurou no google e não encontrou, eu digo o mesmo. não encovontrei nada que pudesse me ajudar, Não querto instalar apache no meu servidor ne mesmo netbin, que eu preciso e como configurar meu form de envio de email java e testalo direto no servidor internet.

  31. 24 de Novembro de 2016 at 16:40

    olá conseguiram a solução para o erro:
    Sending the email to the following server failed : smtp-mail.outlook.com:587 e
    Sending the email to the following server failed : smtp-mail.outlook.com:465
    para que não tenha a necessidade de alterar a configuração no GMAIL?

    • Nelson Cruz
      17 de Dezembro de 2016 at 16:03

      Você precisa liberar o envio de e-mail de aplicativos “não seguros” no seu provedor, foi assim que o meu funcionou.

  32. Edson Pesotti
    5 de Dezembro de 2016 at 9:18

    Isso não esta funcionando mais, alguém sabe porque ??? tinha em meus sistema uma rotina que enviava emails usando o exemplo acima. primeiro com o servidor smtp.yahoo.com agora não funciona mais tentei com o google smtp.gmail.com e também não deu funcionou, mudou alguma coisa ????

    • Nelson Cruz
      17 de Dezembro de 2016 at 16:04

      Como respondi ao amigo ai de cima, eu tive que liberar o envio de mensagem por aplicativos não seguros no google, e funcionou normalmente.

  33. Felipe
    11 de Janeiro de 2017 at 9:01

    Mano parabéns pelo tutorial. É a primeira vez que pego um tutorial e funciona de primeira. muito bom!

  34. Allan Braga
    5 de Maio de 2017 at 20:13

    Olá, muito bom seu tutorial.
    Fiz da forma como disse e funciona perfeitamente localhost mas quando subo pra o server tenho o seguinte erro:
    550 Access denied Invalid HELO name

    Sabe o que pode ser?

    Obrigado!

Deixar uma resposta