Skip to content

Commit 1782bf7

Browse files
Fixed issue Parser behaving different on Linux vs Windows #136 (#142)
* Fixed issue Parser behaving different on Linux vs Windows #136 * fix(tests): ensure proper newline at end of mail_test_17 file
1 parent 4170a01 commit 1782bf7

File tree

3 files changed

+116
-1
lines changed

3 files changed

+116
-1
lines changed

src/mailparser/core.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -564,7 +564,12 @@ def __getattr__(self, name):
564564
# object headers
565565
elif name_header in ADDRESSES_HEADERS:
566566
h = decode_header_part(self.message.get(name_header, six.text_type()))
567-
return email.utils.getaddresses([h])
567+
h_parsed = email.utils.getaddresses([h], strict=True)
568+
return (
569+
h_parsed
570+
if h_parsed != [("", "")]
571+
else email.utils.getaddresses([h], strict=False)
572+
)
568573

569574
# others headers
570575
else:

tests/mails/mail_test_17

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
Received: from apiron13.triara.com (200.57.129.98) by APCNHUB11.correo.local
2+
(172.18.31.175) with Microsoft SMTP Server id 14.3.498.0; Mon, 10 Oct 2022
3+
15:11:35 -0500
4+
Authentication-Results: mailb.triara.com; spf=None smtp.mailfrom=www-data@vps-051e4cda.vps.ovh.net
5+
Received-SPF: None (mailb.triara.com: no sender authenticity
6+
information available from domain of
7+
www-data@vps-051e4cda.vps.ovh.net) identity=mailfrom;
8+
client-ip=152.228.133.10; receiver=mailb.triara.com;
9+
envelope-from="www-data@vps-051e4cda.vps.ovh.net";
10+
x-sender="www-data@vps-051e4cda.vps.ovh.net";
11+
x-conformance=spf_only
12+
X-IPAS-Result: =?us-ascii?q?A0C0kgB4e0RjYQqF5JhaGgEBAQEBKwEBAQEDAQEBAQEBA?=
13+
=?us-ascii?q?QMBAQEBAgIBAQEBAgEJAYFmTFMbAgFlBzFJKwEpEB8EC0IDA4RLXIgihXEtg?=
14+
=?us-ascii?q?yULiwaKFWSFYyKBAgNfAQEBAQEBAQEBBAEEEgIRDwgGBAEBhVYBAQeEHAIjT?=
15+
=?us-ascii?q?QECBAEBAQEDAgMBAQEBAQEDAQEBBAEBAQIBAwQEB0kFEgorhWgNgiIBhEkag?=
16+
=?us-ascii?q?RkCBEobgweDDxEDBQulbodVgTKBAYNQAYELg1gngRgQgSYVAgEBAYFRhT4Fg?=
17+
=?us-ascii?q?TgBgwqCJ4IvJ4FnQhKBA4U4Q08CAQEBF4ITgwoYgk4EmTN7BFIDMxEdEyMBC?=
18+
=?us-ascii?q?QMLdxgDFAMFIQcDGQ8jDQ0EHQwDAwUlAwICGwcCAgMCBhMFAgJNNAgECAQrJ?=
19+
=?us-ascii?q?A8FAgcvBQQvAh4EBQYRCAIWAgYEBAQEFQIQCAIIJhcHEzMZAQVZDgkhHAkfD?=
20+
=?us-ascii?q?QUGEwMgbwVCDygvaSsdGweBDCokBBUDBAQDAgYTAyACDSkxFAQpEw8tBylxC?=
21+
=?us-ascii?q?QIDImoDAwQoLAMJQAcoJAQ4B1g6BQMCECI8BgMJAwIkWYEkDRkFAw0XJggFN?=
22+
=?us-ascii?q?xsECDwCBQZSEwIKEgMSDwkkSQ9KPjsXCB8PlVxigRE3AgEPCkFQLi6CR4EGg?=
23+
=?us-ascii?q?jiWPYZ2hSsJgjSNH49qB4JOJG+LPpUwgRWEMaNAlxCJXYNjhw0CAoFEjAqFU?=
24+
=?us-ascii?q?DWBWgyBW4FMWAEBggABCToOGQ+NfoMrhFqBI4R1VUQxAgEBGR4CBgEKAQEDC?=
25+
=?us-ascii?q?QGCOohaAQE?=
26+
IronPort-PHdr: A9a23:spSpFxSrnRjDE/aKheFpfAHQh9psomOdAWYlg6HP6ppLe6Wn9dL+J
27+
k3W//wrh1jMDs3A8/wRre3Qvuj7XHAYp5OIsXQMaptJAgAaloAalhApKNCdEgijcafnMyc2F
28+
YJcTEQj+G+7d05YBK4SfnX0pXu/pX4XExT7P0xpPOX8AIeUhMOyhai0/NXIbgNEiSD1aK5uL
29+
BiwsQTat9UH5OkqYqc3xBzTp3JUeuNQjWp2LFOXlhz464++5plmuyhXvvsg8YZHX8CYN+wnU
30+
qMdAD06Okgr/Nau7USaQFeE6nJaTH0N1B1WA07D4Q27Fpb9vy3mt/ZsjSyTPMn4V7cxClHAp
31+
+9gTB7ljjtCNiZsqTyNzJYq3OQC+0nn/kQsi5TZa4yUKvdkK6bUfNcQA3ZbX89LXmpKBYbvC
32+
ulHR+cHI+tcqJHw4lUUqh7rTxazG6bjwyNBrmHuxuhijr0sTQrK1Uo+B8lIt2rU6tP4KO1BN
33+
IL9hLmN1jjFY/5MjH3i95eNfhk9qNmSRak1KZeIxBUkGwqDkE2L74v7P3WT2/hH4A35p6JwE
34+
OmojWAgsQR4pDOik9w0hL7OgIYEorgr3Tth28NteIS1FEV3aJi6CIAWsD+acY17XpF6K1w=
35+
IronPort-Data: A9a23:P1Ts4KAPg74kWhVW/xXjw5YqxClBgxIJ4kV8jS/XYbTApDoj0DRTm
36+
2AeXTvTO/uNM2v9e91wYIqzoEoOuZKBmIMyTANkpHpgZkwRpJueD7x1DKtR0wB+jCHnZBg6h
37+
ynLQoCYdKjYdleF+lH3dOCJQUBUjcmgXqD7BPPPJhd/TAplTDZJoR94kobVuKYw6TSCK17L6
38+
I6aT/H3Ygf/gWcsazpMscpvlTs21BjMkGJA1rABTa0T1LPuvyF9JI4SI6i3M0z5TuF8dgJtb
39+
7+epF0R1jqxEyYFUrtJoJ6iGqE5auS60Ty1t5Zjc/PKbi6uCcAF+v1T2PI0MS+7gtgS9jx74
40+
I0lWZeYEW/FMkBQ8QgQe0EwLs1wAUFJ0IPuPWSdtcGP9HzfaULK+PJlPX4nAYJNr46bAUkWn
41+
RAZAC4VdVXb2ru7nLm3Q69ynt9lK9freoUSphmMzxmAUKxgG8qTBfyRvpkBhF/chegWdRraT
42+
9UGdn9jZQjJSwNXIRJPVcszwOykjz/hayYer0yV46w6/wA/ySQoiOO1aYeOJ4HULSlTtkiiu
43+
TzlrlvTOx8HOte/1j+12Wqx2taayEsXX6pITOXlp5aGmma7zWsWEBkXXF2wrNGwiUe3XdlWM
44+
EUY9yApqbM7skesS5/4T3WFTGWsoAYHHoINSuBm4w2EjLTM+ECeGGhCSDNdADA7iCMobQADy
45+
kOrm971Pg12qoSzcnWWx4iFkTznbED5MlQ+TSMDSAIE5fzqr4cykg/DQ75f/Eid0YGd9dbYn
46+
GvikcQuu1kApZJbh/jrpzgrlxr2/cOZEWbZ8y2KBjrN0+9vWGKyT6KSgWU3DMqsz67AETFtW
47+
UTofeDDt4gz4WmlznDlfQn0NOjBCwy5GDPdm0VzOJIq6i6g/XWuFagJvm8jeB03bJ1cJWa0C
48+
KM2he+3zM8IVJdNRf8sC79d9+x7lPG4fTgYfquLMYARO8QZmPGvpXo0PhTJt4wSrKTcuftnY
49+
crKGSpdJXEECex8xSHeegvu+e9D+8zK/kuCFfjTlkz5uZLHPS79YelfYDOzghURqfjsTPP9r
50+
YoCaqNnCnx3C4XDX8Ug2ddMfABUdylgWMGeRg4+XrfrHzeK0VoJU5f5qY7NsaQ+90iJvo8kP
51+
01RmGcAoLY8uZEDARuScTU7NeriAZ1zpDQlJTdqOkionX4ufe5DKUvZm4QfJdEayQC78cNJc
52+
g==
53+
IronPort-HdrOrdr: A9a23:IE0U3q0tRN9Bymkrd2qGBQqjBNUkLtp133Aq2lEZdPWPSL36qy
54+
nAppkmPHPP6Qr5O0tBpTn/AsW9qBrnnPYfi7X5W43SPjUO01HHEGgN1+Tf/wE=
55+
X-IronPort-Anti-Spam-Filtered: true
56+
Subject: =?UTF-8?B?VHJhbnNmZXJlbmNpYSBJbnRlcmJhbmNhcmlhIEJhbmNhIGVuIEzDrW5lYQ==?=
57+
X-IronPort-AV: E=Sophos;i="5.95,173,1661835600";
58+
d="html'217?zip'217,48?scan'217,48,208,48,217";a="1030153556"
59+
X-MGA-submission: =?us-ascii?q?MDFfnUeOjYtx/kPz1rQrHfQrNIBGcOsaef6Pxd?=
60+
=?us-ascii?q?fYLajkW0aqpJS8e/pX+Kfz9sRkdcd5xyISxIOdF+YXiKE+ILG7RI8546?=
61+
=?us-ascii?q?G6AgtU3PrBER1OQ5hnnprxu8FcYwakAkY4OSc=3D?=
62+
Received: from vps-051e4cda.vps.ovh.net ([152.228.133.10]) by
63+
apiron13.triara.com with ESMTP/TLS/ECDHE-RSA-AES128-GCM-SHA256; 10 Oct 2022
64+
15:11:34 -0500
65+
Received: from vps-051e4cda.vps.ovh.net (localhost [127.0.0.1]) by
66+
vps-051e4cda.vps.ovh.net (8.15.2/8.15.2/Debian-10) with ESMTP id
67+
29AKBWdZ005349 for <compliance@akaancasadebolsa.com.mx>; Mon, 10 Oct 2022
68+
20:11:32 GMT
69+
Received: (from www-data@localhost) by vps-051e4cda.vps.ovh.net
70+
(8.15.2/8.15.2/Submit) id 29AKBWwn005317; Mon, 10 Oct 2022 20:11:32 GMT
71+
Date: Mon, 10 Oct 2022 20:11:32 +0000
72+
Message-ID: <202210102011.29AKBWwn005317@vps-051e4cda.vps.ovh.net>
73+
To: <compliance@akaancasadebolsa.com.mx>
74+
From: =?UTF-8?B?bm90aWZpY2FjY2lvbi1jbGllbnRlc0BiYnZhLm14?=
75+
<notificaccion-clientes@bbva.mx>
76+
Reply-To: <info@alejandrosalcedo.es>
77+
Return-Path: www-data@vps-051e4cda.vps.ovh.net
78+
X-MS-Exchange-Organization-AuthSource: APCNHUB11.correo.local
79+
X-MS-Exchange-Organization-AuthAs: Anonymous
80+
Content-Type: multipart/mixed; boundary="B_3748259537_1769991493"
81+
MIME-Version: 1.0
82+
83+
--B_3748259537_1769991493
84+
Content-Type: multipart/alternative; boundary="B_3748259537_911412125"
85+
86+
--B_3748259537_911412125
87+
Content-Type: text/plain; charset="UTF-8"
88+
Content-Transfer-Encoding: quoted-printable
89+
90+
91+
92+
--B_3748259537_911412125
93+
Content-Type: text/html; charset="UTF-8"
94+
Content-Transfer-Encoding: quoted-printable
95+
96+
<html><head>
97+
<meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3Dutf-8">
98+
</head>
99+
<body>Test</body>
100+
</html>
101+
102+
--B_3748259537_911412125--

tests/test_mail_parser.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@
6262
mail_test_14 = os.path.join(base_path, "mails", "mail_test_14")
6363
mail_test_15 = os.path.join(base_path, "mails", "mail_test_15")
6464
mail_test_16 = os.path.join(base_path, "mails", "mail_test_16")
65+
mail_test_17 = os.path.join(base_path, "mails", "mail_test_17")
6566
mail_malformed_1 = os.path.join(base_path, "mails", "mail_malformed_1")
6667
mail_malformed_2 = os.path.join(base_path, "mails", "mail_malformed_2")
6768
mail_malformed_3 = os.path.join(base_path, "mails", "mail_malformed_3")
@@ -702,3 +703,10 @@ def test_issue_139(self):
702703
"Subject": "Test spam mail (GTUBE)",
703704
"To": [("Recipient", "recipient@example.net")],
704705
}
706+
707+
def test_issue_136(self):
708+
mail = mailparser.parse_from_file(mail_test_17)
709+
assert mail.from_ == [
710+
("", "notificaccion-clientes@bbva.mx"),
711+
("", "notificaccion-clientes@bbva.mx"),
712+
]

0 commit comments

Comments
 (0)