Cómo enviar correos electrónicos en Java: Guía paso a paso
Enviar un correo electrónico desde tu aplicación Java es bastante sencillo, pero para empezar necesitas tener instalados la JavaMail API y el Java Activation Framework (JAF) en tu máquina.
Puedes descargar la última versión de JavaMail (versión 1.2) desde el sitio web estándar de Java.
Puedes descargar la última versión de JAF (versión 1.1.1) desde el sitio web estándar de Java.
Descarga y descomprime estos archivos; en los directorios de nivel superior recién creados encontrarás varios archivos JAR para ambas aplicaciones. Debes agregar los archivos mail.jar y activation.jar a tu CLASSPATH.
Enviar un correo electrónico simple
Aquí tienes un ejemplo para enviar un correo electrónico simple desde tu máquina. Se asume que tu localhost está conectado a Internet y es capaz de enviar correos.
Ejemplo
// Nombre del archivo SendEmail.java
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
public class SendEmail {
public static void main(String[] args) {
// Se debe mencionar el ID de correo del destinatario
String to = "abcd@gmail.com";
// Se debe mencionar el ID de correo del remitente
String from = "web@gmail.com";
// Suponiendo que envías el correo desde localhost
String host = "localhost";
// Obtener propiedades del sistema
Properties properties = System.getProperties();
// Configurar servidor de correo
properties.setProperty("mail.smtp.host", host);
// Obtener el objeto Session por defecto
Session session = Session.getDefaultInstance(properties);
try {
// Crear un objeto MimeMessage por defecto
MimeMessage message = new MimeMessage(session);
// Establecer campo From: del encabezado
message.setFrom(new InternetAddress(from));
// Establecer campo To: del encabezado
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
// Establecer campo Subject:
message.setSubject("¡Esta es la línea de asunto!");
// Establecer el mensaje real
message.setText("Este es el mensaje real");
// Enviar mensaje
Transport.send(message);
System.out.println("Mensaje enviado correctamente....");
} catch (MessagingException mex) {
mex.printStackTrace();
}
}
}
Compila y ejecuta este programa para enviar un correo simple:
Salida
$ java SendEmail Mensaje enviado correctamente....
Si deseas enviar un correo a múltiples destinatarios, se utilizarían los siguientes métodos para especificar varios IDs de correo:
void addRecipients(Message.RecipientType type, Address[] addresses) throws MessagingException
Descripción de los parámetros:
type – Se establece en TO, CC o BCC. CC significa Copia Carbón y BCC Copia Carbón Oculta. Ejemplo: Message.RecipientType.TO
addresses – Es un array de IDs de correo. Debes usar el método InternetAddress() al especificar los correos.
Enviar un correo electrónico en HTML
Aquí tienes un ejemplo para enviar un correo en HTML. La única diferencia con el anterior es el uso del método setContent() cuyo segundo argumento es "text/html" para indicar que el contenido incluye HTML.
Con este ejemplo puedes enviar contenido HTML tan grande como desees.
Ejemplo
// Nombre del archivo SendHTMLEmail.java
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
public class SendHTMLEmail {
public static void main(String[] args) {
String to = "abcd@gmail.com";
String from = "web@gmail.com";
String host = "localhost";
Properties properties = System.getProperties();
properties.setProperty("mail.smtp.host", host);
Session session = Session.getDefaultInstance(properties);
try {
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
message.setSubject("¡Esta es la línea de asunto!");
// Enviar el mensaje HTML real
message.setContent("<h1>Este es el mensaje real</h1>", "text/html");
Transport.send(message);
System.out.println("Mensaje enviado correctamente....");
} catch (MessagingException mex) {
mex.printStackTrace();
}
}
}
Compila y ejecuta para enviar un correo HTML:
Salida
$ java SendHTMLEmail Mensaje enviado correctamente....
Enviar adjuntos en el correo
Ejemplo para enviar un correo con archivo adjunto. Se asume que localhost tiene conexión a Internet.
Ejemplo
// Nombre del archivo SendFileEmail.java
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
public class SendFileEmail {
public static void main(String[] args) {
String to = "abcd@gmail.com";
String from = "web@gmail.com";
String host = "localhost";
Properties properties = System.getProperties();
properties.setProperty("mail.smtp.host", host);
Session session = Session.getDefaultInstance(properties);
try {
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
message.setSubject("¡Esta es la línea de asunto!");
// Crear la parte del mensaje
BodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setText("Este es el cuerpo del mensaje");
// Crear mensaje multiparte
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(messageBodyPart);
// Segunda parte: adjunto
messageBodyPart = new MimeBodyPart();
String filename = "archivo.txt";
DataSource source = new FileDataSource(filename);
messageBodyPart.setDataHandler(new DataHandler(source));
messageBodyPart.setFileName(filename);
multipart.addBodyPart(messageBodyPart);
// Enviar las partes completas del mensaje
message.setContent(multipart);
Transport.send(message);
System.out.println("Mensaje enviado correctamente....");
} catch (MessagingException mex) {
mex.printStackTrace();
}
}
}
Compila y ejecuta para enviar un correo con adjunto:
Salida
$ java SendFileEmail Mensaje enviado correctamente....
Autenticación de usuario
Si el servidor de correo requiere ID de usuario y contraseña para autenticación, puedes establecer estas propiedades:
props.setProperty("mail.user", "miusuario");
props.setProperty("mail.password", "micontraseña");
El resto del mecanismo de envío permanece igual que lo explicado anteriormente.
Java
- Dominar Operadores en Java: Tipos, Sintaxis y Ejemplos Prácticos
- Comentarios en Java: Tipos, Uso y Mejores Prácticas
- Dominar el Bucle for Mejorado en Java: Sintaxis, Ejemplos y Mejores Prácticas
- Dominar Strings en Java: Creación, Métodos y Mejores Prácticas
- Dominando interfaces en Java: Conceptos, implementación y mejores prácticas
- Dominando las clases internas anónimas en Java: Definición, sintaxis y ejemplos prácticos
- Dominando Try‑with‑Resources en Java: Gestión automática de recursos explicada
- Anotaciones en Java explicadas: Tipos, ubicación y ejemplos prácticos
- Aserciones en Java: Guía práctica para detectar bugs y asegurar fiabilidad del código
- Entendiendo Java Vector: Uso, Características y Comparación con ArrayList
- Cómo enviar correos electrónicos en Java: Guía paso a paso