From 017784b5a78d88485318fc4035051578110d2f58 Mon Sep 17 00:00:00 2001 From: Stuart Gathman <stuart@gathman.org> Date: Thu, 10 Jan 2008 16:41:04 +0000 Subject: [PATCH] Handle multi-hop source path in parseaddr. --- Milter/utils.py | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/Milter/utils.py b/Milter/utils.py index 6006b75..4ae09df 100644 --- a/Milter/utils.py +++ b/Milter/utils.py @@ -51,13 +51,28 @@ def parseaddr(t): ('Full Name', 'foo@example.com') >>> parseaddr('spam@viagra.com <foo@example.com>') ('spam@viagra.com', 'foo@example.com') + >>> parseaddr('God@heaven <@hop1.org,@hop2.net:jeff@spec.org>') + ('God@heaven', '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: - return rfc822.parseaddr('"%s" %s' % (t[:pos].strip(),t[pos:])) + 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 res -- GitLab