1. spambayes with pycmail
Pycmail is a mail filtering program for Unix systems written in Python. It can be downloaded from http://melkor.dnp.fmph.uniba.sk/~garabik/pycmail/ and is also available as a Debian package.
As it is configured by a python script ~/.pycmailrc, spambayes can be seamlessly integrated and uses the already running python process.
An example .pycmailrc would look like:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | # pycmailrc with spambayes integration
import os, sys, textwrap
from spambayes import hammie, hammiebulk, storage
md = USERHOME+"/Mail/"
# --- Sorting and whitelist ---
#
# (this rules serve also as whitelist, put other sorting below the spam-filter)
if InHeader("List-Post", "docutils"):
Set(MailDir(md+"docutils-in"))
Stop()
# --- Blacklist ---
if InHeader("X-TUD-Spam-Level", "****") \
or InHeader("From", "virusalert@tu-dresden.de"):
Set(DevNull())
# Set(MailDir(md+"spam"))
Stop()
# interface to spambayes
# # lock to have only one invocation per time (with dotlock from pycmail)
# bayeslockfile = ".spambayes"
#
# if not(dotlocked(bayeslockfile)):
# dotlock(bayeslockfile, sleeptime=8, retries=5, locktimeout=60, suspend=0)
db_name, db_type = storage.database_type([])
Debug("Database: %s, Type %s"%(db_name, db_type), 5)
h = hammie.open(db_name, db_type) # database
# Test the message (in string variable msg)
spam_score, clues = h.score(msg, True)
del(h)
# remove the lock
# dotunlock(bayeslockfile)
Debug("spam: %f, ham: %f"%(hammiebulk.SPAM_THRESHOLD, hammiebulk.HAM_THRESHOLD), 4)
Debug(textwrap.fill("'%s' from '%s' got score %f"\
%(SUBJECT, FROM, spam_score), subsequent_indent=" "*7), 2)
if (spam_score >= hammiebulk.SPAM_THRESHOLD):
Debug("spambayes: Spam", 3)
Set(MailDir(md+"spam")) # sort to spam folder
Stop()
elif (spam_score <= hammiebulk.HAM_THRESHOLD):
Debug("spambayes: Ham", 3)
Stop() # leave in default folder
else:
Debug("spambayes: Unsure", 3)
Set(MailDir(md+"inbox")) # sort to incoming (unsure) folder
Stop() |
