From 3b16e502b3947f57af302a7c28d6dca9fcb07f15 Mon Sep 17 00:00:00 2001 From: Son Nguyen Kim Date: Wed, 22 Sep 2021 09:58:40 +0200 Subject: [PATCH] add debug info when an email is sent from reverse-alias --- app/email/status.py | 1 + email_handler.py | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/app/email/status.py b/app/email/status.py index b2fbfef9..82e30821 100644 --- a/app/email/status.py +++ b/app/email/status.py @@ -51,3 +51,4 @@ E522 = ( "550 SL E522 The user you are trying to contact is receiving mail " "at a rate that prevents additional messages from being delivered." ) +E523 = "550 SL E523 Unknown error" diff --git a/email_handler.py b/email_handler.py index 9c534c85..4fa9a21e 100644 --- a/email_handler.py +++ b/email_handler.py @@ -32,6 +32,7 @@ It should contain the following info: """ import argparse import email +import os import time import uuid from email import encoders @@ -82,6 +83,7 @@ from app.config import ( POSTMASTER, ALERT_HOTMAIL_COMPLAINT, ALERT_YAHOO_COMPLAINT, + TEMP_DIR, ) from app.email import status from app.email.rate_limit import rate_limited @@ -1848,6 +1850,26 @@ def handle(envelope: Envelope) -> str: ) return handle_bounce(envelope, email_log, msg) + # case where From: header is a reverse alias which should never happen + from_header = get_header_unicode(msg["From"]) + if from_header: + _, from_header_address = parse_full_address(from_header) + if is_reply_email(from_header_address): + LOG.e("email sent from a reverse alias %s", from_header_address) + # get more info for debug + contact = Contact.get_by(reply_email=from_header_address) + if contact: + LOG.d("%s %s %s", contact.user, contact.alias, contact) + + # To investigate. todo: remove + if TEMP_DIR: + file_name = str(uuid.uuid4()) + ".eml" + with open(os.path.join(TEMP_DIR, file_name), "wb") as f: + f.write(msg.as_bytes()) + + LOG.d("email saved to %s", file_name) + return status.E523 + if rate_limited(mail_from, rcpt_tos): LOG.w("Rate Limiting applied for mail_from:%s rcpt_tos:%s", mail_from, rcpt_tos)