Initial import
This commit is contained in:
commit
54fa30701e
278 changed files with 37868 additions and 0 deletions
98
lib/mailer.js
Normal file
98
lib/mailer.js
Normal file
|
@ -0,0 +1,98 @@
|
|||
'use strict';
|
||||
|
||||
let log = require('npmlog');
|
||||
|
||||
let nodemailer = require('nodemailer');
|
||||
let settings = require('./models/settings');
|
||||
let Handlebars = require('handlebars');
|
||||
let fs = require('fs');
|
||||
let path = require('path');
|
||||
let templates = new Map();
|
||||
|
||||
module.exports.transport = false;
|
||||
|
||||
|
||||
module.exports.update = () => {
|
||||
createMailer(() => false);
|
||||
};
|
||||
|
||||
module.exports.getMailer = callback => {
|
||||
if (!module.exports.transport) {
|
||||
return createMailer(callback);
|
||||
}
|
||||
callback(null, module.exports.transport);
|
||||
};
|
||||
|
||||
module.exports.sendMail = (mail, template, callback) => {
|
||||
if (!callback && typeof template === 'function') {
|
||||
callback = template;
|
||||
template = false;
|
||||
}
|
||||
|
||||
if (!module.exports.transport) {
|
||||
return createMailer(err => {
|
||||
if (err) {
|
||||
return callback(err);
|
||||
}
|
||||
return module.exports.sendMail(mail, template, callback);
|
||||
});
|
||||
}
|
||||
|
||||
if (!template || !template.template) {
|
||||
return module.exports.transport.sendMail(mail, callback);
|
||||
}
|
||||
|
||||
getTemplate(template.template, (err, renderer) => {
|
||||
if (err) {
|
||||
return callback(err);
|
||||
}
|
||||
mail.html = renderer(template.data || {});
|
||||
module.exports.transport.sendMail(mail, callback);
|
||||
});
|
||||
|
||||
};
|
||||
|
||||
function getTemplate(template, callback) {
|
||||
if (templates.has(template)) {
|
||||
return callback(null, templates.get(template));
|
||||
}
|
||||
fs.readFile(path.join(__dirname, '..', 'views', template), 'utf-8', (err, source) => {
|
||||
if (err) {
|
||||
return callback(err);
|
||||
}
|
||||
let renderer = Handlebars.compile(source);
|
||||
templates.set(template, renderer);
|
||||
return callback(null, renderer);
|
||||
});
|
||||
}
|
||||
|
||||
function createMailer(callback) {
|
||||
settings.list(['smtpHostname', 'smtpPort', 'smtpEncryption', 'smtpUser', 'smtpPass', 'smtpLog', 'smtpMaxConnections', 'smtpMaxMessages'], (err, configItems) => {
|
||||
if (err) {
|
||||
return callback(err);
|
||||
}
|
||||
module.exports.transport = nodemailer.createTransport({
|
||||
pool: true,
|
||||
host: configItems.smtpHostname,
|
||||
port: Number(configItems.smtpPort) || false,
|
||||
secure: configItems.smtpEncryption === 'TLS',
|
||||
ignoreTLS: configItems.smtpEncryption === 'NONE',
|
||||
auth: {
|
||||
user: configItems.smtpUser,
|
||||
pass: configItems.smtpPass
|
||||
},
|
||||
debug: !!configItems.smtpLog,
|
||||
logger: !configItems.smtpLog ? false : {
|
||||
debug: log.info.bind(log, 'Mail'),
|
||||
info: log.verbose.bind(log, 'Mail'),
|
||||
error: log.info.bind(log, 'Mail')
|
||||
},
|
||||
maxConnections: Number(configItems.smtpMaxConnections),
|
||||
maxMessages: Number(configItems.smtpMaxMessages)
|
||||
});
|
||||
|
||||
return callback(null, module.exports.transport);
|
||||
});
|
||||
}
|
||||
|
||||
module.exports.getTemplate = getTemplate;
|
Loading…
Add table
Add a link
Reference in a new issue