From d3aae31d45943404c06598e4ce04af7b3277d848 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adri=C3=A0=20Casaj=C3=BAs?= Date: Fri, 23 Jun 2023 12:43:06 +0200 Subject: [PATCH] Preserve original from header in X-SimpleLogin-Original-From (#1784) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Preserve original from in the headers * Update the settings page --------- Co-authored-by: Adrià Casajús --- app/email/headers.py | 1 + email_handler.py | 1 + templates/dashboard/setting.html | 3 ++- tests/example_emls/replacement_on_forward_phase.eml | 1 + tests/handler/test_preserved_headers.py | 7 ++++++- 5 files changed, 11 insertions(+), 2 deletions(-) diff --git a/app/email/headers.py b/app/email/headers.py index 416ea2df..788693b9 100644 --- a/app/email/headers.py +++ b/app/email/headers.py @@ -33,6 +33,7 @@ DKIM_HEADERS = [ SL_DIRECTION = "X-SimpleLogin-Type" SL_EMAIL_LOG_ID = "X-SimpleLogin-EmailLog-ID" SL_ENVELOPE_FROM = "X-SimpleLogin-Envelope-From" +SL_ORIGINAL_FROM = "X-SimpleLogin-Original-From" SL_ENVELOPE_TO = "X-SimpleLogin-Envelope-To" SL_CLIENT_IP = "X-SimpleLogin-Client-IP" diff --git a/email_handler.py b/email_handler.py index 27313f14..e1b03df4 100644 --- a/email_handler.py +++ b/email_handler.py @@ -897,6 +897,7 @@ def forward_email_to_mailbox( msg[headers.SL_EMAIL_LOG_ID] = str(email_log.id) if user.include_header_email_header: msg[headers.SL_ENVELOPE_FROM] = envelope.mail_from + msg[headers.SL_ORIGINAL_FROM] = contact.website_email # when an alias isn't in the To: header, there's no way for users to know what alias has received the email msg[headers.SL_ENVELOPE_TO] = alias.email diff --git a/templates/dashboard/setting.html b/templates/dashboard/setting.html index ad4b7ee0..550995a8 100644 --- a/templates/dashboard/setting.html +++ b/templates/dashboard/setting.html @@ -684,7 +684,8 @@ SimpleLogin forwards emails to your mailbox from the reverse-alias and not from the original sender address.
- If this option is enabled, the original sender addresses is stored in the email header X-SimpleLogin-Envelope-From. + If this option is enabled, the original sender addresses is stored in the email header X-SimpleLogin-Envelope-From + and the original From header is stored in X-SimpleLogin-Original-From. You can choose to display this header in your email client.
As email headers aren't encrypted, your mailbox service can know the sender address via this header. diff --git a/tests/example_emls/replacement_on_forward_phase.eml b/tests/example_emls/replacement_on_forward_phase.eml index 655a1974..9e9f626b 100644 --- a/tests/example_emls/replacement_on_forward_phase.eml +++ b/tests/example_emls/replacement_on_forward_phase.eml @@ -24,6 +24,7 @@ References: From: {{ sender_address }} To: {{ recipient_address }} +CC: {{ cc_address }} Subject: Something Message-ID: X-Mailer: Front (1.0; +https://frontapp.com; diff --git a/tests/handler/test_preserved_headers.py b/tests/handler/test_preserved_headers.py index e8c39869..f34af50b 100644 --- a/tests/handler/test_preserved_headers.py +++ b/tests/handler/test_preserved_headers.py @@ -17,7 +17,11 @@ def test_original_headers_from_preserved(): original_sender_address = random_email() msg = load_eml_file( "replacement_on_forward_phase.eml", - {"sender_address": original_sender_address, "recipient_address": alias.email}, + { + "sender_address": original_sender_address, + "recipient_address": alias.email, + "cc_address": random_email(), + }, ) envelope = Envelope() envelope.mail_from = f"env.{original_sender_address}" @@ -28,6 +32,7 @@ def test_original_headers_from_preserved(): assert len(send_requests) == 1 request = send_requests[0] assert request.msg[headers.SL_ENVELOPE_FROM] == envelope.mail_from + assert request.msg[headers.SL_ORIGINAL_FROM] == original_sender_address assert ( request.msg[headers.AUTHENTICATION_RESULTS] == msg[headers.AUTHENTICATION_RESULTS]