Es handelt sich um eine Anpassung von POPFile für den Einsatz auf Mailserver.
POPFile automatically sorts your email messages and fights spam.
POPFile verwendet einen Bayes-Klassifikator um Texte in bestimmte Klassen einzuordnen. Die Klassen können vom Benutzer frei festgelegt werden.
POPFile ist in der Lage zu erlernen welche Dokumentenart welcher Klasse zuzuordnen ist. Dazu muss der Benutzer fehlerhafte Zuordnungen korrigieren. Es dauert ein paar Nachrichten bis die Zuordnung richtig funktioniert.
Ursprünglich wurde POPFile im Mailprogramm am Arbeitsplatzrechner installiert.
Die Idee hinter diesem Projekt ist es, POPFile direkt am Mailserver zu integrieren. Somit können die E-Mails schon beim Empfang sortiert werden, und die Funktion ist ohne weiteren Aufwand auf jedem beliebigen Endgerät verfügbar.
Das Training der Klassifikators soll durch ein einfaches Verschieben der E-Mail in den richtigen Ordner erfolgen.
Am einfachsten der Anleitung aus dem uberspace Wiki folgen.
perl -MCPAN -e shell
cpan>install DBD::SQLite
cpan>quit
Installiere alle zusätzliche Software in das Verzeichnis ~/opt/
mkdir ~/opt
cd ~/opt
git clone https://github.com/andresth/POPFile.git
Danach POPFile einmal starten, damit die Datenbank und die Konfigurationsdatei angelegt werden.
cd ~/opt/POPFile
perl ./pipe.pl
Es wird keine sichtbare Ausgabe erscheinen. Man kann das Programm aber einfach per Strg+C
beenden.
Für den Ordner INBOX
muss die Dokumentenklasse per Hand angelegt werden. Dies geschieht wie folgt:
cd ~/opt/POPFile
perl ./createbucket.pl inbox
Dieser Schritt setzt voraus, dass maildrop bereits eingerichtet wurde (siehe uberspace wiki).
Folgende Zeilen sind der Datei ~/.mailfilter
hinzuzufügen:
Als erstes muss die Nachricht durch den Klassifikator geleitet werden.
xfilter "cd $HOME/opt/POPFile && /usr/bin/perl ./pipe.pl 2> $HOME/popfile.err"
Anschließend muss der Zielordner bestimmt werden. Dazu wird das Skript find-maildir.pl
aufgerufen werden.
Die Variable $MAILDIR
muss auf das Mailverzeichnis verweisen.
DestDir = %MAILDIR
/^X-Text-Classification: (.*)$/:h
if ($MATCH1)
{
DestDir = `/usr/bin/perl $HOME/opt/POPFile/find-maildir.pl "$MAILDIR" "$MATCH1"`
if ($DestDir eq "")
{
DestDir = $MAILDIR
}
}
Zu guter Letzt wird die Mail zugestellt.
to "$DestDir"
Fehlerhaft klassifizierte Nachrichten müssen im Mailprogramm in den richtigen Ordner verschoben werden. Das Skript teach.pl
sucht diese Nachrichten und lernt sie an. Dazu muss es regelmäßig per cronjob
aufgerufen werden.
crontab -e
Folgende Zeile muss hinzugefügt werden.
0 * * * * cd $HOME/opt/POPFile && /usr/bin/perl ./teach.pl /path/to/maildir
Dadurch werden jede Stunde die bereits vorhandenen Nachrichten durchsucht, um den Klassifizierer zu trainieren. /path/to/maildir
muss durch den Pfad zum E-Mail Verzeichnis ersetzt werden.
- POPFile kann nicht mit Leerzeichen umgehen. Diese werden in einen Unterstrich umgewandelt. Ein Unterstrich im Ordnernamen hat somit die gleiche Bedeutung wie ein Leerzeichen. D.h.
Test_Ordner == Test Ordner
. - Groß- und Kleinschreibung werden nicht berücksichtigt.
- Es wird nur die oberste Ebene an Ordnern berücksichtigt.
- Ordner die mit einer Zahl beginnen werden ignoriert (um nicht mit den uberspace Spamfiltern in Konflikt zu kommen).
- Die Standard IMAP Ordner (Sent, Spam, Archive, Drafts, Trash) werden ignoriert.
- Wenn ein Ordner umbenannt wird, dann wird die zugehörige Klasse gelöscht und die E-Mails müssen neu gelernt werden.
Es gibt eine Reihe von Skripten mit denen sich POPFile warten lässt.
- clearbucket.pl
Leert den Inhalt einer Dokumentenklasse.
perl ./clearbucket.pl Klasse
- createbucket.pl
Erzeugt eine neue leere Dokumentenklasse.
perl ./createbucket.pl Klasse
- deletebucket.pl
Löscht die komplette Dokumentenklasse.
perl ./deletebucket.pl Klasse
- getbuckets.pl
Gibt eine Liste der verfügbaren Dokumentenklassen aus. - insert.pl
Trainiert eine Dokumentenklasse anhand von Dateien. (z.B. um eine Klasse gezielt anzulernen)
perl ./insert.pl Klasse Dateien
- remove.pl
Entfernt Dateien aus einer Dokumentenklasse.
perl ./remove.pl Klasse Dateien
- isbucket.pl
Prüft ob eine Dokumentenklasse existiert.
perl ./isbucket.pl Klasse
- Unterstützung mehrerer E-Mail Konten
- Lernvorgang ereignisbassiert über einen Daemon lösen