Envio de email em Java: biblioteca Jakarta Mail (JavaMail)

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Envio de email em Java: biblioteca Jakarta Mail (JavaMail)



Em Java, o envio de e-mail é tradicionalmente implementado através de uma API poderosa e flexível — JavaMail. Após a transição do Java EE para a Eclipse Foundation, a biblioteca recebeu um novo nome — Jakarta Mail (para Jakarta EE 9+) e o pacote atual jakarta.mail. Neste guia, veremos como configurar e usar o Jakarta Mail (ou o clássico JavaMail) para enviar e-mails através de um servidor SMTP.



O que é Jakarta Mail (JavaMail)?

Jakarta Mail é um framework independente de plataforma para criar clientes de e-mail. Ele fornece um conjunto de abstrações para trabalhar com os protocolos SMTP, POP3 e IMAP. Para o envio de e-mail, estamos interessados no protocolo SMTP. A biblioteca suporta:

  • Envio de mensagens de texto simples (text/plain).
  • Envio de e-mails HTML com anexos (multipart/mixed).
  • Trabalho com criptografia SSL/TLS (SMTPS).
  • Autenticação no servidor de e-mail.


Instalação e configuração

Para trabalhar com Jakarta Mail, você precisará adicionar uma dependência ao seu projeto. Se você usa Maven, adicione ao pom.xml:

<dependency>    <groupId>com.sun.mail</groupId>    <artifactId>jakarta.mail</artifactId>    <version>2.0.1</version></dependency>

Para o clássico JavaMail (pacote javax.mail), use:

<dependency>    <groupId>javax.mail</groupId>    <artifactId>javax.mail-api</artifactId>    <version>1.6.2</version></dependency>

Também será necessária uma implementação (geralmente com.sun.mail:javax.mail:1.6.2).



Envio básico de e-mail de texto

Vamos considerar um exemplo mínimo de envio de e-mail através do servidor SMTP do Gmail (ou qualquer outro). Primeiro, crie um objeto Properties contendo as configurações SMTP:

import java.util.Properties;import jakarta.mail.*;import jakarta.mail.internet.InternetAddress;import jakarta.mail.internet.MimeMessage;

public class EmailSender { public static void main(String[] args) { // Configurações do servidor SMTP (exemplo: Gmail) Properties props = new Properties(); props.put("mail.smtp.host", "smtp.gmail.com"); props.put("mail.smtp.port", "587"); props.put("mail.smtp.auth", "true"); props.put("mail.smtp.starttls.enable", "true"); // TLS

// Autenticação String username = "seu-email@gmail.com"; String password = "sua-senha-de-app"; // Use a senha de aplicativo!

// Criação da sessão Session session = Session.getInstance(props, new Authenticator() { @Override protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(username, password); } });

try { // Formação do e-mail Message message = new MimeMessage(session); message.setFrom(new InternetAddress(username)); message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("destinatario@exemplo.com")); message.setSubject("Olá do Java!"); message.setText("Esta é uma mensagem de teste enviada com Jakarta Mail.");

// Envio Transport.send(message); System.out.println("E-mail enviado com sucesso!"); } catch (MessagingException e) { e.printStackTrace(); } }}

Importante: Para o Gmail, use uma senha de aplicativo, não a senha principal. Para outros servidores (Yandex, Mail.ru), as configurações de porta e host podem diferir.

Recommendations