Dev (Back & Front)ARTIGO

Envio de e-mail utilizando JavaMail

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 JavaJava42 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!

é aluno do curso de Bacharelado em Sistemas de Informação da Universidade Estadual Paulista – UNESPBauru. Tem experiência em desenvolvimento de sistemas web e formação básica de web designer. Tem conhecimentos de linguagens como Java e PHP desenvolvendo soluções para a Universidade Estadual Paulista UNESPBauru.

Ver perfil

Mais de Gustavo de Oliveira Rodrigues