sendgrid.js
1 const sgMail = require("@sendgrid/mail"); 2 const Handlebars = require("handlebars"); 3 const { markdownToTxt } = require('markdown-to-txt'); 4 const marked = require('marked'); 5 6 class SendGridMailer { 7 constructor(config, logger) { 8 sgMail.setApiKey(config.SENDGRID_API_KEY); 9 this.logger = logger; 10 } 11 12 send(template, from, data) { 13 const logger = this.logger; 14 return new Promise((resolve, reject) => { 15 const body = Handlebars.compile(template.body)(data); 16 17 const msg = { 18 to: data.email, 19 from, 20 subject: template.subject, 21 text: markdownToTxt(body) 22 } 23 24 if(template.html){ 25 msg.html = marked(body); 26 } 27 28 sgMail.send(msg, (error, result) => { 29 if (error) { 30 if(logger){ 31 logger.error('Sendgrid', error); 32 } 33 reject(error); 34 } else { 35 resolve(result); 36 } 37 }); 38 }); 39 } 40 } 41 42 module.exports = SendGridMailer;