Como enviar emails desde NodeJS

Enviar emails desde el backend usando nodeMailer

nodejslogo

Estos días me ha surgido la necesidad de poder enviar emails desde el backend, y no encontraba ningún artículo exactamente con lo que yo quería. Básicamente, quería crear templates de emails dinámicos que, pasándoles ‘x’ parámetros se enviaran con un contenido dinámico al destinatario.

Entonces como no encontraba lo que quería, pues publico como lo he hecho 🙂

Paso 1

Instalamos la libreria nodemailer: npm install nodemailer

Paso 2

Creamos un archivo nodemailer.js que contenga lo siguiente:

var nodemailer = require(‘nodemailer’);
const transporter = nodemailer.createTransport({
    host: HOST_SMPT,
    port: PUERTO_SMPT,
    secure: false,
    auth: {
        user: USER_SMPT,
        pass: PASS_SMPT
    }
});
module.exports = transporter;
 
¡Recuerda cambiar los valores en mayúscula por los tuyos!

Paso 3

Creamos un arhivo html con nuestro template y lo queramos que sea dinámico lo definimos como ##EMAIL##, ##FULLNAME#, etc.
Para este ejemplo he usado topol.io, un creador de plantillas mail. Os dejo la plantilla index para que podáis ver el archivo.

Paso 4

En el controller que queramos enviar el email, importamos lo siguiente:

const fs = require(“fs”);
const path = require(“path”);
const transporter = require(“../common/nodemailer”)*

*Recuerda importar desde la ruta donde hayas creado el arhivo nodemailer.js

Paso 5

En este paso, no situamos en el controller donde queremos que se envíe el email.
Tendremos que buscar el archivo html dentro de nuestro proyecto.

 //Para coger la ruta completa de donde estamos. 
    var fullpath = __dirname
//En este caso, de la ruta borro controller porque era en el directorio que mi controller se encuentra.
    let base_url = fullpath.replace(“\\controller”,””);
//Busco el archivo aplicandole la ruta base completa + donde se encuentra el archivo html en el proyecto.
    let emailTemplatesHtml = fs.readFileSync(path.join(base_url+”/common/mail_templates/index.html”)).toString();
 

Paso 6

En este paso, vamos a modificar nuestro archivo index.html, tan sencillo como usar emailTemplatesHtml e ir modificándolo.

let message = emailTemplatesHtml.replace(“##MAIL##”, EL_VALOR_QUE_QUIERAS ASIGNAR);
message = message.replace(“##FULLNAME##”, EL_VALOR_QUE_QUIERAS ASIGNAR2);

Paso 7

Creamos una variable que contenga algunos parámetros para enviar el email.

let mailOptions = {
      from: “Ejemplo <ejemplo@ejemplo.com>”,
      to: “receptor@receptor”,
      subject: “Esto es un email de ejemplo”,
      //Aquí en el campo html, es donde instertamos la variable message del paso anterior.
      html: message,
    };

Paso 8

Ahora solo nos queda llamar a la función de transporter para enviar el email, que seria de la siguiente manera:

transporter.sendMail(mailOptions, function (error, info) {
      if (error) {
        console.log(error);
      } else {
        console.log(“Email sent: ” + info.response);
        res.status(204).json(“DONE”);
      }
    });
 
Y voilá, ya habremos enviado el email.

Ejemplos

Para terminar, os dejo un zip con los 3 archivos usados para que podáis echarle un ojo. Descargar aquí.

Dejar un comentario

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