Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

send emails using mustache templates #69

Merged
merged 1 commit into from
Nov 24, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,9 @@ DB_SCHEMA=nodetello
# smtp config
SMTP_HOST="smtp.your-server.com"
SMTP_PORT=587
SMTP_USERNAME="your-email@your-server.com.br"
SMTP_USERNAME="your-email@your-server.com"
SMTP_PASSWORD="YourPassword"
SMTP_FROM="<Your name 👻 <your-email@your-server.com.br>"
SMTP_FROM="<Your name 👻 <your-email@your-server.com>"

# firebase config
# how to get your config: https://firebase.google.com/docs/admin/setup
Expand Down
8 changes: 6 additions & 2 deletions src/api/sample/sampleRest.js
Original file line number Diff line number Diff line change
Expand Up @@ -134,9 +134,13 @@ sampleRest.get('/httpRequest', (req, res) => {

sampleRest.get('/sendMail', (req, res) => {
const emailData = {
to: ['recipient1@server.com', 'recipient2@server.com'],
to: ['stanleygomesdasilva@gmail.com', 'stanleygomess@hotmail.com'],
subject: 'Hello ✔✔✔',
html: '<b>Hello world ✔✔✔</b>'
template: 'helloWorld',
templateContainer: 'container',
params: {
name: 'Fulano'
}
}

smtpUtils.sendMail(emailData).then((response) => {
Expand Down
3 changes: 3 additions & 0 deletions src/templates/smtp/container.html
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,8 @@
</head>
<body>

<h1>Template</h1>
@childTemplate

</body>
</html>
1 change: 1 addition & 0 deletions src/templates/smtp/helloWorld.html
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<b>Hello world ✔✔✔ :name</b>
48 changes: 24 additions & 24 deletions src/utils/database.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,9 @@ const builder = () => {
} else if (config.database.client === 'mysql') {
resolve(k)
}
} catch (err) {
loggerUtils.error(err.stack)
reject(err)
} catch (error) {
loggerUtils.error(error.stack)
reject(error)
}
})
}
Expand All @@ -43,9 +43,9 @@ const executeQuery = (query, params = []) => {
.then(rows => {
const resp = rows && rows.length ? rows[0] : null
resolve(resp)
}).catch(err => {
loggerUtils.error(err.stack)
reject(err)
}).catch(error => {
loggerUtils.error(error.stack)
reject(error)
})
})
})
Expand Down Expand Up @@ -80,9 +80,9 @@ const basicCount = (tableName, conditions = {}, fields = '*') => {
.then(rows => {
const resp = rows && rows.length ? rows[0] : null
resolve(resp)
}).catch(err => {
loggerUtils.error(err.stack)
reject(err)
}).catch(error => {
loggerUtils.error(error.stack)
reject(error)
})
}).catch(error => reject(error))
})
Expand All @@ -103,9 +103,9 @@ const basicSelect = (tableName, conditions = {}, fields = '*') => {
.then(rows => {
const resp = rows && rows.length ? rows : null
resolve(resp)
}).catch(err => {
loggerUtils.error(err.stack)
reject(err)
}).catch(error => {
loggerUtils.error(error.stack)
reject(error)
})
}).catch(error => reject(error))
})
Expand Down Expand Up @@ -142,9 +142,9 @@ const basicPaginate = (tableName, conditions = {}, fields = '*', limit = 15, off
.then(rows => {
paginateResults.results = (rows && rows.length ? rows : null)
resolve(paginateResults)
}).catch(err => {
loggerUtils.error(err.stack)
reject(err)
}).catch(error => {
loggerUtils.error(error.stack)
reject(error)
})
}).catch(error => reject(error))
}).catch(error => reject(error))
Expand Down Expand Up @@ -177,9 +177,9 @@ const basicUpdate = (tableName, conditions, fields, returning) => {
.update(fields, returning)
.then(rowsUpdated => {
resolve(rowsUpdated)
}).catch(err => {
loggerUtils.error(err.stack)
reject(err)
}).catch(error => {
loggerUtils.error(error.stack)
reject(error)
})
}).catch(error => reject(error))
})
Expand All @@ -206,9 +206,9 @@ const basicDelete = (tableName, conditions) => {
.del()
.then(rowsUpdated => {
resolve(rowsUpdated)
}).catch(err => {
loggerUtils.error(err.stack)
reject(err)
}).catch(error => {
loggerUtils.error(error.stack)
reject(error)
})
}).catch(error => reject(error))
})
Expand All @@ -234,9 +234,9 @@ const basicInsert = (tableName, fields, returning = []) => {
.insert(fields)
.then(rowsInserted => {
resolve(rowsInserted)
}).catch(err => {
loggerUtils.error(err.stack)
reject(err)
}).catch(error => {
loggerUtils.error(error.stack)
reject(error)
})
}).catch(error => reject(error))
})
Expand Down
6 changes: 5 additions & 1 deletion src/utils/mustache.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ const path = require('path')
const Mustache = require('mustache')
const config = require('../config')
const fileUtils = require('./file')
const loggerUtils = require('./logger')
const showCompiledTemplateDefault = config.template.showCompiled

const openFile = (templateConfig, name) => {
Expand Down Expand Up @@ -73,7 +74,10 @@ const getTemplate = (name, params = {}, templateConfig) => {
}

resolve(response)
}).catch(error => reject(error))
}).catch(error => {
loggerUtils.error(error.stack)
reject(error)
})
})
}

Expand Down
29 changes: 21 additions & 8 deletions src/utils/smtp.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
const config = require('../config')
const nodemailer = require('nodemailer')
const mustacheUtils = require('./mustache')
const loggerUtils = require('./logger')

const validateParameters = (emailData) => {
let errorMessage = null
Expand All @@ -11,8 +13,8 @@ const validateParameters = (emailData) => {
if (!emailData.subject) {
errorMessage = 'Invalid mail subject'
}
if (!emailData.html) {
errorMessage = 'Invalid mail html'
if (!emailData.template) {
errorMessage = 'Invalid mail template'
}
} else {
errorMessage = 'Invalid mail parameters'
Expand All @@ -28,6 +30,19 @@ const validateParameters = (emailData) => {
}
}

const transpile = (emailData, transporter) => {
return new Promise((resolve, reject) => {
mustacheUtils.getTemplateSMTP(emailData.templateContainer, emailData.params).then(template => {
mustacheUtils.getTemplateSMTP(emailData.template, emailData.params).then(templateChild => {
const templateContainerRendered = template.rendered.replace('@childTemplate', templateChild.rendered)
emailData.html = templateContainerRendered
send(emailData, transporter).then(response => resolve(response))
}).catch(error => reject(error))
send(emailData, transporter).then(response => resolve(response))
}).catch(error => reject(error))
})
}

const send = (emailData, transporter) => {
return new Promise((resolve, reject) => {
emailData = Object.assign(emailData, config.smtp.send)
Expand All @@ -38,9 +53,7 @@ const send = (emailData, transporter) => {
messageUrl: nodemailer.getTestMessageUrl(info)
}
resolve(response)
}).catch((error) => {
reject(error)
})
}).catch(error => reject(error))
})
}

Expand All @@ -56,16 +69,16 @@ const sendMail = (emailData) => {
emailData = Object.assign(emailData, params)
const transporter = nodemailer.createTransport(config.smtp)

send(emailData, transporter).then((resolved) => {
transpile(emailData, transporter).then((resolved) => {
const response = {
emailData: emailData,
response: resolved
}

resolve(response)
}).catch((error) => {
const errorMessage = new Error(error)
reject(errorMessage)
loggerUtils.error(error.stack)
reject(error)
})
})
}
Expand Down