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.
Também na biblioteca
Configuração de aplicações C# (.NET): bibliotecas e ferramentas
Jetpack Compose para Kotlin: guia completo com exemplos
Trabalhando com YAML em Java: bibliotecas SnakeYAML e Jackson
Envio de Email em C# (.NET) com SmtpClient e MailKit