Handle unquoted fullname when parsing email.
This commit is contained in:
@@ -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.
|
||||||
|
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|
||||||
|
|||||||
@@ -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):
|
||||||
|
|||||||
Reference in New Issue
Block a user