From 291b92e53d9f488d9b51044844ca15e78112adfa Mon Sep 17 00:00:00 2001 From: Kat Lim Ruiz <1009107+katlimruiz@users.noreply.github.com> Date: Mon, 1 Apr 2024 15:42:44 +0000 Subject: [PATCH] emit a new headerLines event to gain access the raw headers --- lib/mail-parser.js | 4 ++++ test/mail-parser-test.js | 27 +++++++++++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/lib/mail-parser.js b/lib/mail-parser.js index ff5ea73..1c69efa 100644 --- a/lib/mail-parser.js +++ b/lib/mail-parser.js @@ -797,6 +797,10 @@ class MailParser extends Transform { } }); this.emit('headers', node.headers); + + if (node.headerLines) { + this.emit('headerLines', node.headerLines); + } } if (data.contentType === 'message/rfc822' && data.messageNode) { diff --git a/test/mail-parser-test.js b/test/mail-parser-test.js index 6043b2c..209e338 100644 --- a/test/mail-parser-test.js +++ b/test/mail-parser-test.js @@ -141,6 +141,33 @@ exports['General tests'] = { }); }, + 'HeaderLines event': test => { + let encodedText = 'X-Test: =?UTF-8?Q?=C3=95=C3=84?= =?UTF-8?Q?=C3=96=C3=9C?=\r\n' + 'Subject: ABCDEF', + mail = Buffer.from(encodedText, 'utf-8'); + + test.expect(3); + let mailparser = new MailParser(); + + mailparser.on('headerLines', headerLines => { + test.equal(!!headerLines.find(({ line }) => line === 'X-Test: =?UTF-8?Q?=C3=95=C3=84?= =?UTF-8?Q?=C3=96=C3=9C?='), true); + test.equal(!!headerLines.find(({ line }) => line === 'Subject: ABCDEF'), true); + }); + + mailparser.end(mail); + mailparser.on('data', data => { + if (data && data.release) { + data.content.on('data', () => false); + data.content.on('end', () => false); + data.release(); + } + }); + + mailparser.on('end', () => { + test.ok(1, 'Parsing ended'); + test.done(); + }); + }, + 'No priority': test => { let encodedText = 'Content-type: text/plain; charset=utf-8\r\nSubject: ÕÄÖÜ\n\r\n1234', mail = Buffer.from(encodedText, 'utf-8');