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
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("@", "=")