Envio de email em Java com Jakarta Mail (JavaMail)
O envio de emails é uma das tarefas mais requisitadas em aplicações corporativas em Java: registro de usuários, notificações, recuperação de senhas e campanhas de marketing. Por muito tempo, o padrão de facto foi a biblioteca JavaMail, mas após a transição do Java EE para a Eclipse Foundation, ela foi renomeada para Jakarta Mail. Neste guia, abordaremos detalhadamente como configurar e usar o Jakarta Mail para enviar emails em Java.
O que é Jakarta Mail?
Jakarta Mail (anteriormente JavaMail) é uma API para enviar, receber e processar emails em aplicações Java. A biblioteca suporta os protocolos SMTP, POP3 e IMAP, bem como o padrão MIME, permitindo enviar tanto mensagens de texto simples quanto mensagens com anexos, marcação HTML e imagens.
Instalação e inclusão de dependências
Para trabalhar com Jakarta Mail, é necessário adicionar a dependência ao seu projeto. Se você usa Maven, adicione em pom.xml:
<dependency> <groupId>com.sun.mail</groupId> <artifactId>jakarta.mail</artifactId> <version>2.0.1</version></dependency>Para Gradle:
implementation 'com.sun.mail:jakarta.mail:2.0.1'Importante: Se você usa Java 8 ou superior, certifique-se de que a versão do Jakarta Mail é compatível — para Java 8, a versão 1.6.x é adequada (por exemplo, javax.mail:javax.mail-api:1.6.2).
Envio básico de email em Java
Vamos considerar o exemplo mais simples — envio de uma mensagem de texto através do servidor SMTP do Gmail. Para isso, será necessário:
- Uma conta do Gmail (ou de outro serviço de email)
- Senha de aplicativo (se a autenticação de dois fatores estiver ativada)
- Permissão para acesso a aplicativos menos seguros (se necessário)
Código de envio:
import jakarta.mail.*;import jakarta.mail.internet.*;import java.util.Properties;
public class EmailSender { public static void main(String[] args) { // 1. Configuração das propriedades de conexão 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");
// 2. Autenticação Session session = Session.getInstance(props, new Authenticator() { @Override protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication("your-email@gmail.com", "your-app-password"); } });
try { // 3. Criação da mensagem Message message = new MimeMessage(session); message.setFrom(new InternetAddress("from-email@gmail.com")); message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("recipient@example.com")); message.setSubject("Mensagem de teste do Java"); message.setText("Olá! Esta mensagem foi enviada usando Jakarta Mail.");
// 4. Envio Transport.send(message); System.out.println("Mensagem enviada com sucesso!"); } catch (MessagingException e) { e.printStackTrace(); } }}Envio de mensagens HTML e com anexos
Frequentemente, é necessário enviar uma mensagem com formatação (HTML) ou anexar um arquivo. Para isso, utiliza-se MimeMultipart e MimeBodyPart.
Mensagem HTML
MimeBodyPart htmlPart = new MimeBodyPart();htmlPart.setContent("<h1>Olá!</h1><p>Esta é uma mensagem HTML do Java.</p>", "text/html; charset=utf-8");
Multipart mu Também na biblioteca
Tokens JWT em C++: implementação e verificação com jwt-cpp
Filas de tarefas em TypeScript: visão geral de bibliotecas e implementação