eml-parser
v2.0.3
Published
Parse .eml and .msg files or convert to pdf, html, jpeg or png format. Extract headers and attachments from .eml and msg files.
Downloads
23,037
Maintainers
Readme
Eml-Parser
Parse .eml files or convert to pdf, html, jpeg or png format. Extract headers and attachments from .eml files.
installation
npm i eml-parser --save
Quick Start
const EmlParser = require('eml-parser');
const fs = require('fs');
let emailFile = fs.createReadStream('./test.eml'); // or test.msg
.eml
new EmlParser(emailFile).convertEmailToStream('pdf')
.then(stream => {
stream.pipe(fs.createWriteStream(emailFile.path + '.pdf'));
})
.catch(err => {
console.log(err);
})
.msg
new EmlParser(emailFile).convertMessageToStream('pdf')
.then(stream => {
stream.pipe(fs.createWriteStream(emailFile.path + '.pdf'));
})
.catch(err => {
console.log(err);
})
Change Log
1.2.2
- added options
{highlightKeywords: String[], highlightCaseSensitive: true| undefined}
to highlight keywords provided inhighlightKeywords
option,highlightCaseSensitive: true
will do case sensitive match to highlight keywords. Works with all functions which return email content in any format (html, pdf, image, etc).
2.0.0
- added .msg parser. Parsed results do not have the same fields, check result object below.
Reference
Class: EmlParser
new EmlParser(fs.createReadStream('test.eml'))
constructor takes a Read Stream as input
Methods for .eml file
parseEml
takes 2 optional arguments, returns the parsed eml object.
{ignoreEmbedded: true}
, use this to ignore embedded files from appearing under attachments{highlightKeywords: String[], highlightCaseSensitive: true}
, (e.g: {highlightKeywords: ["foo", "bar"], highlightCaseSensitive: true}) use this to highlight certain keywords in the email's html content.highlightCaseSensitive: true
will highlight keywords which match the case, defaults to false.
new EmlParser(fs.createReadStream('test.eml'))
.parseEml(options?)
.then(result => {
// properties in result object:
// {
// "attachments": [],
// "headers": {},
// "headerLines": [],
// "html": "",
// "text": "",
// "textAsHtml": "",
// "subject": "",
// "references": "",
// "date": "",
// "to": {},
// "from": {},
// "cc": {},
// "messageId": "",
// "inReplyTo": ""
// }
console.log(result);
})
.catch(err => {
console.log(err);
})
getEmailHeaders
new EmlParser(fs.createReadStream('test.eml'))
.getEmailHeaders()
.then(headers => {
//properties of headers object
//{
// subject: result.subject,
// from: result.from.value,
// to: result.to.value,
// cc: result.cc.value,
// date: result.date,
// inReplyTo: result.inReplyTo,
// messageId: result.messageId
//}
console.log(headers)
})
.catch(err => {
console.log(err);
})
getEmailBodyHtml
takes 1 optional argument, returns email content as a html string (without headers like subject, from, etc).
{highlightKeywords: String[], highlightCaseSensitive: true}
, (e.g: {highlightKeywords: ["foo", "bar"], highlightCaseSensitive: true}) use this to highlight certain keywords in the email's html content.highlightCaseSensitive: true
will highlight keywords which match the case, defaults to false.
new EmlParser(fs.createReadStream('test.eml'))
.getEmailBodyHtml()
.then(htmlString => {
fs.writeFileSync('abc.html',htmlString) ;
})
.catch(err => {
console.log(err);
})
getEmailAsHtml
takes 1 optional argument, returns whole email as a html string (including headers like subject, from, etc).
{highlightKeywords: String[], highlightCaseSensitive: true}
, (e.g: {highlightKeywords: ["foo", "bar"], highlightCaseSensitive: true}) use this to highlight certain keywords in the email's html content.highlightCaseSensitive: true
will highlight keywords which match the case, defaults to false.
new EmlParser(fs.createReadStream('test.eml'))
.getEmailAsHtml()
.then(htmlString => {
fs.writeFileSync('abc.html',htmlString) ;
})
.catch(err => {
console.log(err);
})
convertEmailToStream
takes 4 optional arguments, returns a stream which can be piped to a Write Stream to write to a file.
type:'pdf'|'jpeg'|'png'
, defaults to: 'pdf'orientation:'potrait'|'landscape'
, defaults to: 'landscape'format:'A3'|'A4'|'A5'|'Legal'|'Letter'|'Tabloid'
{highlightKeywords: String[], highlightCaseSensitive: true}
, (e.g: {highlightKeywords: ["foo", "bar"], highlightCaseSensitive: true}) use this to highlight certain keywords in the email's html content.highlightCaseSensitive: true
will highlight keywords which match the case, defaults to false.
let file = fs.createReadStream('test.eml')
new EmlParser(file)
.convertEmailToStream('png')
.then(stream => {
stream.pipe(fs.createWriteStream(file.path + '.png'));
})
.catch(err => {
console.log(err);
})
convertEmailToBuffer
takes 4 optional arguments, returns a buffer object which can be used to write to a file using fs.write.:
type:'pdf'|'jpeg'|'png'
, defaults to: 'pdf'orientation:'potrait'|'landscape'
, defaults to: 'landscape'format:'A3'|'A4'|'A5'|'Legal'|'Letter'|'Tabloid'
{highlightKeywords: String[], highlightCaseSensitive: true}
, (e.g: {highlightKeywords: ["foo", "bar"], highlightCaseSensitive: true}) use this to highlight certain keywords in the email's html content.highlightCaseSensitive: true
will highlight keywords which match the case, defaults to false.
let file = fs.createReadStream('test.eml')
new EmlParser(file)
.convertEmailToBuffer(null, null, null, { highlightKeywords: ['foo', 'bar', 'baz', 'foo baz'], highlightCaseSensitive: true })
.then(buffer => {
//use fs.write to write into file
})
.catch(err => {
console.log(err);
})
getEmailAttachments
takes 1 optional argument, returns the list of attachments:
{ignoreEmbedded: true}
, defaults to false
let file = fs.createReadStream('test.eml')
new EmlParser(file)
.getEmailAttachments(options?) //options: {ignoreEmbedded: true} to ignore embedded files
.then(attachments => {
attachments.forEach(attachment => {
//attachment.content is the buffer object
console.log(attachment.filename, attachment.content);
.then(res => {
console.log(res);
})
.catch(err => {
console.log(err);
})
});
})
.catch(err => {
console.log(err);
})
getEmailEmbeddedFiles
returns the list of only embedded files
let file = fs.createReadStream('test.eml')
new EmlParser(file)
.getEmailEmbeddedFiles()
.then(embeddedFiles => {
embeddedFiles.forEach(embed => {
//embed.content is the buffer object
console.log(embed.filename, embed.content);
.then(res => {
console.log(res);
})
.catch(err => {
console.log(err);
})
});
})
.catch(err => {
console.log(err);
})
Methods for .msg file
parseMsg
new EmlParser(fs.createReadStream('test.msg'))
.parseMsg(options?)
.then(result => {
// properties in result object:
// {
// "dataType": "msg",
// "attachments": [],
// "recipients": [
// {
// "dataType": "recipient",
// "addressType": "",
// "name": "",
// "email": "",
// "smtpAddress": "",
// "recipType": "to"
// },
// {
// "dataType": "recipient",
// "addressType": "",
// "name": "",
// "email": "",
// "smtpAddress": "",
// "recipType": "cc"
// }
// ],
// "messageClass": "",
// "sentRepresentingSmtpAddress": "",
// "lastModifierSMTPAddress": "",
// "inetAcctName": "",
// "subject": "",
// "conversationTopic": "",
// "normalizedSubject": "",
// "body": "",
// "lastModifierName": "",
// "senderSmtpAddress": "",
// "creatorSMTPAddress": "",
// "creationTime": "",
// "lastModificationTime": "",
// "clientSubmitTime": "",
// "messageDeliveryTime": "",
// "messageFlags": 0,
// "internetCodepage": 0,
// "messageLocaleId": 0,
// "messageCodepage": 0,
// "headers": "",
// "senderName": "",
// "senderEmail": "",
// "senderAddressType": "",
// "html": ""
// }
console.log(result);
})
.catch(err => {
console.log(err);
})