From 4194c669aa1a9073d113e211ca6dadc10089c74e Mon Sep 17 00:00:00 2001 From: Ioana Tagirta Date: Fri, 8 Dec 2017 15:30:32 +0100 Subject: [PATCH] Fix email.utils.parseaddr to handle multiple hops --- Lib/email/_parseaddr.py | 2 ++ Lib/test/test_email/test_email.py | 6 ++++++ 2 files changed, 8 insertions(+) diff --git a/Lib/email/_parseaddr.py b/Lib/email/_parseaddr.py index cdfa3729adc79e..0e2e4881381d5e 100644 --- a/Lib/email/_parseaddr.py +++ b/Lib/email/_parseaddr.py @@ -338,6 +338,8 @@ def getrouteaddr(self): elif self.field[self.pos] == '@': self.pos += 1 expectroute = True + elif self.field[self.pos] == ',': + self.pos += 1 elif self.field[self.pos] == ':': self.pos += 1 else: diff --git a/Lib/test/test_email/test_email.py b/Lib/test/test_email/test_email.py index 621754cf753daa..3a24643fa54bb1 100644 --- a/Lib/test/test_email/test_email.py +++ b/Lib/test/test_email/test_email.py @@ -3141,6 +3141,12 @@ def test_parseaddr_preserves_spaces_in_local_part(self): self.assertEqual(('', 'merwok.wok.wok@xample.com'), utils.parseaddr('merwok. wok . wok@xample.com')) + def test_parseaddr_handles_obsolete_addressing(self): + self.assertEqual(('foobar', 'foo@bar.com'), + utils.parseaddr('"foobar" <@hop.org:foo@bar.com>')) + self.assertEqual(('foobar', 'foo@bar.com'), + utils.parseaddr('"foobar" <@hop1.org,@hop2.org:foo@bar.com>')) + def test_formataddr_does_not_quote_parens_in_quoted_string(self): addr = ("'foo@example.com' (foo@example.com)", 'foo@example.com')