68 lines
2.1 KiB
JavaScript
68 lines
2.1 KiB
JavaScript
'use strict';
|
|
|
|
angular.module('ffffng')
|
|
.service('MailTemplateService', function (
|
|
UrlBuilder,
|
|
config,
|
|
_,
|
|
async,
|
|
deepExtend,
|
|
fs,
|
|
Logger
|
|
) {
|
|
var templateBasePath = __dirname + '/../mailTemplates';
|
|
|
|
return {
|
|
configureTransporter: function (transporter) {
|
|
var htmlToText = require('nodemailer-html-to-text').htmlToText;
|
|
transporter.use('compile', htmlToText({
|
|
tables: ['.table']
|
|
}));
|
|
},
|
|
|
|
render: function (mailOptions, callback) {
|
|
var templatePathPrefix = templateBasePath + '/' + mailOptions.email
|
|
|
|
async.parallel({
|
|
subject: _.partial(fs.readFile, templatePathPrefix + '.subject.txt'),
|
|
body: _.partial(fs.readFile, templatePathPrefix + '.body.html')
|
|
},
|
|
function (err, templates) {
|
|
if (err) {
|
|
return callback(err);
|
|
}
|
|
|
|
var data = deepExtend(
|
|
{},
|
|
mailOptions.data,
|
|
{
|
|
community: config.client.community,
|
|
editNodeUrl: UrlBuilder.editNodeUrl()
|
|
}
|
|
);
|
|
|
|
function render(field) {
|
|
return _.template(templates[field].toString())(data);
|
|
}
|
|
|
|
var renderedTemplate;
|
|
try {
|
|
renderedTemplate = {
|
|
subject: _.trim(render('subject')),
|
|
body: render('body')
|
|
};
|
|
}
|
|
catch (error) {
|
|
Logger
|
|
.tag('mail', 'template')
|
|
.error('Error rendering template for mail[' + mailOptions.id + ']:', error);
|
|
return callback(error);
|
|
}
|
|
|
|
callback(null, renderedTemplate);
|
|
}
|
|
);
|
|
}
|
|
};
|
|
});
|