Olá, amigos! Estive desenvolvendo uma aplicação e me deparei com o problema de enviar e-mail utilizando o JavaMail. Há bastante material na internet mas é muito complicado encontrar algum que explique passo a passo, de forma visual e didática, como utilizar o JavaMail em sua aplicação.
Assim, hoje vou apresentar a vocês um exemplo de como enviar e-mail utilizando a API JavaMail. Neste exemplo em especial eu utilizarei o servidor de e-mails do GMail.
Antes de abordar o exemplo com JavaMail, é interessante aprendermos um pouco sobre esta API, sobre a Arquitetura de Sistemas de e-mail e os protocolos envolvidos nessa arquitetura.
O que é JavaMail?
O JavaMail oferece uma API independente de plataforma e independente de protocolo para criar mensagens de correio e aplicações. A API JavaMail está disponível como um pacote opcional para uso com a plataforma Java↳Java42 conteúdosNovidades do Java 26 (para desenvolvedores)Dev (Back & Front) · mar 2026Visual Studio Code para Java: o guia completo (dicas, configuração e extensões)Dev (Back & Front) · out 2025Quarkus: Modernizando a linguagem Java para a era da nuvemDev (Back & Front) · nov 2020Ver tudo em Dev (Back & Front) → SE e está também incluída na plataforma Java EE.
Esta API possui implementações para alguns dos protocolos mais populares para envio e recebimento de e-mails e fornece um forma bem fácil de usá-los.
Embora o JavaMail seja uma das APIs da Sun, ela não é incluída nos downloads do SDK. Dessa forma, você deverá obter os arquivos da API JavaMail, e integrá-los à sua aplicação.
Onde obter os arquivos?
Os arquivos da API podem ser baixados do site da Sun. Neste nosso exemplo eu utilizarei o JavaMail API 1.4.2 Release e o JavaBeans Activation Framework (JAF).
É importante ressaltar que sem o JAF o JavaMail não funcionará.
Quando você baixar os arquivos do site da Sun, eles virão compactados em um .zip. Dentro do .zip há dois arquivos importantes que utilizaremos neste exemplo: mail.jar e activation.jar.
A Sessão
A Sessão possui dois papéis importantes:
- guardar propriedades acessíveis via construtores
- oferecer métodos de fábrica para objetos Store e Transport
Temos dois tipos de objetos Session:
- Session session = Session.getDefaultInstance(props)
- Session session Session.getInstance(props)
Os autenticadores são passados como parâmetro nos métodos getInstance()
public class MyAuthenticator extends Authenticator {<br /> protected PasswordAuthentication getPasswordAuthentication() {<br /> return new PasswordAuthentication("scott", "tiger");<br /> }<br />}<br />(...)<br />Properties props = System.getProperties();<br />Session session = Session.getDefaultInstance(props, new MyAuthenticator());As Mensagens
As mensagens são encapsuladas na classe abstrata Message, que possui:
- Conjunto de cabeçalhos RFC822 (Headers)
- Conteúdo (javax.activation.DataHandler)
Há métodos get/set para conteúdo e cabeçalhos.
O JavaMail traz uma implementação da classe abstrata Message: MimeMessage
Message msg = new MimeMessage(session);
Destinos e origens são definidos em objetos do tipo Address e adicionados nos cabeçalhos To e From
msg.setFrom(new InternetAddress("fulanodestino.org"));<br />msg.setRecipients(Message.RecipientType.TO,<br />InternetAddress.parse(recv, false));<br />msg.setSubject("JavaMail Test Message");<br />msg.setHeader("X-Mailer", "My Simple JavaMail Client");<br />msg.setText("This is the sample message text");Envio de Mensagens
Depois de criada a mensagem, basta passá-la para um meio de transporte para enviá-la. A forma mais simples de fazer é passar para o método (estático) send(), de javax.mail.Transport.
Transport.send(msg);
Pode-se também controlar o tipo de transporte usado (de acordo com o protocolo)
Transport smtp = session.getTransport(“smtp”);
smtp.send(msg);
Transport nntp = session.getTransport(“nntp”);
nntp.send(msg);
Protocolos Envolvidos em uma Arquitetura de Sistemas de E-mail
Neste artigo discutiremos três protocolos para envio e recebimento de e-mails: SMTP, POP3 e IMAP.
Estes protocolos fazem parte da camada de aplicação de uma rede de computadores.
O termo camada de aplicação é um termo utilizado em redes de computadores para designar a sétima camada do modelo OSI (Open Systems Interconnection – Interconexão de Sistemas Abertos). É responsável por prover serviços para aplicações de modo a abstrair a existência de comunicação em rede entre processos de diferentes computadores. Também é a camada número quatro do modelo TCP/IP que engloba também as camadas de apresentação e sessão no modelo OSI.
Protocolo SMTP
SMTP é a sigla para Simple Mail Transfer Protocol (Protocolo de Transferência de Correio Simples) e está definido na RFC 2821.
Ele é usado na comunicação direta entre servidores de correio e para o envio de mensagens a partir do seu software cliente de e-mail. O SMTP é um protocolo de “uma via” – isto é, as mensagens podem ser enviadas ou recebidas pelo servidor de correio, mas não é possível obter as mensagens em qualquer outro servidor de correio com o uso deste protocolo.
Para isso, é necessário um cliente de email com suporte ao protocolo POP3 ou IMAP.
Protocolo POP3
POP3 é a sigla para Post Office Protocol e está definido na RFC 1225. O número “3” significa que é a terceira revisão da norma.
Este protocolo é utilizado no acesso remoto a uma caixa de correio eletrônico e permite que todas as mensagens contidas em uma caixa de correio eletrônico possam ser transferidas sequencialmente para um computador local.
Protocolo IMAP
IMAP é a sigla para Internet Message Access Protocol e está definido na RFC 3501.
Ele é um protocolo de gerenciamento de correio eletrônico superior em recursos ao POP3 – protocolo que a maioria dos provedores oferece aos seus assinantes. A última versão é o IMAP4.
O mais interessante é que as mensagens ficam armazenadas no servidor e o internauta pode ter acesso a suas pastas e mensagens em qualquer computador, tanto por webmail como por cliente de correio eletrônico (como o Outlook Express ou o Evolution). Outra vantagem deste protocolo é o compartilhamento de caixas postais entre usuários membros de um grupo de trabalho. Além disso, é possível efetuar pesquisas por mensagens diretamente no servidor, utilizando palavras-chaves.
Assim, podemos ilustrar a Arquitetura de Sistemas de E-mail com a seguinte Figura:

Há alguns artigos aqui no iMasters que podem ajudar a entender melhor esses protocolos:
O modelo OSI e suas sete camadas
IMAP4 e POP3 – qual a melhor solução?
O Exemplo!
Neste exemplo, vamos usar uma aplicação web e realizar o envio através de uma página .jsp. Então, vamos lá!
Primeira Etapa – Criando uma aplicação web no NetBeans
- Abra o seu NetBeans;
- Vá em File > New Project;
A tela exibida será a seguinte:

- Selecione em Categories a categoria Web e em Projetcs, Web Application.
- Nomeie o seu Projeto, no meu caso ProjetoEmail.
- Selecione como Server o Apache Tomcat.
- Clique em Finish.
Segunda Etapa – Importação dos arquivos para a aplicação
Vamos então importar os arquivos do JavaMail à aplicação antes de criar a classe.

- Clique com o botão direito na pasta Libraries de seu Projeto
- Selecione Add JAR/Folder…
- Encontre, um por vez, os arquivos mail.jar e activation.jar
- Lembre-se, basta descompactar a pasta baixada do site da Sun!
Terceira Etapa – Criando a Classe de E-mail
- Vá na pasta Source Packages de seu Projeto
- Clique com o botão direito
- Crie um novo Java Package chamado com.projetoemail.email
Dentro do pacote criado, crie uma classe java chamada SendMail e insira o código abaixo:
package com.projetoemail.email;<br /><br />import java.util.Properties;<br />import javax.mail.Message;<br />import javax.mail.Session;<br />import javax.mail.Transport;<br />import javax.mail.internet.InternetAddress;<br />import javax.mail.internet.MimeMessage; <br />import javax.mail.Authenticator;<br />import javax.mail.PasswordAuthentication; <br /><br /><br />//clase que retorna uma autenticacao para ser enviada e verificada pelo servidor smtp<br />public class SendMail {<br /><br /> private String mailSMTPServer;<br /> private String mailSMTPServerPort;<br /><br /> /*<br /> * quando instanciar um Objeto ja sera atribuido o servidor SMTP do GMAIL <br /> * e a porta usada por ele<br /> */<br /> public SendMail () { //Para o GMAIL <br /> mailSMTPServer = "smtp.gmail.com";<br /> mailSMTPServerPort = "465";<br /> }<br /> /*<br /> * caso queira mudar o servidor e a porta, so enviar para o contrutor<br /> * os valor como string<br /> */<br /> public SendMail (String mailSMTPServer, String mailSMTPServerPort) { //Para outro Servidor<br /> this.mailSMTPServer = mailSMTPServer;<br /> this.mailSMTPServerPort = mailSMTPServerPort;<br /> }<br /><br /> public void sendMail(String from, String to, String subject, String message) {<br /><br /> Properties props = new Properties();<br /><br /> // quem estiver utilizando um SERVIDOR PROXY descomente essa parte e atribua as propriedades do SERVIDOR PROXY utilizado<br /> /*<br /> props.setProperty("proxySet","true");<br /> props.setProperty("socksProxyHost","192.168.155.1"); // IP do Servidor Proxy<br /> props.setProperty("socksProxyPort","1080"); // Porta do servidor Proxy<br /> */<br /><br /> props.put("mail.transport.protocol", "smtp"); //define protocolo de envio como SMTP<br /> props.put("mail.smtp.starttls.enable","true"); <br /> props.put("mail.smtp.host", mailSMTPServer); //server SMTP do GMAIL<br /> props.put("mail.smtp.auth", "true"); //ativa autenticacao<br /> props.put("mail.smtp.user", from); //usuario ou seja, a conta que esta enviando o email (tem que ser do GMAIL)<br /> props.put("mail.debug", "true");<br /> props.put("mail.smtp.port", mailSMTPServerPort); //porta<br /> props.put("mail.smtp.socketFactory.port", mailSMTPServerPort); //mesma porta para o socket<br /> props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");<br /> props.put("mail.smtp.socketFactory.fallback", "false");<br /><br /> //Cria um autenticador que sera usado a seguir<br /> SimpleAuth auth = null;<br /> auth = new SimpleAuth ("seu_emailgmail.com","sua_senha");<br /><br /> //Session - objeto que ira realizar a conexão com o servidor<br /> /*Como há necessidade de autenticação é criada uma autenticacao que<br /> * é responsavel por solicitar e retornar o usuário e senha para <br /> * autenticação */<br /> Session session = Session.getDefaultInstance(props, auth);<br /> session.setDebug(true); //Habilita o LOG das ações executadas durante o envio do email<br /><br /> //Objeto que contém a mensagem<br /> Message msg = new MimeMessage(session);<br /><br /> try {<br /> //Setando o destinatário<br /> msg.setRecipient(Message.RecipientType.TO, new InternetAddress(to));<br /> //Setando a origem do email<br /> msg.setFrom(new InternetAddress(from));<br /> //Setando o assunto<br /> msg.setSubject(subject);<br /> //Setando o conteúdo/corpo do email<br /> msg.setContent(message,"text/plain");<br /><br /> } catch (Exception e) {<br /> System.out.println(">> Erro: Completar Mensagem");<br /> e.printStackTrace();<br /> }<br /><br /> //Objeto encarregado de enviar os dados para o email<br /> Transport tr;<br /> try {<br /> tr = session.getTransport("smtp"); //define smtp para transporte<br /> /*<br /> * 1 - define o servidor smtp<br /> * 2 - seu nome de usuario do gmail<br /> * 3 - sua senha do gmail<br /> */<br /> tr.connect(mailSMTPServer, "seu_emailgmail.com", "sua_senha");<br /> msg.saveChanges(); // don't forget this<br /> //envio da mensagem<br /> tr.sendMessage(msg, msg.getAllRecipients());<br /> tr.close();<br /> } catch (Exception e) {<br /> // TODO Auto-generated catch block<br /> System.out.println(">> Erro: Envio Mensagem");<br /> e.printStackTrace();<br /> }<br /><br /> }<br />}<br />class SimpleAuth extends Authenticator {<br /> public String username = null;<br /> public String password = null;<br /><br /><br /> public SimpleAuth(String user, String pwd) {<br /> username = user;<br /> password = pwd;<br /> }<br /><br /> protected PasswordAuthentication getPasswordAuthentication() {<br /> return new PasswordAuthentication (username,password);<br /> }<br />} Há dois lugares desta classe que você precisará colocar o seu usuário e sua senha do GMail.
Nestes dois lugares eu coloquei “seu_emailgmail.com” e “sua_senha”.
Quarta Etapa – Criando o arquivo JSP
Vá na pasta Web Pages e edite o arquivo index.jsp, ou crie um outro arquivo, com o seguinte código:
< page import="com.projetoemail.email.*" ><br />< <br /> SendMail mail = new SendMail();<br /><br /> try {<br /> mail.sendMail("seu_emailgmail.com", "email_destinodestino.com.br", "TESTE JAVAMAIL", "TESTE");<br /> } catch (Exception e) {<br /> e.printStackTrace();<br /> }<br />>Está Pronto!
A partir de agora você consegue enviar e-mail via aplicação acessando o seu GMail.
Até breve!





