From 8a080fb0764e2b882eb51a3237a653f918950055 Mon Sep 17 00:00:00 2001 From: Sami Samhuri Date: Tue, 28 Dec 2021 15:22:49 -0800 Subject: [PATCH] Perform >From quoting as described by RFC 4155 https://www.rfc-editor.org/rfc/rfc4155.txt http://qmail.org/qmail-manual-html/man5/mbox.html > The program then copies the message, applying >From quoting > to each line. >From quoting ensures that the resulting > lines are not From_ lines: the program prepends a > to any > From_ line, >From_ line, >>From_ line, >>>From_ line, etc. --- imapbackup.py | 6 ++++++ imapbackup38.py | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/imapbackup.py b/imapbackup.py index 4a0f0fe..8325407 100644 --- a/imapbackup.py +++ b/imapbackup.py @@ -167,6 +167,7 @@ def download_messages(server, filename, messages, config): spinner = Spinner("Downloading %s new messages to %s" % (len(messages), filename), config['nospinner']) total = biggest = 0 + from_re = re.compile("\n(>*)From ") # each new message for msg_id in messages.keys(): @@ -190,6 +191,11 @@ def download_messages(server, filename, messages, config): # This avoids Thunderbird mistaking a line starting "From " as the start # of a new message. _Might_ also apply to other mail lients - unknown text = text.replace("\nFrom ", "\n From ") + else: + # Perform >From quoting as described by RFC 4155 and the qmail docs. + # https://www.rfc-editor.org/rfc/rfc4155.txt + # http://qmail.org/qmail-manual-html/man5/mbox.html + text = from_re.sub("\n>\\1From ", text) mbox.write(text) mbox.write('\n\n') diff --git a/imapbackup38.py b/imapbackup38.py index bb594f4..3c79611 100644 --- a/imapbackup38.py +++ b/imapbackup38.py @@ -155,6 +155,7 @@ def download_messages(server, filename, messages, overwrite, nospinner, thunderb spinner = Spinner("Downloading %s new messages to %s" % (len(messages), filename), nospinner) total = biggest = 0 + from_re = re.compile(b"\n(>*)From ") # each new message for msg_id in messages.keys(): @@ -183,6 +184,11 @@ def download_messages(server, filename, messages, overwrite, nospinner, thunderb # This avoids Thunderbird mistaking a line starting "From " as the start # of a new message. _Might_ also apply to other mail lients - unknown text_bytes = text_bytes.replace(b"\nFrom ", b"\n From ") + else: + # Perform >From quoting as described by RFC 4155 and the qmail docs. + # https://www.rfc-editor.org/rfc/rfc4155.txt + # http://qmail.org/qmail-manual-html/man5/mbox.html + text_bytes = from_re.sub(b"\n>\\1From ", text_bytes) mbox.write(text_bytes) mbox.write(b'\n\n')