/ mail / sendgrid.js
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;