mirror of
https://github.com/simple-login/app.git
synced 2024-09-21 01:11:29 +02:00
fix: contact duplicate key (#2150)
This commit is contained in:
parent
87e55605b8
commit
cccd65d93a
@ -235,13 +235,14 @@ def get_or_create_contact(from_header: str, mail_from: str, alias: Alias) -> Con
|
|||||||
contact.mail_from = mail_from
|
contact.mail_from = mail_from
|
||||||
Session.commit()
|
Session.commit()
|
||||||
else:
|
else:
|
||||||
|
alias_id = alias.id
|
||||||
try:
|
try:
|
||||||
contact_email_for_reply = (
|
contact_email_for_reply = (
|
||||||
contact_email if is_valid_email(contact_email) else ""
|
contact_email if is_valid_email(contact_email) else ""
|
||||||
)
|
)
|
||||||
contact = Contact.create(
|
contact = Contact.create(
|
||||||
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,
|
||||||
name=contact_name,
|
name=contact_name,
|
||||||
mail_from=mail_from,
|
mail_from=mail_from,
|
||||||
@ -261,9 +262,11 @@ def get_or_create_contact(from_header: str, mail_from: str, alias: Alias) -> Con
|
|||||||
|
|
||||||
Session.commit()
|
Session.commit()
|
||||||
except IntegrityError:
|
except IntegrityError:
|
||||||
LOG.w(f"Contact with email {contact_email} for alias {alias} already exist")
|
# No need to manually rollback, as IntegrityError already rolls back
|
||||||
Session.rollback()
|
LOG.info(
|
||||||
contact = Contact.get_by(alias_id=alias.id, website_email=contact_email)
|
f"Contact with email {contact_email} for alias_id {alias_id} already existed, fetching from DB"
|
||||||
|
)
|
||||||
|
contact = Contact.get_by(alias_id=alias_id, website_email=contact_email)
|
||||||
|
|
||||||
return contact
|
return contact
|
||||||
|
|
||||||
@ -662,6 +665,9 @@ def handle_forward(envelope, msg: Message, rcpt_to: str) -> List[Tuple[bool, str
|
|||||||
from_header = get_header_unicode(msg[headers.FROM])
|
from_header = get_header_unicode(msg[headers.FROM])
|
||||||
LOG.d("Create or get contact for from_header:%s", from_header)
|
LOG.d("Create or get contact for from_header:%s", from_header)
|
||||||
contact = get_or_create_contact(from_header, envelope.mail_from, alias)
|
contact = get_or_create_contact(from_header, envelope.mail_from, alias)
|
||||||
|
alias = (
|
||||||
|
contact.alias
|
||||||
|
) # In case the Session was closed in the get_or_create we re-fetch the alias
|
||||||
|
|
||||||
reply_to_contact = None
|
reply_to_contact = None
|
||||||
if msg[headers.REPLY_TO]:
|
if msg[headers.REPLY_TO]:
|
||||||
|
Loading…
Reference in New Issue
Block a user