Jakarta Mail (JavaMail) para Java: guía completa con ejemplos

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

Jakarta Mail (JavaMail) para Java: guía completa con ejemplos

JavaMail (ahora Jakarta Mail) es la biblioteca estándar de Java para enviar, recibir y procesar correos electrónicos. Proporciona una API potente y flexible para trabajar con los protocolos SMTP, POP3 e IMAP, permitiendo a los desarrolladores integrar funciones de correo en sus aplicaciones. La biblioteca forma parte de la plataforma Jakarta EE (anteriormente Java EE) y cuenta con el soporte activo de la comunidad Eclipse Foundation.

¿Para qué sirve JavaMail? En el desarrollo moderno, prácticamente cualquier aplicación empresarial necesita enviar notificaciones, confirmaciones de registro, restablecimientos de contraseñas o boletines informativos. JavaMail permite hacerlo de forma programática, sin necesidad de usar servicios externos ni operaciones manuales. La biblioteca soporta tipos MIME, archivos adjuntos, correos HTML, envío multiproceso y cifrado (SSL/TLS).

Las principales funcionalidades incluyen: envío de correos a través de un servidor SMTP (Gmail, Outlook, servidor propio), lectura de correos mediante POP3/IMAP, trabajo con archivos adjuntos (imágenes, PDF, comprimidos), soporte para mensajes multipart, gestión de banderas (leído, eliminado) y configuración completa de la conexión a través de Properties.

Instalación

JavaMail (Jakarta Mail) se distribuye a través de Maven Central. Para usarlo, agrega la dependencia a tu archivo pom.xml (Maven) o build.gradle (Gradle).

Maven

<dependency>
    <groupId>com.sun.mail</groupId>
    <artifactId>javax.mail</artifactId>
    <version>1.6.2</version>
</dependency>

Para Jakarta Mail (versión nueva, a partir de Jakarta EE 9):

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

Gradle

implementation 'com.sun.mail:javax.mail:1.6.2'
// O para Jakarta Mail:
implementation 'com.sun.mail:jakarta.mail:2.0.1'

Si usas Java 9+ y el sistema de módulos, agrega en module-info.java:

requires java.mail;

Inicio rápido — ejemplo mínimo funcional

Envío de un correo de texto simple a través del servidor SMTP de Gmail (requiere activar "Acceso a aplicaciones menos seguras" o usar una contraseña de aplicación).

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

public class InicioRapido {
    public static void main(String[] args) {
        // Configuración SMTP
        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");

        // Autenticación
        Session session = Session.getInstance(props, new Authenticator() {
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication("tu-correo@gmail.com", "tu-contraseña");
            }
        });

        try {
            // Creación del mensaje
            Message message = new MimeMessage(session);
            message.setFrom(new InternetAddress("tu-correo@gmail.com"));
            message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("destinatario@ejemplo.com"));
            message.setSubject("Correo de prueba desde Java");
            message.setText("¡Hola! Este es un mensaje de prueba.");

            // Envío
            Transport.send(message);
            System.out.println("¡Correo enviado con éxito!");

        } catch (MessagingException e) {
            e.printStackTrace();
        }
    }
}

Métodos/funciones/clases principales

1. Session.getInstance(Properties, Authenti

Recommendations