let fs = require('fs'); let bodyParser = require('body-parser'); let outbound; let getTemplates = require('./templater'); let errorSender = require('./errorSender'); exports.register = function() { outbound = this.haraka_require('./outbound'); this.register_hook('hook_init_http', function(next, server) { server.http.app.use('/webSend', setupRoutes(server.http.express.Router())); next(); }); } function setupRoutes(app) { app.use(bodyParser.json()); app.use(errorSender); app.post('/template', function(req, res) { if(!req.body) { return res.sendError(400, "No body provided."); } let {to, from, template, headers} = req.body; if(!template) { return res.sendError(400, "No template name provided."); } return getTemplates.then(function(templates) { let emailText = `From: ${from}\nTo: ${to}`; if(headers) { headers.forEach(function(header) { emailText += `\n${header}`; }); } try { let [subject, body] = `\n\n${templates[template](req.body)}\n`; emailText += `\nSubject: ${subject}\n\n${body}`; } catch (err) { console.error("Error building email from template: ", err); res.sendError(err.httpStatus || 400, err.userMessage || "Error parsing template"); } outbound.send_email(from, to, emailText, function(code, message) { console.log(`Queue mail result code: ${code} msg: ${msg}`); res.type("json").send(JSON.stringigy({ code, message })); }); }).catch(function(err) { console.error("Error loading templates:", err); res.sendError(500, "Server Error"); }); }); return app; }