Skip to content

Commit 3143b23

Browse files
authored
Merge pull request #1798 from H1ghBre4k3r/fix-folded-message-id-header
Fix parsing of long header bodies
2 parents 39660eb + 0722069 commit 3143b23

File tree

2 files changed

+16
-2
lines changed

2 files changed

+16
-2
lines changed

lib/send-mail.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,8 @@ export async function parseMBox(mbox: string, gentle?: boolean): Promise<IParsed
5353
const parsed = await simpleParser(mbox, options);
5454

5555
for (const entry of parsed.headerLines) {
56-
const valueSet = entry.line.match(/(.*?): *([^]*)$/);
56+
// try to parse header line and consume a leading line break after the colon in folded headers
57+
const valueSet = entry.line.match(/(.*?):(?:\r\n)? *([^]*)$/);
5758
if (!valueSet) {
5859
if (entry.line[entry.line.length - 1] === ":") {
5960
continue;

tests/send-mail.test.ts

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ test("parse mbox", async () => {
6262
{ key: "Content-Transfer-Encoding", value: "8bit" },
6363
{ key: "MIME-Version", value: "1.0" },
6464
{ key: "Header-with-no-value", value: "" },
65-
{ key: "Multiline-header", value: "\r\n new line value" },
65+
{ key: "Multiline-header", value: "new line value" },
6666
]);
6767
expect(parsed.to).toEqual(to);
6868
});
@@ -191,3 +191,16 @@ I can be pursuaded either way.
191191
expect(references[0]).toEqual("pull.986.git.1624559401.gitgitgadget@gmail.com");
192192
expect(references[4]).toEqual("lowerReply@mail.gmail.com");
193193
});
194+
195+
test("Folded Message-ID header is parsed correctly", async () => {
196+
const mbox = `From 566155e00ab72541ff0ac21eab84d087b0e882a5 Mon Sep 17 00:00:00 2001
197+
Message-Id:
198+
<pull.12345.v17.git.gitgitgadget@example.com>
199+
From: Example <mail@example.com>
200+
Date: Fri Sep 21 12:34:56 2001
201+
Subject: [PATCH 0/3] My first Pull Request!
202+
To: reviewer@example.com
203+
`;
204+
const parsed = await parseMBox(mbox);
205+
expect(parsed.messageId).toEqual("<pull.12345.v17.git.gitgitgadget@example.com>");
206+
});

0 commit comments

Comments
 (0)