diff --git a/email_handler.py b/email_handler.py index 65991111..604ea7c1 100644 --- a/email_handler.py +++ b/email_handler.py @@ -406,9 +406,9 @@ def add_alias_to_header_if_needed(msg, alias): LOG.d(f"add {alias} to To: header {to_header}") if to_header: - msg[headers.TO] = f"{to_header},{alias.email}" + add_or_replace_header(msg, headers.TO, f"{to_header},{alias.email}") else: - msg[headers.TO] = alias.email + add_or_replace_header(msg, headers.TO, alias.email) def replace_header_when_reply(msg: Message, alias: Alias, header: str): diff --git a/tests/test_email_handler.py b/tests/test_email_handler.py index 8b71b8d0..53cee299 100644 --- a/tests/test_email_handler.py +++ b/tests/test_email_handler.py @@ -191,11 +191,40 @@ def test_dmarc_reply_quarantine(flask_client, dmarc_result): def test_add_alias_to_header_if_needed(): msg = EmailMessage() - create_new_user() - alias = Alias.first() + user = create_new_user() + alias = Alias.filter_by(user_id=user.id).first() assert msg[headers.TO] is None email_handler.add_alias_to_header_if_needed(msg, alias) assert msg[headers.TO] == alias.email + + +def test_append_alias_to_header_if_needed_existing_to(): + msg = EmailMessage() + original_to = "noone@nowhere.no" + msg[headers.TO] = original_to + user = create_new_user() + alias = Alias.filter_by(user_id=user.id).first() + email_handler.add_alias_to_header_if_needed(msg, alias) + assert msg[headers.TO] == f"{original_to}, {alias.email}" + + +def test_avoid_add_to_header_already_present(): + msg = EmailMessage() + user = create_new_user() + alias = Alias.filter_by(user_id=user.id).first() + msg[headers.TO] = alias.email + email_handler.add_alias_to_header_if_needed(msg, alias) + assert msg[headers.TO] == alias.email + + +def test_avoid_add_to_header_already_present_in_cc(): + msg = EmailMessage() + create_new_user() + alias = Alias.first() + msg[headers.CC] = alias.email + email_handler.add_alias_to_header_if_needed(msg, alias) + assert msg[headers.TO] is None + assert msg[headers.CC] == alias.email