add alias to To: header if it isn't included in To and Cc header
This commit is contained in:
parent
a966665478
commit
0565ca4d5e
|
@ -386,6 +386,31 @@ def replace_header_when_forward(msg: Message, alias: Alias, header: str):
|
||||||
delete_header(msg, header)
|
delete_header(msg, header)
|
||||||
|
|
||||||
|
|
||||||
|
def add_alias_to_header_if_needed(msg, alias):
|
||||||
|
"""
|
||||||
|
During the forward phase, add alias to To: header if it isn't included in To and Cc header
|
||||||
|
It can happen that the alias isn't included in To: and CC: header, for example if this is a BCC email
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
to_header = str(msg[headers.TO]) if msg[headers.TO] else None
|
||||||
|
cc_header = str(msg[headers.CC]) if msg[headers.CC] else None
|
||||||
|
|
||||||
|
# nothing to do
|
||||||
|
if to_header and alias.email in to_header:
|
||||||
|
return
|
||||||
|
|
||||||
|
# nothing to do
|
||||||
|
if cc_header and alias.email in cc_header:
|
||||||
|
return
|
||||||
|
|
||||||
|
LOG.d(f"add {alias} to To: header {to_header}")
|
||||||
|
|
||||||
|
if to_header:
|
||||||
|
msg[headers.TO] = f"{to_header},{alias.email}"
|
||||||
|
else:
|
||||||
|
msg[headers.TO] = alias.email
|
||||||
|
|
||||||
|
|
||||||
def replace_header_when_reply(msg: Message, alias: Alias, header: str):
|
def replace_header_when_reply(msg: Message, alias: Alias, header: str):
|
||||||
"""
|
"""
|
||||||
Replace CC or To Reply emails by original emails
|
Replace CC or To Reply emails by original emails
|
||||||
|
@ -843,14 +868,17 @@ def forward_email_to_mailbox(
|
||||||
|
|
||||||
# replace CC & To emails by reverse-alias for all emails that are not alias
|
# replace CC & To emails by reverse-alias for all emails that are not alias
|
||||||
try:
|
try:
|
||||||
replace_header_when_forward(msg, alias, "Cc")
|
replace_header_when_forward(msg, alias, headers.CC)
|
||||||
replace_header_when_forward(msg, alias, "To")
|
replace_header_when_forward(msg, alias, headers.TO)
|
||||||
except CannotCreateContactForReverseAlias:
|
except CannotCreateContactForReverseAlias:
|
||||||
LOG.d("CannotCreateContactForReverseAlias error, delete %s", email_log)
|
LOG.d("CannotCreateContactForReverseAlias error, delete %s", email_log)
|
||||||
EmailLog.delete(email_log.id)
|
EmailLog.delete(email_log.id)
|
||||||
Session.commit()
|
Session.commit()
|
||||||
raise
|
raise
|
||||||
|
|
||||||
|
# add alias to To: header if it isn't included in To and Cc header
|
||||||
|
add_alias_to_header_if_needed(msg, alias)
|
||||||
|
|
||||||
# add List-Unsubscribe header
|
# add List-Unsubscribe header
|
||||||
if user.one_click_unsubscribe_block_sender:
|
if user.one_click_unsubscribe_block_sender:
|
||||||
unsubscribe_link, via_email = alias.unsubscribe_link(contact)
|
unsubscribe_link, via_email = alias.unsubscribe_link(contact)
|
||||||
|
|
|
@ -187,3 +187,15 @@ def test_dmarc_reply_quarantine(flask_client, dmarc_result):
|
||||||
user_id=user.id, alert_type=ALERT_DMARC_FAILED_REPLY_PHASE
|
user_id=user.id, alert_type=ALERT_DMARC_FAILED_REPLY_PHASE
|
||||||
).all()
|
).all()
|
||||||
assert len(alerts) == 1
|
assert len(alerts) == 1
|
||||||
|
|
||||||
|
|
||||||
|
def test_add_alias_to_header_if_needed():
|
||||||
|
msg = EmailMessage()
|
||||||
|
create_random_user()
|
||||||
|
alias = Alias.first()
|
||||||
|
|
||||||
|
assert msg[headers.TO] is None
|
||||||
|
|
||||||
|
email_handler.add_alias_to_header_if_needed(msg, alias)
|
||||||
|
|
||||||
|
assert msg[headers.TO] == alias.email
|
||||||
|
|
Loading…
Reference in New Issue