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

This commit is contained in:
Son NK 2020-04-05 15:24:09 +02:00
parent afceabeef5
commit f78e790b71
1 changed files with 13 additions and 18 deletions

View File

@ -63,7 +63,6 @@ from app.email_utils import (
render,
get_orig_message_from_bounce,
delete_all_headers_except,
new_addr,
get_addrs_from_header,
get_spam_info,
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:
"""
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)
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()
else:
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()
@ -128,7 +126,7 @@ def get_or_create_contact(contact_from_header: str, alias: Alias) -> Contact:
user_id=alias.user_id,
alias_id=alias.id,
website_email=contact_email,
website_from=contact_from_header,
name=contact_name,
reply_email=reply_email,
)
db.session.commit()
@ -183,15 +181,13 @@ def replace_header_when_forward(msg: Message, alias: Alias, header: str):
user_id=alias.user_id,
alias_id=alias.id,
website_email=contact_email,
website_from=addr,
name=contact_name,
reply_email=reply_email,
is_cc=header.lower() == "cc",
)
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
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
# replace the email part in from: header
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)
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(
"Forward mail from %s to %s, mail_options %s, rcpt_options %s ",
contact_email,
contact.website_email,
mailbox_email,
envelope.mail_options,
envelope.rcpt_options,