day 11
This commit is contained in:
Executable
+99
@@ -0,0 +1,99 @@
|
||||
const nodemailer = require('nodemailer');
|
||||
|
||||
const db = require('../models');
|
||||
|
||||
module.exports = {
|
||||
/** @private */
|
||||
transport: null,
|
||||
/** @private */
|
||||
from: null,
|
||||
/** @private */
|
||||
to: null,
|
||||
/**
|
||||
* Nodemailer initializer
|
||||
* @name mailService.initialize
|
||||
* @param {{hostname: String, port: Number, username: String, password: String, from: String, to: String}} config Nodemailer configuration
|
||||
* @returns {Void}
|
||||
*/
|
||||
initialize: function (config) {
|
||||
this.transport = nodemailer.createTransport({
|
||||
host: config.hostname,
|
||||
port: config.port,
|
||||
auth: {
|
||||
user: config.username,
|
||||
pass: config.password,
|
||||
},
|
||||
});
|
||||
|
||||
this.from = config.from;
|
||||
this.to = config.to;
|
||||
},
|
||||
/**
|
||||
* Get email template from database
|
||||
* @name mailService.template
|
||||
* @param {String} slug email template slug
|
||||
* @reject {Error}
|
||||
* @returns {Promise.<{body: String, subject: String}>} email template
|
||||
*/
|
||||
template: function (slug) {
|
||||
return new Promise(function (resolve, reject) {
|
||||
db.email
|
||||
.findOne({ where: { slug } })
|
||||
.then((response) => {
|
||||
if (!response) {
|
||||
return reject(`TEMPLATE_NOT_FOUND`);
|
||||
} else resolve(response);
|
||||
})
|
||||
.catch((error) => {
|
||||
reject(error);
|
||||
});
|
||||
});
|
||||
},
|
||||
/**
|
||||
* Inject values into email template
|
||||
* @name mailService.inject
|
||||
* @param {{body: String, subject: String}} template email template
|
||||
* @param {Object.<string, string>} payload template values
|
||||
* @returns {{from: String, to: String, subject: String, text: String}} Value injected email template
|
||||
*/
|
||||
inject: function (template, payload) {
|
||||
let mailBody = template.body;
|
||||
let mailSubject = template.subject;
|
||||
|
||||
for (const key in payload) {
|
||||
const value = payload[key];
|
||||
mailBody = mailBody.replace(new RegExp('{{{' + key + '}}}', 'g'), value);
|
||||
}
|
||||
|
||||
for (const key in payload) {
|
||||
const value = payload[key];
|
||||
mailSubject = mailSubject.replace(
|
||||
new RegExp('{{{' + key + '}}}', 'g'),
|
||||
value,
|
||||
);
|
||||
}
|
||||
|
||||
return {
|
||||
from: this.from,
|
||||
to: this.to,
|
||||
subject: mailSubject,
|
||||
html: mailBody,
|
||||
};
|
||||
},
|
||||
/**
|
||||
* Send email
|
||||
* @name mailService.send
|
||||
* @param {nodemailer.SendMailOptions} template email template
|
||||
* @reject {Error} send mail error
|
||||
* @returns {Promise.<nodemailer.SentMessageInfo>} send mail info
|
||||
*/
|
||||
send: function (template) {
|
||||
let self = this;
|
||||
return new Promise(function (resolve, reject) {
|
||||
self.transport
|
||||
.sendMail(template)
|
||||
.then((response) => resolve(response))
|
||||
.catch((error) => reject(error));
|
||||
});
|
||||
},
|
||||
};
|
||||
Reference in New Issue
Block a user