Skip to content

Commit

Permalink
Merge pull request #69 from nodetello/feature/smtp_send_template
Browse files Browse the repository at this point in the history
send emails using mustache templates
  • Loading branch information
stanleygomes authored Nov 24, 2019
2 parents 6f62bab + 1c2d33c commit cc4baad
Show file tree
Hide file tree
Showing 7 changed files with 62 additions and 37 deletions.
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

0 comments on commit cc4baad

Please sign in to comment.