Handle unquoted fullname when parsing email.

This commit is contained in:
Stuart Gathman
2008-01-09 20:15:49 +00:00
parent 10f4f2613e
commit 632e7b4248
3 changed files with 33 additions and 3 deletions
+21
View File
@@ -4,6 +4,8 @@ import socket
import email.Errors import email.Errors
from fnmatch import fnmatchcase from fnmatch import fnmatchcase
from email.Header import decode_header from email.Header import decode_header
#import email.Utils
import rfc822
ip4re = re.compile(r'^[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*$') ip4re = re.compile(r'^[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*$')
@@ -40,6 +42,25 @@ def iniplist(ipaddr,iplist):
return True return True
return False return False
def parseaddr(t):
"""Split email into Fullname and address.
>>> 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')
"""
#return email.Utils.parseaddr(t)
res = rfc822.parseaddr(t)
if not res[0]:
pos = t.find('<')
if pos > 0:
return rfc822.parseaddr('"%s" %s' % (t[:pos].strip(),t[pos:]))
return res
def parse_addr(t): def parse_addr(t):
"""Split email into user,domain. """Split email into user,domain.
+5
View File
@@ -1,3 +1,8 @@
Add parseaddr test case for 'foo@bar.com <baz@barf.biz>'
Check ESMTP NOTIFY before sending real DSNs. Just use CBV if DSNs are
not wanted.
Support CBV to local domains and cache results so that invalid users Support CBV to local domains and cache results so that invalid users
can be rejected without maintaining valid user lists. can be rejected without maintaining valid user lists.
+7 -3
View File
@@ -1,6 +1,9 @@
#!/usr/bin/env python #!/usr/bin/env python
# A simple milter that has grown quite a bit. # A simple milter that has grown quite a bit.
# $Log$ # $Log$
# Revision 1.117 2007/11/29 14:35:17 customdesigned
# Packaging tweaks.
#
# Revision 1.116 2007/11/01 20:09:14 customdesigned # Revision 1.116 2007/11/01 20:09:14 customdesigned
# Support temperror policy in access. # Support temperror policy in access.
# #
@@ -171,11 +174,12 @@ import gc
import anydbm import anydbm
import Milter.dsn as dsn import Milter.dsn as dsn
from Milter.dynip import is_dynip as dynip from Milter.dynip import is_dynip as dynip
from Milter.utils import iniplist,parse_addr,parse_header,ip4re,addr2bin from Milter.utils import \
iniplist,parse_addr,parse_header,ip4re,addr2bin,parseaddr
from Milter.config import MilterConfigParser from Milter.config import MilterConfigParser
from fnmatch import fnmatchcase from fnmatch import fnmatchcase
from email.Utils import getaddresses,parseaddr from email.Utils import getaddresses
# Import gossip if available # Import gossip if available
try: try:
@@ -563,7 +567,7 @@ class SPFPolicy(object):
from Milter.cache import AddrCache from Milter.cache import AddrCache
cbv_cache = AddrCache(renew=7) cbv_cache = AddrCache(renew=7)
auto_whitelist = AddrCache(renew=30) auto_whitelist = AddrCache(renew=60)
blacklist = AddrCache(renew=30) blacklist = AddrCache(renew=30)
class bmsMilter(Milter.Milter): class bmsMilter(Milter.Milter):