haraka-plugin-webmailer/index.js

61 lines
1.8 KiB
JavaScript

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()));
server.http.app.get('/test', (req, res) => res.send("HELLO!"));
console.log(server.http.app._router.stack);
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;
}