@srsl/tools
Version:
JavaScript tools for common interfaces
126 lines (108 loc) • 4.34 kB
JavaScript
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