/* ==== 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')); md.use(require('markdown-it-deflist')); var defaultRender = md.renderer.rules.image; md.renderer.rules.image = function(tokens, idx, options, env, self) { var token = tokens[idx], aIndex = token.attrIndex('src'); newsletter.temp.attachments.push({ filename: token.attrs[aIndex][1], path: '', cid: token.attrs[aIndex][1] }); token.attrs[aIndex][1] = 'cid:'+token.attrs[aIndex][1]; return defaultRender(tokens, idx, options, env, self); }; /* ==== NEWSLETTER ========================================================== */ // our custom build step newsletter.build = function(file, options, cb) { // clear potential old newsletter newsletter.temp = { attachments: [] }; // 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()); // at this point attachments should be populated with all pertinent attachments - let's modify it to make all paths relative to this file's directory var path = file; file = file.replace(/\.[^/.]+$/, ""); for (var i = 0; i < newsletter.temp.attachments.length; i++) { newsletter.temp.attachments[i].path = file+'/'+newsletter.temp.attachments[i].filename; } // 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;