From 8837dca5d3a03429ae51b0c1b4890cc23ca3666a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9lestin=20Matte?= Date: Fri, 24 Apr 2026 10:31:38 +0200 Subject: [PATCH] Use template to forward emails to mailing list owners via a system address Relaying the email directly breaks SPF/DMARC. To avoid this issue, embbed the email in a moderation email sent from the moderation address. --- lib/handlers/mailhandler.py | 26 ++++++++++++++++++++------ mailtemplates/owner_forward.txt | 7 +++++++ 2 files changed, 27 insertions(+), 6 deletions(-) create mode 100644 mailtemplates/owner_forward.txt diff --git a/lib/handlers/mailhandler.py b/lib/handlers/mailhandler.py index 71a7d4e..beb2cb0 100644 --- a/lib/handlers/mailhandler.py +++ b/lib/handlers/mailhandler.py @@ -15,7 +15,7 @@ from baselib.lists import CcPolicies, BccPolicies from mailutil.header import decode_mime_header from mailutil.body import get_truncated_body from mailutil.attachment import get_attachment_info -from baselib.misc import generate_random_token, log, format_size +from baselib.misc import generate_random_token, log, format_size, obfuscate_email_address from baselib.config import config from baselib.template import send_mailtemplate @@ -911,12 +911,26 @@ ORDER BY 1""", # pass the mail on to there. with self.conn.cursor() as curs: mods = self.mlist.get_moderators() + context = { + 'sender': obfuscate_email_address(self.sender), + 'from': obfuscate_email_address(self.fromaddr), + 'subject': self.subject, + 'body': self._get_truncated_body(), + 'list_name': self.mlist.name, + 'moderator_address': self.mlist.moderator_notice_address() + } + for email, name in mods: - curs.execute("INSERT INTO raw_out (sender, recipient, contents) VALUES (%(sender)s, %(recipient)s, %(contents)s)", { - 'sender': self.sender, - 'recipient': email, - 'contents': self.bio.getvalue(), - }) + send_mailtemplate( + curs, + self.mlist.moderator_notice_address(), + self.mlist.moderator_notice_name(), + email, + name, + f"Email received on {self.mlist.name} list moderators address", + 'owner_forward.txt', + context + ) log(curs, 0, 'mail', 'Mail to list owner of {0} delivered to {1} moderators.'.format(self.mlist.name, len(mods)), self.messageid) diff --git a/mailtemplates/owner_forward.txt b/mailtemplates/owner_forward.txt new file mode 100644 index 0000000..d122038 --- /dev/null +++ b/mailtemplates/owner_forward.txt @@ -0,0 +1,7 @@ +The following email was received on the list moderators address ($moderator_address): + +Sender: $from ($sender) +Subject: $subject +List: $list_name + +$body -- 2.53.0