Fix delete_header not deleting all header occurences

This commit is contained in:
Son NK 2020-02-07 21:56:55 +07:00
parent 50173483d3
commit 4c383663f4
2 changed files with 21 additions and 3 deletions

View File

@ -299,9 +299,11 @@ def add_or_replace_header(msg: Message, header: str, value: str):
def delete_header(msg: Message, header: str):
"""a header can appear several times in message."""
for h in msg._headers:
if h[0].lower() == header.lower():
msg._headers.remove(h)
# inspired from https://stackoverflow.com/a/47903323/1428034
for i in reversed(range(len(msg._headers))):
header_name = msg._headers[i][0].lower()
if header_name == header.lower():
del msg._headers[i]
def email_belongs_to_alias_domains(email: str) -> bool:

View File

@ -1,3 +1,5 @@
from email.message import EmailMessage
from app.email_utils import (
get_email_name,
get_email_part,
@ -5,6 +7,7 @@ from app.email_utils import (
get_email_domain_part,
email_belongs_to_alias_domains,
can_be_used_as_personal_email,
delete_header,
)
from app.extensions import db
from app.models import User, CustomDomain
@ -55,3 +58,16 @@ def test_can_be_used_as_personal_email(flask_client):
CustomDomain.create(user_id=user.id, domain="ab.cd", verified=True)
db.session.commit()
assert not can_be_used_as_personal_email("hey@ab.cd")
def test_delete_header():
msg = EmailMessage()
assert msg._headers == []
msg["H"] = "abcd"
msg["H"] = "xyzt"
assert msg._headers == [("H", "abcd"), ("H", "xyzt")]
delete_header(msg, "H")
assert msg._headers == []