Envío de correo electrónico en Java: guía completa de JavaMail y Jakarta Mail

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 con Jakarta Mail (JavaMail)



El envío de correos electrónicos es una de las tareas más demandadas en aplicaciones empresariales en Java: registro de usuarios, notificaciones, recuperación de contraseñas y envíos de marketing. Durante mucho tiempo, el estándar de facto fue la biblioteca JavaMail, pero tras la migración de Java EE a Eclipse Foundation, pasó a llamarse Jakarta Mail. En esta guía, analizaremos en detalle cómo configurar y usar Jakarta Mail para enviar correos electrónicos en Java.



¿Qué es Jakarta Mail?

Jakarta Mail (anteriormente JavaMail) es una API para enviar, recibir y procesar correos electrónicos en aplicaciones Java. La biblioteca admite los protocolos SMTP, POP3 e IMAP, así como el estándar MIME, lo que permite enviar tanto mensajes de texto simples como mensajes con adjuntos, formato HTML e imágenes.



Instalación y configuración de dependencias

Para trabajar con Jakarta Mail, debe agregar la dependencia a su proyecto. Si usa Maven, agréguela en 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: Si usa Java 8 o superior, asegúrese de que la versión de Jakarta Mail sea compatible; para Java 8, la versión 1.6.x es adecuada (por ejemplo, javax.mail:javax.mail-api:1.6.2).



Envío básico de correo electrónico en Java

Veamos el ejemplo más simple: enviar un mensaje de texto a través del servidor SMTP de Gmail. Para ello, necesitará:

  • Una cuenta de Gmail (u otro servicio de correo)
  • Una contraseña de aplicación (si la autenticación de dos factores está activada)
  • Permiso para acceder a aplicaciones menos seguras (si es necesario)


Código de envío:

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

public class EmailSender { public static void main(String[] args) { // 1. Configuración de propiedades de conexión 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. Autenticación Session session = Session.getInstance(props, new Authenticator() { @Override protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication("your-email@gmail.com", "your-app-password"); } });

try { // 3. Creación del mensaje 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("Correo de prueba desde Java"); message.setText("¡Hola! Este correo fue enviado con Jakarta Mail.");

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


Envío de correos HTML y con adjuntos

A menudo es necesario enviar un correo con formato (HTML) o adjuntar un archivo. Para ello, se utilizan MimeMultipart y MimeBodyPart.



Correo HTML

MimeBodyPart htmlPart = new MimeBodyPart();htmlPart.setContent("<h1>¡Hola!</h1><p>Este es un correo HTML desde Java.</p>", "text/html; charset=utf-8");

Multipart mu

Recommendations