diff options
-rwxr-xr-x | check_bogofilter.py | 2 | ||||
-rwxr-xr-x | train_bogofilter.py | 21 | ||||
-rwxr-xr-x | train_dspam_from_folder | 49 |
3 files changed, 14 insertions, 58 deletions
diff --git a/check_bogofilter.py b/check_bogofilter.py index f75c696..cd0fb72 100755 --- a/check_bogofilter.py +++ b/check_bogofilter.py @@ -11,7 +11,7 @@ logging.basicConfig(format='%(levelname)s:%(funcName)s:%(message)s', level=logging.INFO) log = logging.getLogger('check_bogofilter') -if log.getEffectiveLevel() == logging.DEBUG: +if log.getEffectiveLevel() >= logging.DEBUG: imaplib.Debug = 4 pattern_uid = re.compile('\d+ \(UID (?P<uid>\d+)\)') diff --git a/train_bogofilter.py b/train_bogofilter.py index 48f20bc..beadacf 100755 --- a/train_bogofilter.py +++ b/train_bogofilter.py @@ -5,21 +5,26 @@ import logging import os.path import subprocess from ConfigParser import ConfigParser + logging.basicConfig(format='%(levelname)s:%(funcName)s:%(message)s', level=logging.DEBUG) +log = logging.getLogger('train_bogofilter') CMD_STR = "/usr/bin/bogofilter -%s" -imaplib.Debug = 4 + +if log.getEffectiveLevel() >= logging.DEBUG: + imaplib.Debug = 4 + def process_folder(proc_fld_name, bogofilter_param, end_fld_name, mark_seen=True): client.select(proc_fld_name) _, resp = client.search(None, "ALL") messages = resp[0].split() - logging.debug('messages = %s', messages) + log.debug('messages = %s', messages) proc_msg_count = 0 for msgId in messages: - logging.debug('msgId = %s', msgId) + log.debug('msgId = %s', msgId) typ, msg_data = client.fetch(msgId, '(RFC822)') msg = hparser.parsestr(msg_data[0][1]) @@ -29,13 +34,13 @@ def process_folder(proc_fld_name, bogofilter_param, end_fld_name, mark_seen=True shell=True) ret.communicate(input=msg_data[0][1]) - logging.debug("ret.returncode = %s", ret.returncode) + log.debug("ret.returncode = %s", ret.returncode) if ret.returncode == 0: del msg['X-Bogosity'] typ, newmsg = client.append(end_fld_name, '', '', msg.as_string(True)) - logging.debug("typ = %s", typ) - logging.debug("newmsg = %s", newmsg) + log.debug("typ = %s", typ) + log.debug("newmsg = %s", newmsg) # if mark_seen: # client.store(newmsg, '+FLAGS', r'(\Seen)') if typ != 'OK': @@ -65,11 +70,11 @@ client = imaplib.IMAP4_SSL(server) client.login(login, password) for box in [('Junk', 's', 'Trash', True), ('Ham', 'n', 'INBOX', False)]: - logging.debug('box = %s', box) + log.debug('box = %s', box) # processedCounter += process_folder(box[0], box[1], box[2], box[3) processedCounter += process_folder(*box) client.logout() if processedCounter > 0: - logging.info("Processed %d spam messages.", processedCounter) + log.info("Processed %d spam messages.", processedCounter) diff --git a/train_dspam_from_folder b/train_dspam_from_folder deleted file mode 100755 index 6cc9323..0000000 --- a/train_dspam_from_folder +++ /dev/null @@ -1,49 +0,0 @@ -#!/usr/bin/python -# Mind you, we have only python 2.4.3 on RHEL-5 -import imaplib, subprocess, email, sys -import email.Parser -from ConfigParser import ConfigParser - -cmd_string = "/usr/bin/dspam --user dspam --class=spam "\ - + "--source=error --deliver=summary --stdout --signature='%s'" - -DEBUG=False - -def debug(msg): - if DEBUG: - print >>sys.stderr,msg - -hparser = email.Parser.Parser() -config = ConfigParser() -config.read("/etc/dspam-imap-train.cfg") - -login = config.get("imap-training","login") -password = config.get("imap-training","password") -client = imaplib.IMAP4_SSL("luther.ceplovi.cz") -client.login(login, password) -client.select("Public folders/Junk") -status, resp = client.search(None, "ALL") -messages = resp[0].split() -processedCounter = 0 -debug(messages) - -for msgId in messages: - # or no .PEEK ... do I want to mark a message as Seen? - typ, msg_data = client.fetch(msgId, '(BODY.PEEK[HEADER.FIELDS (SUBJECT FROM X-DSPAM-SIGNATURE)])') - debug("msgId = %s" % msgId) - headers = hparser.parsestr(msg_data[0][1],headersonly=True) - debug("headers:\n%s" % headers) - if 'X-Dspam-Signature' in headers.keys(): - ret = subprocess.Popen(cmd_string \ - % headers['X-Dspam-Signature'], shell=True).wait() - if ret == 0: - typ, response = client.store(msgId, '+FLAGS', r'(\Deleted)') - processedCounter += 1 - else: - raise OSError, "dspam finished with failure code: %d" % ret - -client.expunge() -client.close() -client.logout() -if processedCounter > 0: - debug("Processed %d spam messages." % processedCounter) |