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 *