UNPKG

@srsl/tools

Version:

JavaScript tools for common interfaces

126 lines (108 loc) 4.34 kB
const mjml2html = require('mjml') const handlebars = require('handlebars') const path = require('path') const { promisify } = require('bluebird') const sendgrid = require('../../constructors/sendgrid') const { createVerificationCode } = require('../') const readFile = promisify(require('fs').readFile) const readEmailTemplate = (filepath) => { try { return readFile(path.resolve(__dirname, filepath), 'utf8') } catch (e) { console.log('Failed to read template from directory. ', e) return null } } const readHTMLEmailTemplate = filename => readEmailTemplate(`./templates/dist/${filename}.html`) const readTextEmailTemplate = filename => readEmailTemplate(`./templates/dist/${filename}.txt`) /* * sendStaticEmailWithName() * {param} templateName<String> * {param} subjectLine<String> * * Usage: * - ex: sendStaticEmailWithName('purchaseProcessing', { ToAddresses: ['user1@gmail.com'] }, 'noreply@trustedlife.com') * */ // module.exports.sendStaticEmailWithName = async function sendStaticEmailWithName(templateName, Destination, Source, subjectLine = 'Message from TrustedLife') { // const params = Object.assign({}, defaultStaticEmailParams, { Destination }, { Source }) // params.Message.Body.Html.Data = await readHTMLEmailTemplate(templateName) // params.Message.Body.Text.Data = await readTextEmailTemplate(templateName) // params.Message.Subject.Data = subjectLine // console.log(params) // // ses.sendEmail(params).promise().then((data) => { // // console.log(data.MessageId) // // }).catch((err) => { // // console.error(err, err.stack) // // }) // } // module.exports.send = async function send(template, dest, src, data = {}, subject = 'Message from TrustedLife') { // const params = Object.assign( // {}, // defaultStaticEmailParams, // { Destination: dest }, // { Source: src }, // ) // const mjmlTemplate = handlebars.compile(await readHTMLEmailTemplate(template)) // const textTemplate = handlebars.compile(await readTextEmailTemplate(template)) // const mjml = mjmlTemplate(data) // const { html } = mjml2html(mjml) // const text = textTemplate(data) // params.Message.Body.Html.Data = html // params.Message.Body.Text.Data = text // params.Message.Subject.Data = subject // console.log(params) // // ses.sendEmail(params).promise().then((resp) => { // // console.log(resp.MessageId) // // }).catch((err) => { // // console.error(err, err.stack) // // }) // } /* * sendTemplatedEmailWithNameAndData() * {param} templateName<String> * {param} subjectLine<String> * * Usage: * * ex: sendTemplatedEmailWithNameAndData('purchaseConfirmed', { order: "Pioneer's Something or Other", price: 60000 }, { ToAddresses: ['user1@gmail.com'] }, 'noreply@trustedlife.com') * */ async function sendTemplatedEmailWithNameAndData(template, { subject, to, from }, data) { console.log('sendTemplatedEmailWithNameAndData', data) if (!data) { console.error('Parameter "data" is required.') return } try { const htmlTemplate = handlebars.compile(await readHTMLEmailTemplate(template)) const textTemplate = handlebars.compile(await readTextEmailTemplate(template)) const text = textTemplate(data) const html = htmlTemplate(data) // console.log('mjml', mjml) // const { html } = mjml2html(mjml) // console.log('html', html) const message = { to, from: (from || 'noreply@trustedlife.app'), subject, text, html, } console.log(`Sending email (${template}) to: ${to} from: ${message.from}`) return await sendgrid.send(message) } catch(err) { console.error(err) } } const sendEmailVerificationCode = async (to, from, subject = 'Verify your email') => { const CODE_LENGTH = 6 const code = createVerificationCode(CODE_LENGTH) console.log('Verification email code: ', code) const emailresult = await sendTemplatedEmailWithNameAndData('validateEmail', { to, from, subject }, { code }) console.log('emailresult: ', emailresult) return { code } } module.exports.sendTemplatedEmailWithNameAndData = sendTemplatedEmailWithNameAndData module.exports.readHTMLEmailTemplate = readHTMLEmailTemplate module.exports.readTextEmailTemplate = readTextEmailTemplate module.exports.sendEmailVerificationCode = sendEmailVerificationCode