From 36cf530ef873c49775d6ee528ab2f94feedf4c35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adri=C3=A0=20Casaj=C3=BAs?= Date: Fri, 22 Mar 2024 11:00:06 +0100 Subject: [PATCH] Preserve X-SL-Queue-Id (#2076) --- app/email/headers.py | 1 + email_handler.py | 1 + tests/test_email_handler.py | 27 +++++++++++++++++++++++++++ 3 files changed, 29 insertions(+) diff --git a/app/email/headers.py b/app/email/headers.py index 788693b9..bfbcb9a7 100644 --- a/app/email/headers.py +++ b/app/email/headers.py @@ -21,6 +21,7 @@ LIST_UNSUBSCRIBE = "List-Unsubscribe" LIST_UNSUBSCRIBE_POST = "List-Unsubscribe-Post" RETURN_PATH = "Return-Path" AUTHENTICATION_RESULTS = "Authentication-Results" +SL_QUEUE_ID = "X-SL-Queue-Id" # headers used to DKIM sign in order of preference DKIM_HEADERS = [ diff --git a/email_handler.py b/email_handler.py index aa2b06b2..e77fcbb6 100644 --- a/email_handler.py +++ b/email_handler.py @@ -875,6 +875,7 @@ def forward_email_to_mailbox( # References and In-Reply-To are used for keeping the email thread headers.REFERENCES, headers.IN_REPLY_TO, + headers.SL_QUEUE_ID, headers.LIST_UNSUBSCRIBE, headers.LIST_UNSUBSCRIBE_POST, ] + headers.MIME_HEADERS diff --git a/tests/test_email_handler.py b/tests/test_email_handler.py index 121c226f..5b33c713 100644 --- a/tests/test_email_handler.py +++ b/tests/test_email_handler.py @@ -384,3 +384,30 @@ def test_break_loop_alias_as_mailbox(flask_client): msg[headers.SUBJECT] = random_string() result = email_handler.handle(envelope, msg) assert result == status.E525 + + +@mail_sender.store_emails_test_decorator +def test_preserve_headers(flask_client): + headers_to_keep = [ + headers.SUBJECT, + headers.DATE, + headers.MESSAGE_ID, + headers.REFERENCES, + headers.IN_REPLY_TO, + headers.SL_QUEUE_ID, + ] + headers.MIME_HEADERS + user = create_new_user() + alias = Alias.create_new_random(user) + envelope = Envelope() + envelope.mail_from = "somewhere@lo.cal" + envelope.rcpt_tos = [alias.email] + msg = EmailMessage() + for header in headers_to_keep: + msg[header] = header + "keep" + result = email_handler.handle(envelope, msg) + assert result == status.E200 + sent_mails = mail_sender.get_stored_emails() + assert len(sent_mails) == 1 + msg = sent_mails[0].msg + for header in headers_to_keep: + assert msg[header] == header + "keep"