Cómo enviar correos electrónicos en Java

C

Visión general

La mayoría de los sitios web ofrecen hoy una suscripción a un boletín informativo de cualquier tipo para informarnos sobre sus grandes ofertas, descuentos, nuevos productos, servicios y recibos.

Al registrarse en un sitio web, también (en la mayoría de los casos) recibimos un correo electrónico para verificar nuestra dirección de correo electrónico y vincularla a la cuenta en la que se está registrando.

Esta puede ser una gran táctica de marketing y realmente puede hacer crecer su negocio y su plataforma, por lo que es imprescindible saber cómo crear un sistema simple para enviar correos electrónicos, especialmente si está lanzando una plataforma que ofrece un producto o servicio de cualquier tipo.

Para lograr esto, usaremos una de las bibliotecas centrales de Java: javax.mail.

Envío de un correo electrónico de texto sin formato

Aunque nuestro correo electrónico de ejemplo a continuación no es tan emocionante como los correos electrónicos bien diseñados con botones e imágenes personalizados, un correo electrónico simple como este a menudo se envía para registrarse o restablecer la contraseña significa:

public class EmailSender {
    public static void main(String[] args) {
        String recipient = "[email protected]";
        String sender = "[email protected]";
        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(sender));
            message.addRecipient(Message.RecipientType.TO, new InternetAddress(recipient));
            message.addRecipients(Message.RecipientType.TO, new Address[...]); // email to multiple recipients
            message.setSubject("Hello World!");
            message.setText("And hello from the body of the message!");

            Transport.send(message);

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

Nos presentan un par de clases aquí:

  • Properties – Representa cualquier conjunto de propiedades y valores predeterminados.
  • Session – Recopila las propiedades y los valores predeterminados que utiliza la API del correo.
  • MimeMessage – Representa el MÍMICA mensaje de correo electrónico de estilo.
  • InternetAddress – Representa un RFC882 dirección de Internet de sintaxis – “[email protected]”

Envío de correo electrónico con HTML

Los correos electrónicos HTML son muy comunes y probablemente los vea todos los días en su bandeja de entrada. Todos los nuevos catálogos de lujo y productos llamativos están decorados para atraer tanto como sea posible, al igual que sus contrapartes de sitios web.

Enviar un correo electrónico con HTML es un poco diferente del ejemplo anterior en una sola línea:

public class EmailSender {

    public static void main(String[] args) {
        String recipient = "[email protected]";
        String sender = "[email protected]";
        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(sender));
            message.addRecipient(Message.RecipientType.TO, new InternetAddress(recipient));
            message.setSubject("Hello World!");

            message.setContent("<h1>Message Header</h1>" +
                    "<p>This is a paragraph </p>" +
                    "<p>This is another paragraph</p>", "text/html");

            Transport.send(message);

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

Usando el .setContent() método, y estableciendo el tipo para ser text/html, podemos agregar HTML a nuestro mensaje de correo electrónico.

El método acepta una MultiPart objeto o un Objeto / Cadena, y simplemente establece los argumentos como el contenido del mensaje.

Envío de correo electrónico con un archivo adjunto

En muchos casos, es posible que desee enviar un correo electrónico con un archivo adjunto de cualquier tipo. Por ejemplo, después de que un cliente solicita su producto o paga por su servicio, usted querrá enviar un recibo para confirmar la compra.

Si su producto o servicio requiere documentos legales, un cliente también puede recibir un documento legal para firmar y enviar de vuelta, todo lo cual se puede hacer por correo electrónico.

En cualquiera de estos casos, esto requiere un enfoque un poco diferente al de nuestros ejemplos anteriores:

public class EmailSender {

    public static void main(String[] args) {
        String recipient = "[email protected]";
        String sender = "[email protected]";
        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(sender));
            message.addRecipient(Message.RecipientType.TO, new InternetAddress(recipient));
            message.setSubject("Receipt for your product!");

            BodyPart messageBodyPart = new MimeBodyPart();
            messageBodyPart.setText("Thank you for buying with us, here's a receipt for your product.");

            Multipart multipart = new MimeMultipart();
            multipart.addBodyPart(messageBodyPart);

            messageBodyPart = new MimeBodyPart();
            DataSource source = new FileDataSource("receipt.txt");
            multipart.addBodyPart(messageBodyPart);

            message.setContent(multipart);

            Transport.send(message);

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

Aquí, nos presentan algunas clases nuevas:

  • BodyPart – Una clase abstracta que representa una parte de un Multipart
  • Multipart – Un contenedor para múltiples BodyPart objetos
  • DataSource – Proporciona un tipo para una recopilación arbitraria de datos, así como el acceso a ellos en forma de InputStreams y OutputStreams

Al agregar un Multipart como contenido, podemos agregar tantos BodyParts en ella, y después de agregar una, podemos usar la misma variable de referencia para inicializar una nueva y almacenarla en el Multipart también.

Conclusión

Estas son las tres cosas más comunes que necesita saber para enviar correos electrónicos de cualquier tipo en Java simple, sin bibliotecas de terceros adicionales.

 

About the author

Ramiro de la Vega

Bienvenido a Pharos.sh

Soy Ramiro de la Vega, Estadounidense con raíces Españolas. Empecé a programar hace casi 20 años cuando era muy jovencito.

Espero que en mi web encuentres la inspiración y ayuda que necesitas para adentrarte en el fantástico mundo de la programación y conseguir tus objetivos por difíciles que sean.

Add comment

Sobre mi

Últimos Post

Etiquetas

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con tus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, aceptas el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad