Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> Java

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.

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:

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

  1. Dominar Operadores en Java: Tipos, Sintaxis y Ejemplos Prácticos
  2. Comentarios en Java: Tipos, Uso y Mejores Prácticas
  3. Dominar el Bucle for Mejorado en Java: Sintaxis, Ejemplos y Mejores Prácticas
  4. Dominar Strings en Java: Creación, Métodos y Mejores Prácticas
  5. Dominando interfaces en Java: Conceptos, implementación y mejores prácticas
  6. Dominando las clases internas anónimas en Java: Definición, sintaxis y ejemplos prácticos
  7. Dominando Try‑with‑Resources en Java: Gestión automática de recursos explicada
  8. Anotaciones en Java explicadas: Tipos, ubicación y ejemplos prácticos
  9. Aserciones en Java: Guía práctica para detectar bugs y asegurar fiabilidad del código
  10. Entendiendo Java Vector: Uso, Características y Comparación con ArrayList
  11. Cómo enviar correos electrónicos en Java: Guía paso a paso