diff --git a/Milter/utils.py b/Milter/utils.py
index 6006b7583af72a1e9f5f9bd7ed5965044c51596d..4ae09dfa2a68483d5bd0ad9e1dfb598566b7b649 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