diff --git a/src/mailparser/const.py b/src/mailparser/const.py index 2b223f5..d42fc17 100644 --- a/src/mailparser/const.py +++ b/src/mailparser/const.py @@ -19,7 +19,6 @@ import re - REGXIP = re.compile(r"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}") JUNK_PATTERN = r"[ \(\)\[\]\t\n]+" @@ -39,7 +38,7 @@ # envelope-from and -sender seem to optionally have space and/or # ( before them other clauses must have whitespace before ( - r"(?:[^-]by\s+(?P.+?)(?:\s*[(]?envelope-from|\s*" + r"(?:[^-\.]by\s+(?P.+?)(?:\s*[(]?envelope-from|\s*" r"[(]?envelope-sender|\s+from|\s+with" r"(?! cipher)|\s+id|\s+for|\s+via|;))" ), @@ -48,7 +47,7 @@ r"envelope-sender|\s+from|\s+by|\s+id|\s+for|\s+via|;))" ), ( - r"[^\w](?:id\s+(?P.+?)(?:\s*[(]?envelope-from|\s*" + r"[^\w\.](?:id\s+(?P.+?)(?:\s*[(]?envelope-from|\s*" r"[(]?envelope-sender|\s+from|\s+by|\s+with" r"(?! cipher)|\s+for|\s+via|;))" ), diff --git a/tests/test_mail_parser.py b/tests/test_mail_parser.py index d951cfb..5b8200c 100644 --- a/tests/test_mail_parser.py +++ b/tests/test_mail_parser.py @@ -549,6 +549,48 @@ def test_ported_string(self): s = ported_string(raw_data) self.assertEqual(s, "test") + def test_parse_domain_with_tld_dot_id(self): + """Support for .id tld (Indonesia)""" + received = """ + from web.myhost.id + by smtp.domain.id (Proxmox) with ESMTPS id SOMEIDHERE + for ; Wed, 19 Feb 2025 15:00:00 +0700 (WIB) + """.strip() + + expected = { + "from": "web.myhost.id", + "by": "smtp.domain.id (Proxmox)", + "with": "ESMTPS", + "id": "SOMEIDHERE", + "for": "", + "date": "Wed, 19 Feb 2025 15:00:00 +0700 (WIB)", + } + + values_by_clause = parse_received(received) + + self.assertEqual(expected, values_by_clause) + + def test_parse_domain_with_tld_dot_by(self): + """Support for .by tld (Belarus)""" + received = """ + from web.myhost.by + by smtp.domain.by (Proxmox) with ESMTPS id SOMEIDHERE + for ; Wed, 19 Feb 2025 15:00:00 +0700 (WIB) + """.strip() + + expected = { + "from": "web.myhost.by", + "by": "smtp.domain.by (Proxmox)", + "with": "ESMTPS", + "id": "SOMEIDHERE", + "for": "", + "date": "Wed, 19 Feb 2025 15:00:00 +0700 (WIB)", + } + + values_by_clause = parse_received(received) + + self.assertEqual(expected, values_by_clause) + def test_standard_outlook(self): """Verify a basic outlook received header works.""" received = """