Entry 1971
spamlearn
Submitted by anonymous
on July 1, 2009 at 2:56 p.m.
Language: Python. Code size: 3.0 KB.
#! /usr/bin/env python2.5 import rfc822 import os import re spam={} ham={} db=open("/mail/learned_mail", "r+") learned=db.readlines() re_readmail=re.compile("^(.*):2,[A-R]*S.*$") def spamd_user(mailfile): """Function to determine which userdb let this email thru""" mail=rfc822.Message(open(mailfile)) try: return mail['X-Spam-Queue'][mail['X-Spam-Queue'].index("<")+1:mail['X-Spam-Queue'].index(">")] except: return None def learn_mail(name): """Should we learn from this mail""" match= re_readmail.match(name) if match == None: return False elif match.groups()[0]+'\n' in learned: return False else: return True def sa_learn(type, user, mailarray): """Call sa-learn for mailarray and learn them as typ in user's db""" for part in range(0,len(mailarray),50): #os.spawnvp(os.P_WAIT, "sa-learn", ["sa-learn", "-u "+user, "--dbpath="+os.path.join("/mail", user, ".spamassassin"), \ # "--"+type, "--no-sync"]+mailarray[part:part+50]) print "sa-learn", ["sa-learn", "-u "+user, "--dbpath="+os.path.join("/mail", user, ".spamassassin"), "--"+type, "--no-sync"]+mailarray[part:part+50] os.spawnvp(os.P_WAIT, "sa-learn", ["sa-learn", "-u "+user, "--dbpath="+os.path.join("/mail", user, ".spamassassin"), "--sync"]) for usermaildir in filter(os.path.isdir, [os.path.join("/mail", namn, ".maildir") for namn in os.listdir("/mail")]): if os.path.isdir(os.path.join(usermaildir, "cur")): for mail in filter(learn_mail, \ [os.path.join(usermaildir, "cur",mailfile) for mailfile in os.listdir(os.path.join(usermaildir, "cur"))]): try: ham[spamd_user(mail)]+=[mail] except: ham[spamd_user(mail)]=[mail] if os.path.isdir(os.path.join(usermaildir, ".Junk/cur")): for mail in filter(learn_mail, \ [os.path.join(usermaildir, ".Junk/cur",mailfile) for mailfile in os.listdir(os.path.join(usermaildir, ".Junk/cur"))]): try: spam[spamd_user(mail)]+=[mail] except: spam[spamd_user(mail)]=[mail] for spamassassinpath in filter(os.path.isdir, [os.path.join("/mail", namn, ".spamassassin") for namn in os.listdir("/mail")]): user=spamassassinpath[6:spamassassinpath.index("/",6)] if user in ham.keys(): sa_learn("ham", user, ham[user]) db.writelines([mail[:mail.index(":")]+"\n" for mail in ham[user]]) if user in spam.keys(): sa_learn("spam", user, spam[user]) db.writelines([mail[:mail.index(":")]+"\n" for mail in spam[user]]) db.close()
This snippet took 0.02 seconds to highlight.
Back to the Entry List or Home.