Cómo enviar correos electrónicos con Node.js

El correo electrónico es una de las herramientas más utilizadas para la comunicación en las aplicaciones web porque te ayuda a llegar a tus usuarios directamente, construir tu marca o enviar mensajes generales no...

Introducción

El correo electrónico es una de las herramientas de comunicación más utilizadas en las aplicaciones web porque te ayuda a llegar directamente a tus usuarios, construir tu marca o enviar notificaciones generales.

Entonces, está pensando en enviar correos electrónicos desde su próxima gran aplicación Node.js. Usted está en el lugar correcto!

En este tutorial aprenderás a enviar correos electrónicos con contenido HTML y archivos adjuntos usando el módulo nodemailer, así como configurar [Trampa de correo](https://mailtrap .io/), un servidor SMTP falso, para probar su código.

Requisitos previos

Para continuar, deberá tener Nodo.js y npm (Node Package Manager) instalados localmente.

Para probar el envío de correos electrónicos desde una máquina de desarrollo local, sin tener que configurar un servidor, usaremos Mailtrap.

Comenzando

Hay muchos módulos de Node.js para enviar correos electrónicos. Entre ellos, nodemailer es la opción más popular. Es un módulo que le brinda la capacidad de enviar correos electrónicos fácilmente sin problemas.

Avancemos y creemos una nueva carpeta y un nuevo archivo package.json con el comando npm init:

1
2
3
$ mkdir nodejs-email
$ cd nodejs-email
$ npm init -y

El indicador -y proporcionado omitirá la herramienta paso a paso para desarrollar su proyecto.

Ahora instalemos el módulo nodemailer usando npm:

1
$ npm install nodemailer

Con el modelo listo para usar, creemos un archivo index.js en nuestro directorio de proyectos.

En Node.js, la sintaxis require se usa para cargar módulos en su código:

1
const nodemailer = require('nodemailer');

Uso de SMTP para transporte de Nodemailer

El Protocolo simple de transferencia de correo (SMTP) es un protocolo para enviar mensajes de correo electrónico entre servidores. La mayoría de los sistemas de correo electrónico que envían correo a través de Internet admiten el envío basado en SMTP.

¿Y adivina qué? SMTP es el transporte principal utilizado por nodemailer para entregar mensajes.

Crear un transporte nodemailer es tan fácil como llamar al siguiente método con algunos parámetros:

1
let transport = nodemailer.createTransport(options[, defaults])

Sin embargo, para enviar un mensaje a través de nuestro transporte, primero tenemos que configurar la conexión.

Probando nuestro código con Mailtrap

Mailtrap es un "servidor SMTP falso" que se utiliza con fines de desarrollo. En lugar de tener que probar su código con su propia cuenta de correo electrónico y potencialmente inundar su bandeja de entrada con correos electrónicos de prueba, puede usar Mailtrap como punto final.

Cree una nueva cuenta en Mailtrap si aún no tiene una, y luego cree una nueva bandeja de entrada y obtenga sus credenciales:

Ahora, todo lo que tenemos que hacer es poner las credenciales en el objeto de transporte de nodemailer:

1
2
3
4
5
6
7
8
let transport = nodemailer.createTransport({
    host: 'smtp.mailtrap.io',
    port: 2525,
    auth: {
       user: 'put_your_username_here',
       pass: 'put_your_password_here'
    }
});

Con todo eso configurado, podemos continuar y enviar nuestro primer correo electrónico de prueba:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
const message = {
    from: '[correo electrónico protegido]', // Sender address
    to: '[correo electrónico protegido]',         // List of recipients
    subject: 'Design Your Model S | Tesla', // Subject line
    text: 'Have the most fun you can in a car. Get your Tesla today!' // Plain text body
};
transport.sendMail(message, function(err, info) {
    if (err) {
      console.log(err)
    } else {
      console.log(info);
    }
});

¡Ta-da, eso es todo!

Envío de un correo electrónico HTML

Si bien el ejemplo anterior funciona bien, es lo que algunos pueden llamar "aburrido".

Hoy en día, los correos electrónicos tienden a tener estilo, colorido, botones grandes y elementos visuales interesantes y atractivos. Para lograr esto, incrustamos HTML en nuestros correos electrónicos.

Puede crear estos correos electrónicos HTML y enviarlos con nodemailer tan fácilmente como podría enviar un correo electrónico de texto sin formato. Todo lo que se necesita es usar el parámetro html en el objeto mensaje en lugar de texto:

1
2
3
4
5
6
const message = {
    from: '[correo electrónico protegido]',
    to: '[correo electrónico protegido]',
    subject: 'Design Your Model S | Tesla',
    html: '<h1>Have the most fun you can in a car!</h1><p>Get your <b>Tesla</b> today!</p>'
};

Aunque este ejemplo es bastante simple, solo incluye una etiqueta <h1>, <p> y <b>, puedes incluir mucho, mucho más.

¡Voila!

Tenga en cuenta que también puede enviar HTML y texto sin formato en un solo correo electrónico proporcionando ambos parámetros. Con ambas versiones en su mensaje de correo electrónico, el cliente de correo electrónico del destinatario puede elegir cuál mostrar.

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

Existen innumerables razones por las que es posible que desee incluir un archivo adjunto en su correo electrónico, como enviar imágenes, hojas de cálculo para el trabajo o videos.

Como otro ejemplo, si ejecuta un sitio web de comercio electrónico, por ejemplo, es posible que desee enviar recibos a sus clientes:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
const nodemailer = require("nodemailer");

let transport = nodemailer.createTransport({
    // ...
});

const message = {
    from: '[correo electrónico protegido]',
    to: '[correo electrónico protegido]',
    subject: 'Design Your Model S | Tesla',
    html: '<h1>Have the most fun you can in a car!</h1><p>Get your <b>Tesla</b> today!</p>',
    attachments: [
        { // Use a URL as an attachment
          filename: 'your-testla.png',
          path: 'https://media.gettyimages.com/photos/view-of-tesla-model-s-in-barcelona-spain-on-september-10-2018-picture-id1032050330?s=2048x2048'
      }
    ]
};
transport.sendMail(message, function (err, info) {
    // ...
 });

Y también puede usar un archivo en el disco como archivo adjunto. No es necesario que estén basados ​​en la web.

Conclusión

Ahora puede enviar fácilmente correos electrónicos personalizados en su código Node.js usando el módulo nodemailer. Y no olvides que nodemailer documentación es tu mejor amigo para conocer las opciones más avanzadas. as.