postmailer
Version:
HTTP POST -> SMTP proxy, as Express middleware
53 lines (46 loc) • 1.58 kB
JavaScript
var fse = require('fs-extra'), path = require('path');
var mime = require('mime');
function saveToLocalFile(hub, options) {
options = options || options;
if (typeof options === 'string') options = {dir: options};
var postDir = options.dir || 'posts/';
hub.handle('mail', function (mail, next) {
var hub = this;
var fromAddr = mail.headers['from'];
if (!fromAddr) return;
fromAddr = fromAddr.replace(/.*</, '').replace(/>.*/, '');
var received = (new Date()).toISOString().substring(0, 19).replace(/[^a-z0-9]/ig, '-');
var filename = received + ' ' + encodeURIComponent(fromAddr);
if (mail.filename) {
filename += mail.filename.replace(/[^a-z0-9\-\_\ \(\)\[\]\.]/i, '_');
} else {
filename += '.' + mime.extension(mail.headers['content-type'] || 'text/plain');
}
filename = path.join(postDir, filename);
hub.emit('log', 'saving to ' + filename);
if (typeof mail.message === 'string' || Buffer.isBuffer(mail.message)) {
fse.outputFile(filename, mail.message, function (error) {
if (error) {
hub.emit('error', error);
return next();
}
// Replace stream with file stream
mail.message = fse.createReadStream(filename);
next();
});
} else {
var stream = fse.createOutputStream(filename);
mail.message.pipe(stream);
stream.on('error', function (error) {
hub.emit('error', error);
next();
});
stream.on('close', function () {
// Replace stream with file stream
mail.message = fse.createReadStream(filename);
next();
});
}
});
}
module.exports = saveToLocalFile;