Saltar al contenido

Pasar variable a plantilla html en nodemailer

Tenemos la mejor información que hallamos en todo internet. Nosotros queremos que te resulte de mucha utilidad y si quieres compartir cualquier detalle que nos pueda ayudar a perfeccionar nuestra información puedes hacerlo..

Solución:

Lo que puedes hacer es leer el archivo HTML usando fs módulo en el nodo y luego reemplace los elementos que desea cambiar en el html string utilizando handlebars

var nodemailer = require('nodemailer');
var smtpTransport = require('nodemailer-smtp-transport');
var handlebars = require('handlebars');
var fs = require('fs');

var readHTMLFile = function(path, callback) 
    fs.readFile(path, encoding: 'utf-8', function (err, html) 
        if (err) 
            throw err;
            callback(err);
        
        else 
            callback(null, html);
        
    );
;

smtpTransport = nodemailer.createTransport(smtpTransport(
    host: mailConfig.host,
    secure: mailConfig.secure,
    port: mailConfig.port,
    auth: 
        user: mailConfig.auth.user,
        pass: mailConfig.auth.pass
    
));

readHTMLFile(__dirname + 'app/public/pages/emailWithPDF.html', function(err, html) 
    var template = handlebars.compile(html);
    var replacements = 
         username: "John Doe"
    ;
    var htmlToSend = template(replacements);
    var mailOptions = 
        from: '[email protected]',
        to : '[email protected]',
        subject : 'test subject',
        html : htmlToSend
     ;
    smtpTransport.sendMail(mailOptions, function (error, response) 
        if (error) 
            console.log(error);
            callback(error);
        
    );
);

Lo uso en todos mis proyectos. más limpio, actualizado y comprensible. el infierno de devolución de llamada no existe.
enviarCorreo.ts El archivo html se lee con handlebar, coloca las variables relevantes en el contenido y envía.

import * as nodemailer from 'nodemailer';
import * as handlebars from 'handlebars';
import * as fs from 'fs';
import * as path from 'path';

export async function sendEmail(email: string, subject: string, url: string) 
  const filePath = path.join(__dirname, '../emails/password-reset.html');
  const source = fs.readFileSync(filePath, 'utf-8').toString();
  const template = handlebars.compile(source);
  const replacements = 
    username: "Umut YEREBAKMAZ"
  ;
  const htmlToSend = template(replacements);
  const transporter = nodemailer.createTransport(
    host: "smtp.mailtrap.io",
    port: 2525, // 587
    secure: false,
    auth: 
      user: "fg7f6g7g67",
      pass: "asds7ds7d6"
    
  );
  const mailOptions = 
    from: '"[email protected]" <[email protected]>',
    to: email,
    subject: subject,
    text: url,
    html: htmlToSend
  ;
  const info = await transporter.sendMail(mailOptions);
  console.log("Message sent: %s", info.messageId);
  console.log("Preview URL: %s", "https://mailtrap.io/inboxes/test/messages/");


Si estás usando Nodemailer 2.0.0 o superior, revisa esta documentación: https://community.nodemailer.com/2-0-0-beta/templating/ Allí explican cómo hacer uso de renderizado externo con plantillas como esa :

// external renderer
var EmailTemplate = require('email-templates').EmailTemplate;
var send = transporter.templateSender(new EmailTemplate('template/directory'));

También dan este ejemplo:

// create template based sender function
// assumes text.ext and html.ext in template/directory
var sendPwdReminder = transporter.templateSender(new EmailTemplate('template/directory'), 
    from: '[email protected]',
);

donde ves cómo pasar variables.

Necesitarás el email-templates módulo: https://github.com/crocodilejs/node-email-templates y un motor de plantillas de su elección.

También en la documentación de email-templates encontrará cómo hacer su estructura de archivos para que se puedan encontrar sus plantillas:

html ext (requerido) – para formato html de correo electrónico

texto. ext (opcional): para el formato de texto del estilo de correo electrónico.

ext(opcional): estilos para el asunto en formato html.

ext(opcional) – para el asunto del correo electrónico

Consulte los motores de plantillas admitidos para conocer las posibles extensiones del motor de plantillas (p. ej., .ejs, .jade, .nunjucks) para usar con el valor de ext anterior.

Puedes prefix cualquier nombre de archivo con cualquier cosa que desee para ayudarlo a identificar los archivos más fácilmente en su IDE. El único requisito es que el nombre del archivo contenga html, texto, estilo y asunto. respectivamente.

Nos puedes confirmar nuestra faena poniendo un comentario o dejando una valoración te lo agradecemos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

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