Envío de correo electrónico en Java: biblioteca Jakarta Mail (JavaMail)

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Envío de correo electrónico en Java: biblioteca Jakarta Mail (JavaMail)



En Java, el envío de correo electrónico tradicionalmente se implementa a través de una API potente y flexible: JavaMail. Después de la transición de Java EE a Eclipse Foundation, la biblioteca recibió un nuevo nombre: Jakarta Mail (para Jakarta EE 9+) y el paquete actual jakarta.mail. En esta guía, veremos cómo configurar y usar Jakarta Mail (o el clásico JavaMail) para enviar correos a través de un servidor SMTP.



¿Qué es Jakarta Mail (JavaMail)?

Jakarta Mail es un framework independiente de la plataforma para crear clientes de correo. Proporciona un conjunto de abstracciones para trabajar con los protocolos SMTP, POP3 e IMAP. Para el envío de correos electrónicos, nos interesa el protocolo SMTP. La biblioteca soporta:

  • Envío de mensajes de texto simples (text/plain).
  • Envío de correos HTML con adjuntos (multipart/mixed).
  • Trabajo con cifrado SSL/TLS (SMTPS).
  • Autenticación en el servidor de correo.


Instalación y configuración

Para trabajar con Jakarta Mail, necesitarás agregar la dependencia a tu proyecto. Si usas Maven, agrega en pom.xml:

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

Para el clásico JavaMail (paquete javax.mail), usa:

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

También se necesitará una implementación (normalmente com.sun.mail:javax.mail:1.6.2).



Envío básico de un correo de texto

Veamos un ejemplo mínimo de envío de correo electrónico a través del servidor SMTP de Gmail (o cualquier otro). Primero, crea un objeto Properties que contenga la configuración 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) { // Configuración del servidor SMTP (ejemplo: 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

// Autenticación String username = "tu-correo@gmail.com"; String password = "tu-contraseña-de-aplicación"; // ¡Usa una contraseña de aplicación!

// Creación de la sesión Session session = Session.getInstance(props, new Authenticator() { @Override protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(username, password); } });

try { // Formación del mensaje Message message = new MimeMessage(session); message.setFrom(new InternetAddress(username)); message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("destinatario@ejemplo.com")); message.setSubject("¡Saludos desde Java!"); message.setText("Este es un mensaje de prueba enviado con Jakarta Mail.");

// Envío Transport.send(message); System.out.println("¡Correo enviado exitosamente!"); } catch (MessagingException e) { e.printStackTrace(); } }}

Importante: Para Gmail, usa una contraseña de aplicación, no tu contraseña principal. Para otros servidores (Yandex, Mail.ru), la configuración del puerto y el host puede diferir.

Recommendations