polymail/newsletters/default/index.js

45 lines
1.7 KiB
JavaScript

/* ==== MODULE ============================================================== */
var polymail = require.main.exports;
var newsletter = new polymail.Newsletter(require('./config.json'));
/* ==== REQUIRES ============================================================ */
var fs = require('fs');
var nodemailer = require('nodemailer');
var smtpPool = require('nodemailer-smtp-pool');
var doT = require('dot');
var md = require('markdown-it')({
typographer: true
});
md.use(require('markdown-it-header-sections'));
/* ==== NEWSLETTER ========================================================== */
// our custom build step
newsletter.build = function(file, options, cb) {
// clear potential old newsletter
newsletter.temp = {};
// merge passed options with newsletter defaults
var opts = polymail.mergeObjects(newsletter.options, options);
// read our provided content file
var content = fs.readFileSync(file);
opts.content = content;
// read our markdown template and build it
var md_source = fs.readFileSync(__dirname+'/templates/md.dot');
var md_template = doT.template(md_source);
var md_result = md_template(opts);
// convert our content md into html
opts.content = md.render(opts.content.toString());
// read our html template and build it
var html_source = fs.readFileSync(__dirname+'/templates/html.dot');
var html_template = doT.template(html_source);
var html_result = html_template(opts);
// set our temporary mail objects
newsletter.temp.subject = opts.heading + (opts.title ? ' '+opts.title : '');
newsletter.temp.text = md_result;
newsletter.temp.html = html_result;
};
// create our transport
newsletter.transport = nodemailer.createTransport(smtpPool(newsletter.transport_options));
module.exports = newsletter;