Ximian Evolution, der Outlook-Klon für Linux, erfreut sich in der Open Source-Welt großer Beliebtheit. Spam hingegen ist ein Dorn im Auge jedes Anwenders. Aber auch dagegen kann man etwas tun: Eine Kombination des Programmpakets SpamAssassin mit den Filtermöglichkeiten von Evolution sorgt für Ruhe.
Dieser Artikel zeigt nur wie man Evolution und SpamAssassin miteinander verbindet, die Installation beider Komponenten bleibt dem User überlassen. Auf RPM basierende Systeme dürften bei rpmseek.com mit passenden Paketen versorgt werden, Debian-User dürften mit apt-get zum gewünschten Ergebnis kommen, und sollte all das nicht helfen gibt es immer noch Quellpakete.
Alle in diesem Artikel aufgeführten Befehle funktionieren unter Mandrake Linux, für andere Distributionen müssen evtl. Anpassungen erfolgen. SpamAssassin kam in der Version 2.61 zum Einsatz, Evolution in der Version 1.4.4.
Das Programmpaket SpamAssassin bringt gleich mehrere für den Gebrauch interessante Dateien mit: spamassassin ist ein standalone Programm zum checken von Mails, spamc ist ein auf dem Dämon spamd beruhendes Programm und sa-learn schließlich dient zum verbessern der Resultate.
Für den dauerhaften Gebrauch empfiehlt sich die Nutzung der Kombination spamd / spamc, da diese einen erheblichen Geschwindigkeitsvorteil gegenüber spamassassin bieten. Die Einrichtung ist nicht kompliziert: Sobald der Dämon spamd läuft (/etc/init.d/spamassassin start) können mit spamc Mails bzw. Dateien auf Spamverdacht hin untersucht werden. Testen kann man dies, indem man eine Mail abspeichert und sie als Input für spamc verwendet: spamc -c < datei sollte etwas wie 7.8/5.0 zurückgeben. Kommt ein 0.0/0.0 als Ausgabe dann ist an irgend einer Stelle ein Fehler aufgetreten, evtl. läuft spamd nicht.
Sobald die Prüfung von Mails mit Hilfe von spamc möglich ist kann man zum nächsten Schritt übergehen, es wird ein kleines Shell-Skript für die Integration in Evolution benötigt.
Das benötigte Skript ist sehr simpel, ein wahrer Einzeiler (lässt man die Shebang außen vor):
#!/bin/sh spamc -c
Das ist schon alles. Die Mail als Input an spamc weiterleiten wird nachher von Evolution erledigt, daher reicht im Skript der einfache Aufruf. Auffällig dürfte nur die bisher unbekannte Option -c sein: Sie weist spamc an, die einkommenden Daten zu prüfen. Zur Erkennung ob Spam oder nicht wird ein passender Rückgabewert zurückgegeben, im Falle Spam eine 1, ansonsten eine 0. Genau dieses Verhalten macht sich Evolution bei seinen Filtern zu nutze.
Bevor es an den eigentlichen Filter geht sollte man sich einen Ordner für die aussortierten Mails einrichten. Auch SpamAssassin ist nicht perfekt, lässt man als Spam erkannte Mails sofort löschen riskiert man den Verlust evtl. wichtiger Mails. Den Ordner kann man via Rechtsklick auf den Eingang anlegen, als Name bietet sich „Spam” geradezu an. Alles andere geht natürlich auch.
Jetzt legt man im Evolution via Werkzeuge -> Filter... -> Hinzufügen [Screenshot 1] einen neuen Filter für den Eingang an [Screenshot 2]. Der Regelname ist frei wählbar, sollte aber sprechend sein. Im Bereich Falls ist folgendes einzutragen: Die Nachricht soll an einen Befehl im Terminal weitergeleitet werden, als Skript trägt man den vollständigen Pfad zum eben geschriebenem spamc-filter.sh ein. Weiterhin wird liefert nicht und als Wert dafür 0 eingetragen. Der Dann-Bereich sollte erwähnen, dass die Mail in den erstellten Spam-Ordner verschoben wird [Screenshot 3]. Das war's!
Sobald man die Fenster mit einem Klick auf OK geschlossen hat ist der Filter aktiv, von nun an sollte jede Mail durch spamc gejagt werden bevor sie angezeigt wird. Spam-Mails werden dabei automatisch in den Spam-Ordner verschoben, was in Evolution 1.4.4 leider erst nach einem manuellen Update des Eingangs (via Strg +
Sollten zu viele Spam-Mails spamc passieren ohne gefiltert zu werden kann man zunächst an seinen Präferenzen tüfteln, welche sich in der Datei ~/.spamassassin/user_prefs verbergen. Interessant ist die Einstellung required_hits: Sie legt fest, wie viele Punkte (SpamAssassin vergibt für bestimmte Eigenschaften eine bestimmte Anzahl Punkte) eine Mail haben muss um als Spam zu gelten. Standard ist 5.0, ich für meinen Teil habe diesen Wert auf 2.2 gesetzt und erziele damit gute Ergebnisse.
Um die Ergebnisse weiter zu verbessern taugt das Programm sa-learn etwas. Man braucht nur ein paar abgespeicherte und nach Spam oder Ham (so nennt man Mails die kein Spam sind) sortierte Mails, welche man dann an sa-learn übergibt. Das Programm wertet die Mails schließlich aus, wobei neue Eigenschaften für die Unterscheidung zwischen Spam und Ham gesucht werden. Wird sa-learn fündig werden die Erkenntnisse abgespeichert, und SpamAssassin kann Mails besser unterscheiden. Wichtig sind zwei Parameter für sa-learn: --ham und --spam. Ersteren sollte man anwenden wenn man Ham-Mails übergibt, zweiteren wenn man Spam-Mails übergibt. In einem Aufruf sieht das wie folgt aus:
sa-learn --ham Mails/ham* sa-learn --spam Mails/spam*
Die einzige Ausgabe von sa-learn ist die Zahl der gesichteten Mails und die Zahl der Mails aus denen etwas gelernt wurde.
Damit spamc nach dem nächsten Neustart nicht einfach den Geist aufgibt sollte man es noch automatisch starten lassen, bspw. durch symbolische Links zum Init-Skript in den gewünschten Runlevel-Verzeichnissen (z.B. /etc/rc5.d/). Den Aufruf von sa-learn (inkl. löschen von bearbeiteten Mails) könnte man noch in einem Shell-Skript unterbringen, welches man täglich automatisch via cron aufruft.

Screenshot 1: Menü Werkzeuge -> Filter

Screenshot 3: Die vollständige Regel