44 lines
1.1 KiB
JavaScript
44 lines
1.1 KiB
JavaScript
'use strict';
|
||
|
||
if (process.argv.length < 3) {
|
||
process.stdout.write('USAGE: nodejs emailtojson.js filename');
|
||
process.stdout.write('Example: nodejs emailtojson.js emailfile.eml');
|
||
return;
|
||
}
|
||
|
||
const fs = require('fs');
|
||
const { MailParser } = require("mailparser");
|
||
const mailpath = process.argv[2];
|
||
|
||
let parser = new MailParser();
|
||
let input = fs.createReadStream(mailpath);
|
||
let mailobj = {
|
||
attachments: [],
|
||
text: {}
|
||
};
|
||
|
||
parser.on('headers', headers => {
|
||
let headerObj = {};
|
||
for (let [k, v] of headers) {
|
||
// We don’t escape the key '__proto__'
|
||
// which can cause problems on older engines
|
||
headerObj[k] = v;
|
||
}
|
||
|
||
mailobj.headers = headerObj;
|
||
});
|
||
|
||
parser.on('data', data => {
|
||
if (data.type === 'attachment') {
|
||
mailobj.attachments.push(data);
|
||
data.content.on('readable', () => data.content.read());
|
||
data.content.on('end', () => data.release());
|
||
} else {
|
||
mailobj.text = data;
|
||
}
|
||
});
|
||
|
||
parser.on('end', () => {
|
||
process.stdout.write(JSON.stringify(mailobj, (k, v) => (k === 'content' || k === 'release' ? undefined : v), 3));
|
||
});
|
||
input.pipe(parser); |