mirror of
https://github.com/simple-login/app.git
synced 2024-09-20 15:05:59 +08:00
set contact name in get_or_create_contact, use contact.new_addrs in replace_header_when_forward
This commit is contained in:
parent
afceabeef5
commit
f78e790b71
|
@ -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,
|
||||
|
|
Loading…
Reference in a new issue