Repository navigation
Labels
stdlibStandard Library Python modules in the Lib/ directoryStandard Library Python modules in the Lib/ directorytopic-emailtype-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error
Description
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
GitHub fields:
assignee = None
closed_at = None
created_at = <Date 2004-09-09.20:43:42.000>
labels = ['3.7', 'type-bug', 'library', 'expert-email']
title = 'email.Utils.parseaddr fails to parse valid addresses'
updated_at = <Date 2018-05-16.19:01:00.100>
user = 'https://bugs.python.org/melicertes'bugs.python.org fields:
activity = <Date 2018-05-16.19:01:00.100>
actor = 'ioanatia'
assignee = 'none'
closed = False
closed_date = None
closer = None
components = ['Library (Lib)', 'email']
creation = <Date 2004-09-09.20:43:42.000>
creator = 'melicertes'
dependencies = []
files = []
hgrepos = []
issue_num = 1025395
keywords = ['patch']
message_count = 10.0
messages = ['22413', '59669', '59670', '59671', '59735', '59737', '59751', '59753', '301485', '301504']
nosy_count = 10.0
nosy_names = ['barry', 'melicertes', 'christian.heimes', 'sdgathman', 'eric.araujo', 'r.david.murray', 'sascha_silbe', 'martin.panter', 'thehesiod', 'ioanatia']
pr_nums = ['142', '6917']
priority = 'normal'
resolution = None
stage = 'patch review'
status = 'open'
superseder = None
type = 'behavior'
url = 'https://bugs.python.org/issue1025395'
versions = ['Python 2.7', 'Python 3.2', 'Python 3.3', 'Python 3.6', 'Python 3.7']Linked PRs
Metadata
Metadata
Assignees
Labels
stdlibStandard Library Python modules in the Lib/ directoryStandard Library Python modules in the Lib/ directorytopic-emailtype-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error
Activity
melicertes commentedon Sep 9, 2004
email.Utils.parseaddr() does not successfully parse a
field value into a (comment, address) pair if the
address contains a source route with more than one hop.
i.e., it is successfully parses this:
"God" <@hop1.org:jeff@spec.org>
to get the address <jeff@spec.org>, but it fails to do
the same if supplied with a 2-hop source route:
"God" <@hop1.org,@hop2.net:jeff@spec.org>
In this case, it gets the comment ("God") right, but
fails to extract the address.
Multi-hop source routes, while deprecated, are still
valid in rfc2822.
sdgathman commentedon Jan 10, 2008
# A quick and very dirty fix for common broken cases, with test cases.
>>> parseaddr('user@example.com') ('', 'user@example.com') >>> parseaddr('"Full Name" <foo@example.com>') ('Full Name', 'foo@example.com') >>> parseaddr('spam@viagra.com <foo@example.com>') ('spam@viagra.com', 'foo@example.com') >>> parseaddr('"God" <@hop1.org,@hop2.net:jeff@spec.org>') ('God', 'jeff@spec.org') """ #return email.Utils.parseaddr(t) res = rfc822.parseaddr(t) # dirty fix for some broken cases if not res[0]: pos = t.find('<') if pos > 0 and t[-1] == '>': addrspec = t[pos+1:-1] pos1 = addrspec.rfind(':') if pos1 > 0: addrspec = addrspec[pos1+1:] return rfc822.parseaddr('"%s" <%s>' % (t[:pos].strip(),addrspec)) if not res[1]: pos = t.find('<') if pos > 0 and t[-1] == '>': addrspec = t[pos+1:-1] pos1 = addrspec.rfind(':') if pos1 > 0: addrspec = addrspec[pos1+1:] return rfc822.parseaddr('%s<%s>' % (t[:pos].strip(),addrspec)) return ressdgathman commentedon Jan 10, 2008
Ok, I see the '@' is technically not allowed in an atom. But it either
needs to throw an invalid syntax exception, or heuristically return
something reasonable.
sdgathman commentedon Jan 10, 2008
Repeating because previous real life test case was rejected as 'spam':
Getting the wrong part as the actual email to boot! Checked 2.4 and 2.5.
sdgathman commentedon Jan 11, 2008
Same or related issues: bpo-1221, bpo-1409460
sdgathman commentedon Jan 11, 2008
Test cases so far: >>> parseaddr('user@example.com') ('', 'user@example.com') >>> parseaddr('"Full Name" <foo@example.com>') ('Full Name', 'foo@example.com') >>> parseaddr('spam@spammer.com <foo@example.com>') ('spam@spammer.com', 'foo@example.com') >>> parseaddr('God@heaven <@hop1.org,@hop2.net:jeff@spec.org>') ('God@heaven', 'jeff@spec.org') >>> parseaddr('Real Name ((comment)) <addr...@example.com>') ('Real Name', 'addr...@example.com') >>> parseaddr('a(WRONG)@b') ('', 'a@b')tiran commentedon Jan 11, 2008
An example from bpo-1221:
>>> email.Utils.parseaddr("a(WRONG)@b") ('WRONG WRONG', 'a@b')sdgathman commentedon Jan 11, 2008
tiran: yes, but that is the wrong answer, and that example is already in
the testcase list (with what I believe is the right answer).
4 remaining items
thehesiod commentedon Sep 6, 2017
totally messed up :)
thehesiod commentedon Sep 6, 2017
looks like these were meant to be internal methods, retracting new issues
pythongh-40889: Fix `email.utils.parseaddr` to handle multiple hops
pythongh-40889: Fix `email.utils.parseaddr` to handle multiple hops
pythongh-40889: Fix `email.utils.parseaddr` to handle multiple hops
pythongh-40889: Fix `email.utils.parseaddr` to handle routes with mul…
pythongh-40889: Fix `email.utils.parseaddr` to handle routes with mul…
pythongh-40889: Fix `email.utils.parseaddr` to handle routes with mul…