Socket
Socket
Sign inDemoInstall

eml-parser

Package Overview
Dependencies
112
Maintainers
1
Versions
18
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    eml-parser

Parse .eml and .msg files or convert to pdf, html, jpeg or png format. Extract headers and attachments from .eml and msg files.


Version published
Weekly downloads
4.2K
increased by12.64%
Maintainers
1
Install size
5.39 MB
Created
Weekly downloads
 

Readme

Source

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 in highlightKeywords 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);
})
getMessageHeaders
getMessageBodyHtml
getMessageAsHtml
convertMessageToStream
convertMessageToBuffer
getMessageAttachments

Keywords

FAQs

Last updated on 30 Aug 2023

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc