handle the case original_message_id is None in replace_original_message_id

This commit is contained in:
Son 2021-11-05 09:43:58 +01:00
parent 516898af59
commit 4214efa497
1 changed files with 31 additions and 23 deletions

View File

@ -1115,33 +1115,41 @@ def replace_original_message_id(alias: Alias, email_log: EmailLog, msg: Message)
for "message-id" and "References" headers for "message-id" and "References" headers
""" """
original_message_id = msg[headers.MESSAGE_ID] original_message_id = msg[headers.MESSAGE_ID]
matching = MessageIDMatching.get_by(original_message_id=original_message_id) if original_message_id:
# can happen when a user replies to multiple recipient from their alias matching = MessageIDMatching.get_by(original_message_id=original_message_id)
# a SL Message_id will be created for the first recipient # can happen when a user replies to multiple recipient from their alias
# it should be reused for other recipients # a SL Message_id will be created for the first recipient
if matching: # it should be reused for other recipients
sl_message_id = matching.sl_message_id if matching:
LOG.d("reuse the sl_message_id %s", sl_message_id) sl_message_id = matching.sl_message_id
LOG.d("reuse the sl_message_id %s", sl_message_id)
else:
sl_message_id = make_msgid(
str(email_log.id), get_email_domain_part(alias.email)
)
LOG.d("create a new sl_message_id %s", sl_message_id)
try:
MessageIDMatching.create(
sl_message_id=sl_message_id,
original_message_id=original_message_id,
email_log_id=email_log.id,
commit=True,
)
except IntegrityError:
LOG.w(
"another matching with original_message_id %s was created in the mean time",
original_message_id,
)
Session.rollback()
matching = MessageIDMatching.get_by(
original_message_id=original_message_id
)
sl_message_id = matching.sl_message_id
else: else:
sl_message_id = make_msgid( sl_message_id = make_msgid(
str(email_log.id), get_email_domain_part(alias.email) str(email_log.id), get_email_domain_part(alias.email)
) )
LOG.d("create a new sl_message_id %s", sl_message_id) LOG.d("no original_message_id, create a new sl_message_id %s", sl_message_id)
try:
MessageIDMatching.create(
sl_message_id=sl_message_id,
original_message_id=original_message_id,
email_log_id=email_log.id,
commit=True,
)
except IntegrityError:
LOG.w(
"another matching with original_message_id %s was created in the mean time",
original_message_id,
)
Session.rollback()
matching = MessageIDMatching.get_by(original_message_id=original_message_id)
sl_message_id = matching.sl_message_id
del msg[headers.MESSAGE_ID] del msg[headers.MESSAGE_ID]
msg[headers.MESSAGE_ID] = sl_message_id msg[headers.MESSAGE_ID] = sl_message_id