Skip to content

Mailinglisten umgezogen

Angeregt durch den ohnehin erforderlichen Umzug des Mailinglistenservers Mailman auf eine neue Maschine habe ich jetzt endlich auch die - historisch gewachsene - Konfiguration der meisten Mailinglisten geändert und bei der Gelegenheit auch eine Vielzahl bereits seit Jahren "toter" Mailinglisten - ggf. nach Rücksprache mit dem jeweiligen Betreiber - entsorgt. Die Konfigurationsänderung besteht in erster Linie in einer Änderung des per Default genutzten Hostnamens bzw. der Domain von "list.th-h.de" (Singular, da es anfangs eine Parallelinstallation "lists.th-h.de" gab …) zu "lists.szaf.org", weil es schließlich weniger um ein nur von mir genutztes Angebot geht als vielmehr um einen Dienst, der auch anderen zur Verfügung stehen soll. Selbstverständlich bleiben die bisher genutzten Namen für die bestehenden Listen verfüg- und nutzbar.

Praktisch finde ich, daß sich Mailman so konfigurieren läßt, daß - je nach dem Hostname, unter dem das Webinterface aufgerufen wird - jeweils nur die Mailinglisten angezeigt werden, die unter der entsprechenden Domain angelegt sind. Ein Aufruf von list.th-h.de bringt also ein anderes Ergebnis als ein Aufruf von lists.szaf.org (natürlich nur soweit die Mailinglisten überhaupt öffentlich angezeigt werden).

Mailman 2.1.12: listadmin.pl 2.40 läuft nicht mehr

Die Titelzeile faßt es eigentlich schon zusammen: seit dem Upgrade meiner Mailman-Installation auf die aktuelle Version 2.1.12 mag das praktische Perlscript listadmin.pl, über das ich bereits berichtet hatte, seinen so hilfreichen Dienst nicht mehr versehen (auch nicht nach Update auf die aktuellste Version 2.40, die wohl aus dem Jahr 2007 datiert), offenbar deshalb, weil der Parser über geänderte Webseiten (geänderte Mailman-Templates) stolpert.

Solange keine administrativen Aufgaben zu erfüllen sind, läuft es problemlos durch (so soll es sein); wenn man es auf nicht mehr existente Listen losläßt, beschwert es sich und läßt die Liste aus (auch das ist vernünftig und akzeptabel):

ERROR: unexpected contents, please send /tmp/dump-0.144370685638027-list@domain.example.html to $address — skipping list

Wenn es aber etwas zu tun hätte, weil sich Anfragen in der Moderations-Queue befinden, dann bricht es leider einfach zusammen:

fetching data for list@domain.example … Died at ./listadmin.pl line 802.

Grund ist offensichtlich ein Stolpern des Parsers:

sub parse_subscription {
    my ($mmver, $config, $parse, $data) = @_;

    $parse->get_tag ("td") || die;
    my $address = $parse->get_trimmed_text ("/td") || die;
    my $tag = $parse->get_tag ("input") || die;
    my $id = $tag->[1]{"name"};
    $parse->get_tag ("/table") || die;
$parse->get_tag ("/tr") || die;
    $data->{$id} = { "subscription" => $address };
}

In der hervorgehobenen Zeile verlassen sie ihn. Offenbar sucht listadmin.pl erst nach zu genehmigenden oder abzulehnenden Beitrittsersuchen, bevor es die weiter unten auf der Seite folgenden zu moderierenden Beiträge abarbeitet, und erkennt letztere fehlerhaft als erstere, weshalb es die falsche Routine zum Parsen derselben aufruft, die dann aus dem Tritt gerät.

Allerdings ist mir der Parser auf Anhieb erstmal etwas zu hoch, daher meine Frage: Gibt es vielleicht schon eine aktuellere Version des Scripts? Oder hat sich schon jemand damit beschäftigt und einen Patch in der Hinterhand? Falls ja: Bitte melde Dich! ;-)

Praktisches Tool: listadmin

Wer Mailman-Mailinglisten betreibt, wird das Problem kennen: es sammelt sich mit der Zeit - jedenfalls bei offen auf den Webseiten angekündigten oder sonstwie verlinkten Listen - eine ganze Menge Spam an, der zwar in der Regel hängenbleibt, wenn man nur E-Mails von Listenteilnehmern automatisch auf die Liste durchreicht, der dann aber moderiert werden will. Der Aufwand ist dank eines bequemen Webinterfaces nicht so groß - tägliche Hinweismail überfliegen, einloggen, einen Haken bei "discard all", absenden, fertig -, aber wenn man das jeden Tag für ein halbes Dutzend Listen machen muß, ist das trotzdem ziemlich nervig, und man wünscht sich eine einfachere Lösung.

Mit listadmin hat man sie gefunden. listadmin ist ein Perlscript, das die betreffenden Listen und einige Vorgaben aus einer Konfigurationsdatei ausliest, für jede Liste das Webinterface aufruft und dann für jede zu moderierende Mail Absender, Betreff und Moderationsgrund angibt und auf eine Eingabe wartet. Man kann sich dann Teile oder die ganze Mail ansehen und sie entsprechend freigeben, bouncen oder verwerfen; darüber hinaus können auch automatisch Spam-Score-Header ausgewertet werden.

Das macht den Ablauf einfach: alle Listen in die Konfiguration stecken, einmal täglich das Script aufrufen, Default-Action auf "discard" setzen, und für jede Mail einmal <Enter> drücken, und dann noch einmal für jede Liste mit <Enter> die Übernahme der Änderungen bestätigen. Fertig. Kein Aufwand. Toll. Und das beste: listadmin nutzt das Webinterface, d.h. muß nicht auf dem Mailinglistenhost laufen, sondern kann auf einer beliebigen Maschine installiert werden.

(Man sollte allerdings eher nicht das Debian-Package aus stable benutzen, weil das nur Mailman 2.0 unterstützt, und diese Version dürfte in freier Wildbahn eher selten sein. Nachdem der Tarball aber nur aus Manpage und Script besteht, ist es nicht sehr aufwendig, das an der Paketverwaltung vorbei zu installieren.)