Don't innoculate with SCREENED mail.
This commit is contained in:
@@ -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.23 2005/08/17 19:35:27 customdesigned
|
||||||
|
# Send DSN before adding message to quarantine.
|
||||||
|
#
|
||||||
# Revision 1.22 2005/08/11 22:17:58 customdesigned
|
# Revision 1.22 2005/08/11 22:17:58 customdesigned
|
||||||
# Consider SMTP AUTH connections internal.
|
# Consider SMTP AUTH connections internal.
|
||||||
#
|
#
|
||||||
@@ -665,7 +668,8 @@ class bmsMilter(Milter.Milter):
|
|||||||
self.new_headers = []
|
self.new_headers = []
|
||||||
self.recipients = []
|
self.recipients = []
|
||||||
self.cbv_needed = None
|
self.cbv_needed = None
|
||||||
t = parse_addr(f.lower())
|
t = parse_addr(f)
|
||||||
|
if len(t) == 2: t[1] = t[1].lower()
|
||||||
self.canon_from = '@'.join(t)
|
self.canon_from = '@'.join(t)
|
||||||
|
|
||||||
# Check SMTP AUTH, also available:
|
# Check SMTP AUTH, also available:
|
||||||
@@ -718,14 +722,13 @@ class bmsMilter(Milter.Milter):
|
|||||||
if not (self.internal_connection or self.trusted_relay) \
|
if not (self.internal_connection or self.trusted_relay) \
|
||||||
and self.connectip and spf:
|
and self.connectip and spf:
|
||||||
return self.check_spf()
|
return self.check_spf()
|
||||||
|
self.spf = None
|
||||||
return Milter.CONTINUE
|
return Milter.CONTINUE
|
||||||
|
|
||||||
def check_spf(self):
|
def check_spf(self):
|
||||||
t = parse_addr(self.mailfrom)
|
|
||||||
if len(t) == 2: t[1] = t[1].lower()
|
|
||||||
receiver = self.receiver
|
receiver = self.receiver
|
||||||
q = spf.query(self.connectip,'@'.join(t),self.hello_name,receiver=receiver,
|
q = spf.query(self.connectip,self.canon_from,self.hello_name,
|
||||||
strict=False)
|
receiver=receiver,strict=False)
|
||||||
q.set_default_explanation(
|
q.set_default_explanation(
|
||||||
'SPF fail: see http://openspf.com/why.html?sender=%s&ip=%s' % (q.s,q.i))
|
'SPF fail: see http://openspf.com/why.html?sender=%s&ip=%s' % (q.s,q.i))
|
||||||
res,code,txt = q.check()
|
res,code,txt = q.check()
|
||||||
@@ -1154,23 +1157,26 @@ class bmsMilter(Milter.Milter):
|
|||||||
screener = dspam_screener[self.id % len(dspam_screener)]
|
screener = dspam_screener[self.id % len(dspam_screener)]
|
||||||
if not ds.check_spam(screener,txt,self.recipients,
|
if not ds.check_spam(screener,txt,self.recipients,
|
||||||
classify=True,quarantine=False):
|
classify=True,quarantine=False):
|
||||||
self.fp = None
|
|
||||||
if self.reject_spam:
|
if self.reject_spam:
|
||||||
self.log("DSPAM:",screener,
|
self.log("DSPAM:",screener,
|
||||||
'REJECT: X-DSpam-Score: %f' % ds.probability)
|
'REJECT: X-DSpam-Score: %f' % ds.probability)
|
||||||
self.setreply('550','5.7.1','Your Message looks spammy')
|
self.setreply('550','5.7.1','Your Message looks spammy')
|
||||||
|
self.fp = None
|
||||||
return Milter.REJECT
|
return Milter.REJECT
|
||||||
self.log("DSPAM:",screener,"SCREENED")
|
self.log("DSPAM:",screener,"SCREENED")
|
||||||
if self.spf:
|
if self.spf:
|
||||||
# check that sender accepts quarantine DSN
|
# check that sender accepts quarantine DSN
|
||||||
msg = mime.message_from_file(StringIO.StringIO(txt))
|
self.fp.seek(0)
|
||||||
|
msg = mime.message_from_file(self.fp)
|
||||||
rc = self.send_dsn(self.spf,msg,'quarantine.txt')
|
rc = self.send_dsn(self.spf,msg,'quarantine.txt')
|
||||||
del msg
|
|
||||||
if rc != Milter.CONTINUE:
|
if rc != Milter.CONTINUE:
|
||||||
|
self.fp = None
|
||||||
return rc
|
return rc
|
||||||
ds.check_spam(screener,txt,self.recipients,quarantine=True,
|
del msg
|
||||||
force_result=dspam.DSR_ISSPAM)
|
if not ds.check_spam(screener,txt,self.recipients,classify=True):
|
||||||
return Milter.DISCARD
|
self.fp = None
|
||||||
|
return Milter.DISCARD
|
||||||
|
# Message no longer looks spammy, deliver normally. We lied in the DSN.
|
||||||
return modified
|
return modified
|
||||||
|
|
||||||
def eom(self):
|
def eom(self):
|
||||||
|
|||||||
Reference in New Issue
Block a user