]> git.ipfire.org Git - ipfire.org.git/commitdiff
messages: Add a VERP address as Return-Path:
authorMichael Tremer <michael.tremer@ipfire.org>
Tue, 20 Jan 2026 17:19:07 +0000 (17:19 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Tue, 20 Jan 2026 17:19:07 +0000 (17:19 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/backend/messages.py

index 681457dfbc41520e247bb5e84a5ffd0bdd8b634a..2bfe857a23e712712294e98387adb4d87af642f5 100644 (file)
@@ -365,12 +365,18 @@ class Queue(misc.Object):
                        msg.get("Subject"), msg.get("To"),
                ))
 
+               # Fetch the recipient
+               recipient = msg["To"]
+
+               # Parse the recipient's address
+               return_path = self.make_verp_address(recipient)
+
                error_messages = []
                rejected_recipients = {}
 
                # Try delivering the email
                try:
-                       rejected_recipients = self.relay.send_message(msg)
+                       rejected_recipients = self.relay.send_message(msg, from_addr=return_path)
 
                except smtplib.SMTPRecipientsRefused as e:
                        rejected_recipients = e.recipients
@@ -403,3 +409,13 @@ class Queue(misc.Object):
 
                self.db.execute("DELETE FROM messages \
                        WHERE time_sent IS NOT NULL AND time_sent <= NOW() - '30 day'::interval")
+
+       @staticmethod
+       def make_verp_address(recipient):
+               """
+                       Creates a VERP address which we will use for reliable bounce processing
+               """
+               # Parse the address
+               name, recipient = email.utils.parseaddr(recipient)
+
+               return "bounces+%s@ipfire.org" % recipient.replace("@", "=")