diff --git a/src/mailparser/core.py b/src/mailparser/core.py index b3da8a5..816df16 100644 --- a/src/mailparser/core.py +++ b/src/mailparser/core.py @@ -564,7 +564,12 @@ def __getattr__(self, name): # object headers elif name_header in ADDRESSES_HEADERS: h = decode_header_part(self.message.get(name_header, six.text_type())) - return email.utils.getaddresses([h]) + h_parsed = email.utils.getaddresses([h], strict=True) + return ( + h_parsed + if h_parsed != [("", "")] + else email.utils.getaddresses([h], strict=False) + ) # others headers else: diff --git a/tests/mails/mail_test_17 b/tests/mails/mail_test_17 new file mode 100644 index 0000000..1c406a8 --- /dev/null +++ b/tests/mails/mail_test_17 @@ -0,0 +1,102 @@ +Received: from apiron13.triara.com (200.57.129.98) by APCNHUB11.correo.local + (172.18.31.175) with Microsoft SMTP Server id 14.3.498.0; Mon, 10 Oct 2022 + 15:11:35 -0500 +Authentication-Results: mailb.triara.com; spf=None smtp.mailfrom=www-data@vps-051e4cda.vps.ovh.net +Received-SPF: None (mailb.triara.com: no sender authenticity + information available from domain of + www-data@vps-051e4cda.vps.ovh.net) identity=mailfrom; + client-ip=152.228.133.10; receiver=mailb.triara.com; + envelope-from="www-data@vps-051e4cda.vps.ovh.net"; + x-sender="www-data@vps-051e4cda.vps.ovh.net"; + x-conformance=spf_only +X-IPAS-Result: =?us-ascii?q?A0C0kgB4e0RjYQqF5JhaGgEBAQEBKwEBAQEDAQEBAQEBA?= + =?us-ascii?q?QMBAQEBAgIBAQEBAgEJAYFmTFMbAgFlBzFJKwEpEB8EC0IDA4RLXIgihXEtg?= + =?us-ascii?q?yULiwaKFWSFYyKBAgNfAQEBAQEBAQEBBAEEEgIRDwgGBAEBhVYBAQeEHAIjT?= + =?us-ascii?q?QECBAEBAQEDAgMBAQEBAQEDAQEBBAEBAQIBAwQEB0kFEgorhWgNgiIBhEkag?= + =?us-ascii?q?RkCBEobgweDDxEDBQulbodVgTKBAYNQAYELg1gngRgQgSYVAgEBAYFRhT4Fg?= + =?us-ascii?q?TgBgwqCJ4IvJ4FnQhKBA4U4Q08CAQEBF4ITgwoYgk4EmTN7BFIDMxEdEyMBC?= + =?us-ascii?q?QMLdxgDFAMFIQcDGQ8jDQ0EHQwDAwUlAwICGwcCAgMCBhMFAgJNNAgECAQrJ?= + =?us-ascii?q?A8FAgcvBQQvAh4EBQYRCAIWAgYEBAQEFQIQCAIIJhcHEzMZAQVZDgkhHAkfD?= + =?us-ascii?q?QUGEwMgbwVCDygvaSsdGweBDCokBBUDBAQDAgYTAyACDSkxFAQpEw8tBylxC?= + =?us-ascii?q?QIDImoDAwQoLAMJQAcoJAQ4B1g6BQMCECI8BgMJAwIkWYEkDRkFAw0XJggFN?= + =?us-ascii?q?xsECDwCBQZSEwIKEgMSDwkkSQ9KPjsXCB8PlVxigRE3AgEPCkFQLi6CR4EGg?= + =?us-ascii?q?jiWPYZ2hSsJgjSNH49qB4JOJG+LPpUwgRWEMaNAlxCJXYNjhw0CAoFEjAqFU?= + =?us-ascii?q?DWBWgyBW4FMWAEBggABCToOGQ+NfoMrhFqBI4R1VUQxAgEBGR4CBgEKAQEDC?= + =?us-ascii?q?QGCOohaAQE?= +IronPort-PHdr: A9a23:spSpFxSrnRjDE/aKheFpfAHQh9psomOdAWYlg6HP6ppLe6Wn9dL+J + k3W//wrh1jMDs3A8/wRre3Qvuj7XHAYp5OIsXQMaptJAgAaloAalhApKNCdEgijcafnMyc2F + YJcTEQj+G+7d05YBK4SfnX0pXu/pX4XExT7P0xpPOX8AIeUhMOyhai0/NXIbgNEiSD1aK5uL + BiwsQTat9UH5OkqYqc3xBzTp3JUeuNQjWp2LFOXlhz464++5plmuyhXvvsg8YZHX8CYN+wnU + qMdAD06Okgr/Nau7USaQFeE6nJaTH0N1B1WA07D4Q27Fpb9vy3mt/ZsjSyTPMn4V7cxClHAp + +9gTB7ljjtCNiZsqTyNzJYq3OQC+0nn/kQsi5TZa4yUKvdkK6bUfNcQA3ZbX89LXmpKBYbvC + ulHR+cHI+tcqJHw4lUUqh7rTxazG6bjwyNBrmHuxuhijr0sTQrK1Uo+B8lIt2rU6tP4KO1BN + IL9hLmN1jjFY/5MjH3i95eNfhk9qNmSRak1KZeIxBUkGwqDkE2L74v7P3WT2/hH4A35p6JwE + OmojWAgsQR4pDOik9w0hL7OgIYEorgr3Tth28NteIS1FEV3aJi6CIAWsD+acY17XpF6K1w= +IronPort-Data: A9a23:P1Ts4KAPg74kWhVW/xXjw5YqxClBgxIJ4kV8jS/XYbTApDoj0DRTm + 2AeXTvTO/uNM2v9e91wYIqzoEoOuZKBmIMyTANkpHpgZkwRpJueD7x1DKtR0wB+jCHnZBg6h + ynLQoCYdKjYdleF+lH3dOCJQUBUjcmgXqD7BPPPJhd/TAplTDZJoR94kobVuKYw6TSCK17L6 + I6aT/H3Ygf/gWcsazpMscpvlTs21BjMkGJA1rABTa0T1LPuvyF9JI4SI6i3M0z5TuF8dgJtb + 7+epF0R1jqxEyYFUrtJoJ6iGqE5auS60Ty1t5Zjc/PKbi6uCcAF+v1T2PI0MS+7gtgS9jx74 + I0lWZeYEW/FMkBQ8QgQe0EwLs1wAUFJ0IPuPWSdtcGP9HzfaULK+PJlPX4nAYJNr46bAUkWn + RAZAC4VdVXb2ru7nLm3Q69ynt9lK9freoUSphmMzxmAUKxgG8qTBfyRvpkBhF/chegWdRraT + 9UGdn9jZQjJSwNXIRJPVcszwOykjz/hayYer0yV46w6/wA/ySQoiOO1aYeOJ4HULSlTtkiiu + TzlrlvTOx8HOte/1j+12Wqx2taayEsXX6pITOXlp5aGmma7zWsWEBkXXF2wrNGwiUe3XdlWM + EUY9yApqbM7skesS5/4T3WFTGWsoAYHHoINSuBm4w2EjLTM+ECeGGhCSDNdADA7iCMobQADy + kOrm971Pg12qoSzcnWWx4iFkTznbED5MlQ+TSMDSAIE5fzqr4cykg/DQ75f/Eid0YGd9dbYn + GvikcQuu1kApZJbh/jrpzgrlxr2/cOZEWbZ8y2KBjrN0+9vWGKyT6KSgWU3DMqsz67AETFtW + UTofeDDt4gz4WmlznDlfQn0NOjBCwy5GDPdm0VzOJIq6i6g/XWuFagJvm8jeB03bJ1cJWa0C + KM2he+3zM8IVJdNRf8sC79d9+x7lPG4fTgYfquLMYARO8QZmPGvpXo0PhTJt4wSrKTcuftnY + crKGSpdJXEECex8xSHeegvu+e9D+8zK/kuCFfjTlkz5uZLHPS79YelfYDOzghURqfjsTPP9r + YoCaqNnCnx3C4XDX8Ug2ddMfABUdylgWMGeRg4+XrfrHzeK0VoJU5f5qY7NsaQ+90iJvo8kP + 01RmGcAoLY8uZEDARuScTU7NeriAZ1zpDQlJTdqOkionX4ufe5DKUvZm4QfJdEayQC78cNJc + g== +IronPort-HdrOrdr: A9a23:IE0U3q0tRN9Bymkrd2qGBQqjBNUkLtp133Aq2lEZdPWPSL36qy + nAppkmPHPP6Qr5O0tBpTn/AsW9qBrnnPYfi7X5W43SPjUO01HHEGgN1+Tf/wE= +X-IronPort-Anti-Spam-Filtered: true +Subject: =?UTF-8?B?VHJhbnNmZXJlbmNpYSBJbnRlcmJhbmNhcmlhIEJhbmNhIGVuIEzDrW5lYQ==?= +X-IronPort-AV: E=Sophos;i="5.95,173,1661835600"; + d="html'217?zip'217,48?scan'217,48,208,48,217";a="1030153556" +X-MGA-submission: =?us-ascii?q?MDFfnUeOjYtx/kPz1rQrHfQrNIBGcOsaef6Pxd?= + =?us-ascii?q?fYLajkW0aqpJS8e/pX+Kfz9sRkdcd5xyISxIOdF+YXiKE+ILG7RI8546?= + =?us-ascii?q?G6AgtU3PrBER1OQ5hnnprxu8FcYwakAkY4OSc=3D?= +Received: from vps-051e4cda.vps.ovh.net ([152.228.133.10]) by + apiron13.triara.com with ESMTP/TLS/ECDHE-RSA-AES128-GCM-SHA256; 10 Oct 2022 + 15:11:34 -0500 +Received: from vps-051e4cda.vps.ovh.net (localhost [127.0.0.1]) by + vps-051e4cda.vps.ovh.net (8.15.2/8.15.2/Debian-10) with ESMTP id + 29AKBWdZ005349 for ; Mon, 10 Oct 2022 + 20:11:32 GMT +Received: (from www-data@localhost) by vps-051e4cda.vps.ovh.net + (8.15.2/8.15.2/Submit) id 29AKBWwn005317; Mon, 10 Oct 2022 20:11:32 GMT +Date: Mon, 10 Oct 2022 20:11:32 +0000 +Message-ID: <202210102011.29AKBWwn005317@vps-051e4cda.vps.ovh.net> +To: +From: =?UTF-8?B?bm90aWZpY2FjY2lvbi1jbGllbnRlc0BiYnZhLm14?= + +Reply-To: +Return-Path: www-data@vps-051e4cda.vps.ovh.net +X-MS-Exchange-Organization-AuthSource: APCNHUB11.correo.local +X-MS-Exchange-Organization-AuthAs: Anonymous +Content-Type: multipart/mixed; boundary="B_3748259537_1769991493" +MIME-Version: 1.0 + +--B_3748259537_1769991493 +Content-Type: multipart/alternative; boundary="B_3748259537_911412125" + +--B_3748259537_911412125 +Content-Type: text/plain; charset="UTF-8" +Content-Transfer-Encoding: quoted-printable + + + +--B_3748259537_911412125 +Content-Type: text/html; charset="UTF-8" +Content-Transfer-Encoding: quoted-printable + + + + +Test + + +--B_3748259537_911412125-- diff --git a/tests/test_mail_parser.py b/tests/test_mail_parser.py index 0c650ec..5893ae7 100644 --- a/tests/test_mail_parser.py +++ b/tests/test_mail_parser.py @@ -62,6 +62,7 @@ mail_test_14 = os.path.join(base_path, "mails", "mail_test_14") mail_test_15 = os.path.join(base_path, "mails", "mail_test_15") mail_test_16 = os.path.join(base_path, "mails", "mail_test_16") +mail_test_17 = os.path.join(base_path, "mails", "mail_test_17") mail_malformed_1 = os.path.join(base_path, "mails", "mail_malformed_1") mail_malformed_2 = os.path.join(base_path, "mails", "mail_malformed_2") mail_malformed_3 = os.path.join(base_path, "mails", "mail_malformed_3") @@ -702,3 +703,10 @@ def test_issue_139(self): "Subject": "Test spam mail (GTUBE)", "To": [("Recipient", "recipient@example.net")], } + + def test_issue_136(self): + mail = mailparser.parse_from_file(mail_test_17) + assert mail.from_ == [ + ("", "notificaccion-clientes@bbva.mx"), + ("", "notificaccion-clientes@bbva.mx"), + ]