UserPreferences

PycMail


Note: This wiki is now frozen; you can no longer edit it, and no interactive features work.

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()