UNPKG

postmailer

Version:

HTTP POST -> SMTP proxy, as Express middleware

53 lines (46 loc) 1.58 kB
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;