Handle unquoted fullname when parsing email.
This commit is contained in:
@@ -4,6 +4,8 @@ import socket
|
||||
import email.Errors
|
||||
from fnmatch import fnmatchcase
|
||||
from email.Header import decode_header
|
||||
#import email.Utils
|
||||
import rfc822
|
||||
|
||||
ip4re = re.compile(r'^[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*$')
|
||||
|
||||
@@ -40,6 +42,25 @@ def iniplist(ipaddr,iplist):
|
||||
return True
|
||||
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):
|
||||
"""Split email into user,domain.
|
||||
|
||||
|
||||
@@ -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
|
||||
can be rejected without maintaining valid user lists.
|
||||
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
#!/usr/bin/env python
|
||||
# A simple milter that has grown quite a bit.
|
||||
# $Log$
|
||||
# Revision 1.117 2007/11/29 14:35:17 customdesigned
|
||||
# Packaging tweaks.
|
||||
#
|
||||
# Revision 1.116 2007/11/01 20:09:14 customdesigned
|
||||
# Support temperror policy in access.
|
||||
#
|
||||
@@ -171,11 +174,12 @@ import gc
|
||||
import anydbm
|
||||
import Milter.dsn as dsn
|
||||
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 fnmatch import fnmatchcase
|
||||
from email.Utils import getaddresses,parseaddr
|
||||
from email.Utils import getaddresses
|
||||
|
||||
# Import gossip if available
|
||||
try:
|
||||
@@ -563,7 +567,7 @@ class SPFPolicy(object):
|
||||
from Milter.cache import AddrCache
|
||||
|
||||
cbv_cache = AddrCache(renew=7)
|
||||
auto_whitelist = AddrCache(renew=30)
|
||||
auto_whitelist = AddrCache(renew=60)
|
||||
blacklist = AddrCache(renew=30)
|
||||
|
||||
class bmsMilter(Milter.Milter):
|
||||
|
||||
Reference in New Issue
Block a user