Seit vielen Jahren verwende ich das IMAP-Protokoll zum Zugriff auf alle meine Mail-Adressen. Doch leider nimmt die Mailflut immer mehr zu, und das stört.
Bis zum heutigen Tag habe ich mich „Regeln“ in Apple Mail beholfen, um Mails beim Eintreffen in die entsprechenden Unterordner abzulegen. Seit ich aber einen Laptop und ein iPhone besitze und zunehmend auch unterwegs Mails abrufe, wäre es äusserst nützlich, wenn ich eingehende Mails vollständig automatisch serverseitig vorsortieren und in Unterordner ablegen könnte.
Bisher war ich dazu genötigt, die Regeln von Apple Mail auf meiner Workstation zu Hause auf den Laptop zu übertragen. Immer wieder habe ich mir dabei vorgenommen, diese Redundanz aufzuheben. Heute ist es nun soweit!
Was tun? Wer einen dedizierten Mailserver im Keller stehen hat, wird sich auf procmail-Scripts stützen (ich habe auch schon darüber berichtet), die eingehende E-Mails nach bestimmten Kriterien in Unterordner verschieben. Dies ist für mich keine Option, weil mein von Genotec betriebener Mailserver keinen Shellzugriff bietet. Auch bietet der Hoster keine anständige Möglichkeit an, serverbasierte Filter einzurichten.
Heute nun bin ich via einer diesbezüglichen Frage auf der Community Serverfault auf imapfilter gestossen.
Installation
Zuerst installiert man sich das Paket unter Debian auf einem ans Internet angeschlossenen Server, der nonstopp läuft:
apt-get install imapfilter
Filterregeln erstellen
Anschliessend schreibt man sich mit der Sprache Lua (vgl. die Beispiele Rotating email into your inbox using imapfilter sowie sample.config.lua.txt) entsprechende Filter-Rezepte und legt diese nach einem chmod 600 * im Homefolder beispielsweise unter ~/.imapfilter/filter/ ab.
Nachfolgend ein solches „Rezept“ für einen meiner Mailkonti:
mbox = IMAP { server = 'mail.server.tld', username = 'user@domain.com', password = '********', ssl = 'ssl3' } -- Facebook messages = mbox.INBOX:contain_from('facebookmail.com') messages:move_messages(mbox['Facebook']) ... -- AHC messages = mbox.INBOX:contain_field('List-ID','gi-ch.googlegroups.com') messages:move_messages(mbox['AHC']) ...
Wie man anhand dieses Beispiel sieht, kann man jedes beliebige Feld des Mail-Headers auswerten. Als Hilfe für alle verfügbaren contain_X-Befehle sei auf die Dokumentation unter imapfilter_config – imapfilter configuration file verwiesen. Es gibt auch noch andere Befehle, die es ermöglichen, noch deutlich feingranuliertere Regeln zu programmieren.
Hat man wie ich mehrere Mail-Konti, die abgegrast werden sollen, erstellt man entsprechende Filter für jedes Konto und legt diese im selben Ordner unter einem aussagekräftigen Namen ab.
Shell-Script schreiben
Damit man diese nun alle auf’s Mal durchackern lassen kann, empfiehlt sich, ein kleines Shell-Script zu schreiben:
#!/bin/sh IMAPFILTER=`which imapfilter` RECIPESROOT="~/.imapfilter/filter" cd $RECIPESROOT for RECIPE in * do #echo "Running $IMAPFILTER -c '$RECIPESROOT/$RECIPE'" $IMAPFILTER -c "$RECIPESROOT/$RECIPE" done exit 0
Cron-Job einrichten
Anschliessend richtet man einen Cron-Job ein, der die Mailserver beispielsweise alle 5 Minuten nach neuen Nachrichten abfragt und je nachdem die Filterregeln anwendet:
*/5 * * * * /usr/local/bin/imapfilter.sh
Fertig ist der kostenlose, transparente Filterservice für eingehende Mails.
3 Kommentare Kommentare
Danke für die */5 Notation in der crontab :-)
imapfilter kann auch von Haus aus mehrere Konten abgrasen, einfach eine zweite Mailbox definieren:
mbox = IMAP {…}
mbox2 = IMAP {…}
Und dann weiter unten diese nutzen zum Filtern:
messages = mbox.INBOX…
messages2 = mbox2.INBOX…
Man kann damit auch Mails über Accountgrenzen hinweg verschieben.
Danke passt perfekt für meine Belange und ist innerhalb von 5 Minuten super simpel eingerichtet.
ich hab das beispiel verwendet, bekomme aber folgenden fehler: imapfilter_ file.txt:1: attempt to call global ‚IMAP‘ (a nil value). hat jemand eine idee woran es liegen könnte?