Selaa lähdekoodia

set contact name in get_or_create_contact, use contact.new_addrs in replace_header_when_forward

Son NK 5 vuotta sitten
vanhempi
commit
f78e790b71
1 muutettua tiedostoa jossa 13 lisäystä ja 18 poistoa
  1. 13 18
      email_handler.py

+ 13 - 18
email_handler.py

@@ -63,7 +63,6 @@ from app.email_utils import (
     render,
     render,
     get_orig_message_from_bounce,
     get_orig_message_from_bounce,
     delete_all_headers_except,
     delete_all_headers_except,
-    new_addr,
     get_addrs_from_header,
     get_addrs_from_header,
     get_spam_info,
     get_spam_info,
     get_orig_message_from_spamassassin_report,
     get_orig_message_from_spamassassin_report,
@@ -105,21 +104,20 @@ def new_app():
 
 
 def get_or_create_contact(contact_from_header: str, alias: Alias) -> Contact:
 def get_or_create_contact(contact_from_header: str, alias: Alias) -> Contact:
     """
     """
-    website_from_header can be the full-form email, i.e. "First Last <email@example.com>"
+    contact_from_header is the RFC 2047 format FROM header
     """
     """
-    _, contact_email = parseaddr(contact_from_header)
+    contact_name, contact_email = parseaddr_unicode(contact_from_header)
     contact = Contact.get_by(alias_id=alias.id, website_email=contact_email)
     contact = Contact.get_by(alias_id=alias.id, website_email=contact_email)
     if contact:
     if contact:
-        # update the website_from if needed
-        if contact.website_from != contact_from_header:
-            LOG.d("Update From header for %s", contact)
-            contact.website_from = contact_from_header
+        if contact.name != contact_name:
+            LOG.d(
+                "Update contact %s name %s to %s", contact, contact.name, contact_name,
+            )
+            contact.name = contact_name
             db.session.commit()
             db.session.commit()
     else:
     else:
         LOG.debug(
         LOG.debug(
-            "create forward email for alias %s and website email %s",
-            alias,
-            contact_from_header,
+            "create contact for alias %s and contact %s", alias, contact_from_header,
         )
         )
 
 
         reply_email = generate_reply_email()
         reply_email = generate_reply_email()
@@ -128,7 +126,7 @@ def get_or_create_contact(contact_from_header: str, alias: Alias) -> Contact:
             user_id=alias.user_id,
             user_id=alias.user_id,
             alias_id=alias.id,
             alias_id=alias.id,
             website_email=contact_email,
             website_email=contact_email,
-            website_from=contact_from_header,
+            name=contact_name,
             reply_email=reply_email,
             reply_email=reply_email,
         )
         )
         db.session.commit()
         db.session.commit()
@@ -183,15 +181,13 @@ def replace_header_when_forward(msg: Message, alias: Alias, header: str):
                 user_id=alias.user_id,
                 user_id=alias.user_id,
                 alias_id=alias.id,
                 alias_id=alias.id,
                 website_email=contact_email,
                 website_email=contact_email,
-                website_from=addr,
+                name=contact_name,
                 reply_email=reply_email,
                 reply_email=reply_email,
                 is_cc=header.lower() == "cc",
                 is_cc=header.lower() == "cc",
             )
             )
             db.session.commit()
             db.session.commit()
 
 
-        new_addrs.append(
-            new_addr(contact.website_from, contact.reply_email, alias.user)
-        )
+        new_addrs.append(contact.new_addr())
         need_replace = True
         need_replace = True
 
 
     if need_replace:
     if need_replace:
@@ -357,8 +353,7 @@ def handle_forward(envelope, smtp: SMTP, msg: Message, rcpt_to: str) -> (bool, s
         # so it can pass DMARC check
         # so it can pass DMARC check
         # replace the email part in from: header
         # replace the email part in from: header
         contact_from_header = msg["From"]
         contact_from_header = msg["From"]
-        contact_name, contact_email = parseaddr(contact_from_header)
-        new_from_header = new_addr(contact_from_header, contact.reply_email, user)
+        new_from_header = contact.new_addr()
         add_or_replace_header(msg, "From", new_from_header)
         add_or_replace_header(msg, "From", new_from_header)
         LOG.d("new_from_header:%s, old header %s", new_from_header, contact_from_header)
         LOG.d("new_from_header:%s, old header %s", new_from_header, contact_from_header)
 
 
@@ -391,7 +386,7 @@ def handle_forward(envelope, smtp: SMTP, msg: Message, rcpt_to: str) -> (bool, s
 
 
         LOG.d(
         LOG.d(
             "Forward mail from %s to %s, mail_options %s, rcpt_options %s ",
             "Forward mail from %s to %s, mail_options %s, rcpt_options %s ",
-            contact_email,
+            contact.website_email,
             mailbox_email,
             mailbox_email,
             envelope.mail_options,
             envelope.mail_options,
             envelope.rcpt_options,
             envelope.rcpt_options,