Fetchmail ist vielen Administratoren bekannt. Es holt E-Mails auf anderen Servern ab und speist sie in lokale Postfächer ein. Auch an externe Postfächer könnte er seine Sammlungen zustellen… Wäre da nicht die Spam-Problematik.

Ich weiß nicht, wie viele Admins mit diesem Problem zu kämpfen hatten. Mehrfach umgeleitete Nachrichten, die am Ziel-Host angekommen in den Spam-Ordner geschoben werden, weil weder To, noch Cc zum Konto oder gar zur Domäne passen. Mir ist es passiert und es war ärgerlich genug, um fetchmail auf den Prüfstand zu stellen. Seine Arbeitsweise beruht auf der lokalen Zustellung der eingesammelten Nachrichten. Doch was soll man tun, wenn der Server kein fetchmail oder shell-Zugang oder cronjobs anbietet? Von A abholen und über B an C senden, darf einem MTA schon suspekt vorkommen. Schließlich ist der Server B kein A und die Zieladresse ist auch nicht C.

Ich wollte Nachrichten aus einem Postfach mit vielen Aliassen in eine Mailingliste einspeisen. Die Mailinglisten-Software hat dies zurecht beanstandet. Schließlich ist das Feld „To“ oder wenigstens „Cc“ eine aussagenkräftige Größe. Es musste also eine Lösung her, die aus einem IMAP-Postfach einen bestimmten Ordner abfragt und Mails umadressiert, so dass sie zur Mailingliste passen. Der Inhalt und das From-Feld sollen unangetastet bleiben, dafür das Feld Sender aus §4.4.2. der RFC 822 eingesetzt werden. Das macht mit der Authentifizierung am zuständigen MTA des Sender am meisten Sinn.

Diese Aufgabe leistet ein von mir geschriebenes Programmchen – eigentlich ein Skript – PychMail. Python ist mächtig und extrem einfach. Schon mit 60 Zeilen kann man diese Aufgabe erledigen. Damit es gut verstanden und genutzt werden kann, habe ich entsprechend auf englisch dokumentiert. Die Konfiguration ist einfach. Sie ist ausgelagert in den Ordner config (der aus Sicherheitsgründen mit chmod 700 vor der Neugier Fremder geschützt werden sollte) und kann dort unter verschiedenen Namen mehrfach abgelegt werden. Der Aufruf von PychMail mit dem Namen der Konfigurationsdatei als Argument kann händisch oder per Cron geschehen. Er produziert eine Meldung für jede verarbeitete auf stdout.

Gerne baue ich das Programm aus, doch im Moment funktioniert es einwandfrei und POP war auch nie mein Favorit. ;-)