¿Cómo enviar emails en Node JS sin tanto rollo? 🧐

Uno de los temas que más recuerdo y le tuve miedo o simplemente pensé que eran muy complicados era el envio de emails desde el backend. Después de que pude utilizar herramientas como nodemailer vi que era un tema bastante sencillo (claro, dejando de lado super arquitecturas en proyectos grandes), pero después de ciertas actualizaciones en diversos servidores de correos como gmail u outlook, diversos tutoriales o videos que veia en internet quedaron desactualizados porque te enseñaban como usar la herramienta pero no a configurar lo que debías cambiar en tu servicio de correo 🫠, copiabas el tutorial pero no funcionaba. Por eso en este blog veremos como usar nodemailer de manera fácil para enviar emails a traves de gmail y si, sin tanto sufrimiento o dolores de cabeza. Así podrás “sacar la chamba” ☝🤓.
Configurando Gmail
Para esto, claro que necesitamos una cuenta de gmail. Lo primero que haremos es entrar google.com y en la pestaña de tu perfil entraremos a gestionar cuenta tu cuenta de google:

Dentro de esta sección, nos moveremos a seguridad:

Ahora, este es de los puntos más importantes para poder lograr nuestro objetivo. Dentro de las opciones veremos autenticación de dos pasos, sino la tienes activada deberás hacerlo:

Una vez que ya la tengas activa o en su caso, ya la tenias activada solo debemos dar click y entrar a configurar, haciendo esto nos pedirá nuestra contraseña para ingresar y dentro de esta sección haremos scroll hasta la ultima parte llamada contraseñas de apps:

Entrando a esa sección nos aparecerá la opción de crear una nueva contraseña de aplicación, nos pedirá seleccionar aplicación y dispositivo, posteriormente un nombre. Para esto seleccionamos:
- Correo
- Otras
En este ultimo paso aparecerá la contraseña con un fondo amarillo después de poner el nombre, debes asegurarte de copiarla y pegarla en algún lugar porqué no podrás consultarla de nuevo.
Nombre: (el que quieras), en este caso usare nodemailer como nombre

Copiando y guardando la contraseña en un lugar seguro, eso sería todo lo que haríamos del lado de gmail, quedando algo como esto:

Creando el proyecto de Node JS
Ahora nos dedicaremos a crear un pequeño proyecto en node js para enviar los emails, para esto abriremos nuestra consola de comandos y crearemos una carpeta:

Dentro de nuestra carpeta procederemos a crear un proyecto nuevo:

Ahora nos toca instalar nodemailer:

De igual forma, te dejo la documentación oficial de nodemailer: https://nodemailer.com/about/
En mi caso, abriré el proyecto en mi editor de código favorito que es VSCode, de modo que por ahora solo tendremos 3 archivos:

Por ultimo, entraremos al package.json y agregaremos un nuevo script a la propiedad scripts:
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "node index.js" //Agregamos start
},
Escribiendo el código para enviar emails
Dentro de nuestro editor, crearemos un archivo nuevo llamado index.js y dentro del mismo escribimos el siguiente código:
const nodemailer = require('nodemailer');
const transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
user: 'tucorreo', //Tu cuenta de gmail
pass: 'tucontraseña' //Aqui va la contraseña que generamos en el paso anterior de gmail
}
});
const mailOptions = {
from: 'tucorreo', //tu cuenta de gmail
to: 'elcorreoquequierasenviarle', //Un ejemplo de correo al que quieres que llegue tu email
subject: 'Correo de prueba desde Node', //Cabecera
text: '¡Hola!' //texto a enviar
};
console.info('Enviando correo ...')
transporter.sendMail(mailOptions, (error, info)=> {
if (error) {
console.log(error);
} else {
console.log('Enviado! ' + info.response);
}
});
En este caso, yo usaré una herramienta para generar un correo electrónico temporal y a esa cuenta enviar nuestro email de prueba:


Obteniendo tu correo de prueba, lo puedes reemplazar en el objeto mailOptions. Ya que reemplazaste las demás propiedades con tus propios datos, podemos probar nuestra integración corriendo npm start en consola:

De acuerdo a la consola, tarda un momento en enviar el correo, por lo que vamos a nuestro correo temporal después de ver el OK:

¡Listo! 🤟
Hemos enviado de forma muy fácil un email a través de nodemailer y gmail. Si tuviste algun problema para enviarlo o la consola te mostro errores, puede ser por las credenciales al momento de reemplazarlas. Puedes dejarme un comentario y con gusto te ayudaré.
Siguientes pasos
Como notaste, enviamos solo un pequeño texto en nuestro email de prueba pero tambien se pueden enviar más cosas como:
- Un archivo html con estilos interpolado con JS.
- Templates html como handlebars, estos necesitan más configuración pero es posible, te dejo un link: https://community.nodemailer.com/2-0-0-beta/templating/.
- Configuraciones SMTP más avanzadas.
✍ and post with ❤ by JimmyVazz