E-Mail Postfach mit imapfilter (vor)sortieren

Seit einiger Zeit verwende ich das IMAP Protokoll, um meine E-Mails auf meiner Workstation, meinem Laptop sowie meinem Smartphone abrufen zu können. Das IMAP Protokoll bietet den Vorteil Ordner zu erstellen und die Mails so zu Sortieren.

Allerdings störte ich mich zunehmend daran, die Mails selber in die Ordner abzulegen, ich wollte dies automatisieren.
Zunächst verwendete ich die Filterfunktion von Mozilla Thunderbird, allerdings wurde es mir auf Dauer zu mühsam, die neuen Filterregeln jeweils auf der Workstation wie auch auf dem Laptop einzutragen. Auf dem Smartphone gab es eine solche Möglichkeit erst gar nicht.
So suchte ich nach einer Lösung, die unabhängig vom Endgerät die E-Mails (vor)sortieren würde.

Durch einen Blog Artikel stiess ich auf das Linux-Programm imapfilter, welches ich auf meinem Homeserver regelmässig ausführen kann.

Imapfilter sortiert E-Mails verschiedener E-Mailkonten ausgehend von einer einfachen Konfigurationsdatei.
Glücklicherweise ist imapfilter in den Ubuntu Quellen enthalten und lässt sich einfach via

sudo apt-get install imapfilter

installieren.

Die Konfigurationsdatei basiert auf der Skriptsprache LUA, diese Sprache ist sehr intuitiv und somit sind einfache Filterregeln schnell realisiert.
Mit einer Konfigurationsdatei können mehrere E-Mailaccounts sortiert werden, sogar ein Account übergreifendes verschieben oder kopieren von E-Mails ist möglich.
Anbei eine Beispielkonfiguration:
sample-config.lua

—————
— Options —
—————
options.timeout = 20
options.subscribe = true

—————-
— Accounts —
—————-

account1 = IMAP {
server = ‚imap.bluewin.ch‘,
username = ‚username‘,
password = ‚password‘,
}

account2 = IMAP {
server = ‚mail.unibe.ch‘,
username = ‚username‘,
password = ‚password‘,
ssl = ’ssl3′,
}

—————–
— Mail rules —
—————–

— Twitter
messages = account1.INBOX:contain_from(‚postmaster.twitter.com‘)
account1.INBOX:move_messages(account1[‚Twitter‘], messages)

— EBay
messages = account1.INBOX:contain_from(‚reply.ebay.ch‘)
account1.INBOX:move_messages(account1[‚eBay – Ricardo‘], messages)

messages = account1.INBOX:contain_from(‚ebay.ch‘)
account1.INBOX:move_messages(account1[‚eBay – Ricardo‘], messages)

— Ricardo
messages = account1.INBOX:contain_from(‚ricardo.ch‘)
account1.INBOX:move_messages(account1[‚eBay – Ricardo‘], messages)
— Facebook
messages = account1.INBOX:contain_from(‚facebookmail.com‘)
account1.INBOX:move_messages(account1[‚Facebook‘], messages)
— Partyguide
messages = account1.INBOX:contain_from(‚partyguide.ch‘)
account1.INBOX:move_messages(account1[‚Partyguide‘], messages)

————————–
— Push to Uni Mailbox —
————————–

— Mails from students.unibe.ch
messages = account1.INBOX:contain_from(’students.unibe.ch‘)
account1.INBOX:move_messages(account2[‚INBOX‘], messages)

— SUB
messages = account1.INBOX:contain_from(’sub.unibe.ch‘)
account1.INBOX:move_messages(account2[‚INBOX/SUB‘], messages)

————————
— Mail rules Uni BE —
————————

— ILIAS
messages = account2.INBOX:contain_field(‚Received‘, ‚curtis.unibe.ch‘)
account2.INBOX:move_messages(account2[‚INBOX/Ilias‘], messages)

— Imatrikulationsdienst (IMD)
messages = account2.INBOX:contain_from( ‚info@imd.unibe.ch‘)
account2.INBOX:move_messages(account2[‚INBOX/IMD‘], messages)

— SUB
messages = account2.INBOX:contain_from(’sub.unibe.ch‘)
account2.INBOX:move_messages(account2[‚INBOX/SUB‘], messages)

— MSDNAA
messages = account2.INBOX:contain_from(‚billing@e-academy.com‘)
account2.INBOX:move_messages(account2[‚INBOX/MSDNAA – Software‘], messages)

— EPub
messages = account2.INBOX:contain_from(’support@epub.unibe.ch‘)
account2.INBOX:move_messages(account2[‚INBOX/ePub‘], messages)

Weitere Informationen zu den Konfigurationsparametern findet man unter:

  • http://imapfilter.hellug.gr/sample.config.lua.txt
  • http://imapfilter.hellug.gr/imapfilter_config.5.txt

Damit nun diese Konfiguration regelmässig ausgeführt wird, erstellt man sich einen Cronjob der das Skript in einem bestimmten Zeitabstand regelmässig aufruft.
Den Cronjob erstelle man folgendermassen:

sudo crontab -e

Anschliessend fügt man folgende Zeile an und speichert das ganze ab.

*/5 * * * * /usr/bin/imapfilter -c /path/to/config-example.lua > /dev/null 2>&1

Somit wird die Konfiguration alle 5 Minuten ausgeführt und allfällige Konsolenausgaben werden ins Datennirwana (/dev/null) weitergeleitet.

Zu guter Letzt muss man noch eine Option in Thunderbird aktivieren, damit man die bereits verschobenen neuen Mails angezeigt erhält, muss Thunderbird jeweils alle Ordner auf neue Mails prüfen anstatt nur des Posteinganges.

Im Menu Bearbeiten -> Einstellungen wählt man den Reiter Erweitert -> Allgemein anschliessend drückt man den Button Konfiguration bearbeiten.

Nun muss man nach der Einstellung:

mail.check_all_imap_folders_for_new

suchen und den Wert auf true setzen.

6 Kommentare

  1. Gefällt mir. Wieso installierst du nicht gleich einen eigenen IMAP-Server und holst die mails von den Accounts auf den Server. Dann musst du bei den Clients nur noch einen Account einrichten und die Mails kannst du ebenfalls automatisch sortieren. Ausserdem hast du keine Speicher-Quotas, etc.

  2. Diese Idee hatte ich auch schon, allerdings ist der Uploadspeed meiner Leitung nicht sehr hoch und auch die dynamische IP Adresse der ADSL Leitung ist etwas mühsam, dyndns verlangt Gebühren für MX Weiterleitungen.
    Daher bevorzuge ich es die Mails auf den Provider Server zu lassen, ausserdem haben die Provider ein gutes Backupsystem, was bei mir zuerst noch aufzubauen wäre.

  3. Ja das stimmt. Ich hab einfach Glück gehabt mit meinem Serverstandort… Allerdings müsste ich mir beim Backup auch noch was überlegen.
    1. Wenn mein Server nicht erreichbar ist, bekomme ich keine Mails (es gibt keinen backup-mx).
    2. Es gibt zwar regelmässige Backups von den Daten, jedoch sind die auf dem Server gespeichert.

    Ich werde das wohl so beibehalten und wie bisher die Backups einmal im Monat vom Server auf den Client kopieren.

  4. Habt ihr bei Eurer Konfiguration mal diese Fehlermeldung beim Aufruf bekommen:
    imapfilter: IMAP (3): 1097 NO Invalid mailbox name: EDV_und_Co/router_logs
    Die Mails werden in einer Maildir-Struktur abgelegt.
    Mailserver ist dovecot, geholt wird per getmail und per imapfilter wird vorsortiert bzw. mit shell-Aufruf aus dem Mutt heraus.
    Das klappt auch wunderbar unter Linuxmint 11 und Debian, habe jetzt Ubuntu 12.04 getestet und da gibt es diese Fehlermeldung.
    any hints?

  5. Vielen Dank für die Anleitung, sehr hilfreich!

  6. Deine Links sind nicht mehr aktuell:
    Zitat:
    „Weitere Informationen zu den Konfigurationsparametern findet man unter:
    http://imapfilter.hellug.gr/sample.config.lua.txt
    http://imapfilter.hellug.gr/imapfilter_config.5.txt

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert