Cómo enviar correos electrónicos en Java

    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.

     

    Etiquetas:

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *