Ich bin gerade auf ein geniales Tool gestoßen: Mairix. Ich bin in einigen Mailinglisten angemeldet, unter anderem auch debian-user-german. Da dies eine High-Traffic Mailingliste ist, überflieg ich oft nur die Nachrichten und speichere auch relativ oft ältere Nachrichten weg in ein mbox-file, da ansonsten das Einlesen des Folders recht lange dauert.
Bisher hab ich das Archiv dann für weitere Recherchen nutzen können, indem ich es z.B. mit Mutt eingelesen habe:mutt -f debian-user-german.mboxNun konnte man mit Mutts genialer limit Funktion darin suchen. Doch ob des enormen Traffics, ist auch die Suche, sowie das Einlesen der Inbox sehr zeitaufwändig. Hier kommt jetzt Mairix ins Spiel.
Thursday, October 27. 2005
Mairix Informations-Management von E-Mails
Mairix indiziert eine gegebene Anzahl von Mails im Format mbox, MH oder maildir und stellt ein einfaches Interface zum Suchen zur Verfügung. Die Konfiguration erfolgt über die .mairixrc und ist denkbar einfach:
base gibt das Arbeitsverzeichnis an. Darin liegen alle zu indizierenden Archive.
mbox spezifiziert die zu indizierenden mbox-Archive, die innerhalb vom Arbeitsverzeichnis liegen, in diesem Fall also alle Archive die in /home/user/mailarchive/mbox liegen und die Endung .mbox haben.
mfolder gibt das Verzeichnis an, in dem das Suchergebnis nach einer Suche erstellt wird. Dies sind dann Symlinks auf die vorhandenen Mails (im Falle von maildir oder MH Archiven) oder halt Kopien aus den passenden mbox-Archiven.
Das Ausgabeformat der Mails in mfolder ist standardmäßig maildir, andere können über die Option mfolder=mh bzw. mfolder=mbox für das gewünschte Format spezifiziert werden.
Zum Schluß wird noch definiert, wie die Datenbank für die Indizierung heißt. Das geschieht über die Option database und zeigt hier auf die Datei mairix_database im Arbeitsverzeichnis.
Nachdem die Konfiguration steht, sollten die Archive zunächste eingelesen und indiziert werden. Mairix kennt beim Aufruf 2 Modi: Indizierung und Suche. Im Mode Indizierung befindet es sich, wenn kein Suchmuster mitgegeben wird. Die Indizierung kann also simpel gestartet werden über:
Wenn das geschehen ist, kann mairix zur Suche genutzt werden. Mairix versteht keine Regulären Ausdrücke. Ihm wird einfach eine zu suchende Wortliste übergeben. Und-Verknüpft werden Worte durch ein Leerzeichen, Oder-Verknüpft durch ein Slash als Worttrenner. Negierungen erreicht man durch die Verwendung der Tilde ~ als Präfix. Substring Match erreicht man durch anhängen von = an das Suchwort und Approximation Suche durch anhängen von =Zahl an das Suchwort (z.B. haus=1 matcht haus, hausen und maus, maus unterscheidet sich in 1 Buchstaben von haus). Die Suche selbst ist Case-insensitive, außer bei Suchen nach Pfaden.
Suchen kann man dabei nach verschiedenen Kriterien, die als einzelner Buchstabe gefolgt von einem Doppelpunkt angegeben werden. Die folgenden Kriterien gibt es:
Man kann natürlich auch die Kriterien komplett weglassen und einfach nur nach einem Stichwort suchen
So nachdem die Theorie durch ist, einfach mal probieren:
Zusätzlich noch alle Nachrichten, in denen vim erwähnt wird:
Ein kleiner Fehler hat das bis jetzt aber noch, die Nachrichten sind alle noch etwas durcheinander. Es fehlt der Diskussionsfaden, einzelne Nachrichten helfen oft nicht, aber im Thread fallen oft wichtige Informationen, die auch berücksichtigt werden wollen:
Jetzt sind alle Nachrichten geordnet in Threads. Das funktioniert natürlich nur, wenn auch korrekte In-Reply-To und References Header, sowie eine Message-ID gesetzt sind. Kommt also drauf an, wie nützlich das ist. Einige populäre Mailreader unter Windows können nämlich kein Threading und setzen (einige) diese Header auch nicht.
Erwähnswert ist noch das sehr gute Manual unter /usr/share/doc/mairix. In Debian Sarge ist momentan Version 0.15.2, aktuell ist aber bereits die Version 0.16.1. Aber das ist halt stable.
CODE:
chrisbra@256bit:~$ cat .mairixrc
# Set this to the directory where your maildir folders live
base=/home/user/mailarchive
# Set this to a list of mbox folders within 'base'.
mbox=mbox/*.mbox
# Set this to the folder within 'base' where you want the
# search mode to write its output.
mfolder=search
# Set this to the path where the index database file will
# be kept
database=/home/user/mailarchive/mairix_database
chrisbra@256bit:~$
# Set this to the directory where your maildir folders live
base=/home/user/mailarchive
# Set this to a list of mbox folders within 'base'.
mbox=mbox/*.mbox
# Set this to the folder within 'base' where you want the
# search mode to write its output.
mfolder=search
# Set this to the path where the index database file will
# be kept
database=/home/user/mailarchive/mairix_database
chrisbra@256bit:~$
base gibt das Arbeitsverzeichnis an. Darin liegen alle zu indizierenden Archive.
mbox spezifiziert die zu indizierenden mbox-Archive, die innerhalb vom Arbeitsverzeichnis liegen, in diesem Fall also alle Archive die in /home/user/mailarchive/mbox liegen und die Endung .mbox haben.
mfolder gibt das Verzeichnis an, in dem das Suchergebnis nach einer Suche erstellt wird. Dies sind dann Symlinks auf die vorhandenen Mails (im Falle von maildir oder MH Archiven) oder halt Kopien aus den passenden mbox-Archiven.
Das Ausgabeformat der Mails in mfolder ist standardmäßig maildir, andere können über die Option mfolder=mh bzw. mfolder=mbox für das gewünschte Format spezifiziert werden.
Zum Schluß wird noch definiert, wie die Datenbank für die Indizierung heißt. Das geschieht über die Option database und zeigt hier auf die Datei mairix_database im Arbeitsverzeichnis.
Nachdem die Konfiguration steht, sollten die Archive zunächste eingelesen und indiziert werden. Mairix kennt beim Aufruf 2 Modi: Indizierung und Suche. Im Mode Indizierung befindet es sich, wenn kein Suchmuster mitgegeben wird. Die Indizierung kann also simpel gestartet werden über:
CODE:
chrisbra@256bit:~$ mairix -v
Der Parameter -v bedeutet verbose und zeigt an, was beim Indizieren geschieht.Wenn das geschehen ist, kann mairix zur Suche genutzt werden. Mairix versteht keine Regulären Ausdrücke. Ihm wird einfach eine zu suchende Wortliste übergeben. Und-Verknüpft werden Worte durch ein Leerzeichen, Oder-Verknüpft durch ein Slash als Worttrenner. Negierungen erreicht man durch die Verwendung der Tilde ~ als Präfix. Substring Match erreicht man durch anhängen von = an das Suchwort und Approximation Suche durch anhängen von =Zahl an das Suchwort (z.B. haus=1 matcht haus, hausen und maus, maus unterscheidet sich in 1 Buchstaben von haus). Die Suche selbst ist Case-insensitive, außer bei Suchen nach Pfaden.
Suchen kann man dabei nach verschiedenen Kriterien, die als einzelner Buchstabe gefolgt von einem Doppelpunkt angegeben werden. Die folgenden Kriterien gibt es:
- d: Datumsangabe (d: -25oct Suche Nachrichten vor dem 25. Oktober)
- z: Größenangabe (z:50k- Suche Nachrichten, die größer als 50 Kilobytes sind)
- t: Suche im To: Header (t:chrisbra Nachrichten, die an mich adressiert sind)
- c: Suche im CC: Header (c:chrisbra Nachrichten, die ich zur Kopie erhalten habe)
- a: Suche im To:, CC: und From: Header (a:chrisbra Nachrichten, dia an mich geschrieben wurden oder von mir verschickt wurden)
- f: Suche im From: Header (f:chrisbra Nachrichten, die ich geschrieben habe)
- s: Suche im Subjekt (s:mutt Nachrichten mit dem Wort mutt im Subjekt)
- b: Suche im Mailbody (b:mairix Nachrichten, in denen Mairix erwähnt wird)
- m: Suche nach einer Message-ID (m:20051027170436.GB8088@256bit.org Nachrichten mit dieser Message-ID)
- p: Suche nach einer Nachricht in einem gegebenen Pfad (p:/archive/ Nachrichten, die /archive/ in ihrem Pfad haben. Achtung Case-sensitive)
Man kann natürlich auch die Kriterien komplett weglassen und einfach nur nach einem Stichwort suchen
So nachdem die Theorie durch ist, einfach mal probieren:
CODE:
chrisbra@256bit:~$ mairix muttng
Matched 354 messages
chrisbra@256bit:~$ ls /home/user/mailarchive/search/cur |wc -l
354
Alle gefundenen Nachrichten sind jetzt im Ordner /home/user/mailarchive/search/cur. Stöbern kann man mit mutt -f /home/user/mailarchive/search Andere Mailreader natürlich ähnlich. Man muß ihnen nur beibringen, wie sie das entsprechende Verzeichnis einlesen. Verfeinern kann man die Suche dann auch innerhalb von mutt noch mit der limit-Funktion oder halt mit neuen/anderen mairix Optionen. Matched 354 messages
chrisbra@256bit:~$ ls /home/user/mailarchive/search/cur |wc -l
354
Zusätzlich noch alle Nachrichten, in denen vim erwähnt wird:
CODE:
chrisbra@256bit:~$ mairix -a vim
Matched 1837 messages
chrisbra@256bit:~$ ls /var/spool/mailarchive/search/cur |wc -l
2124
chrisbra@256bit:~$
Der Unterschied liegt darin, dass das search-Verzeichnis nicht bereinigt wird. Dies wird per default immer durchgeführt und durch den Parameter -a unterdrückt.Matched 1837 messages
chrisbra@256bit:~$ ls /var/spool/mailarchive/search/cur |wc -l
2124
chrisbra@256bit:~$
Ein kleiner Fehler hat das bis jetzt aber noch, die Nachrichten sind alle noch etwas durcheinander. Es fehlt der Diskussionsfaden, einzelne Nachrichten helfen oft nicht, aber im Thread fallen oft wichtige Informationen, die auch berücksichtigt werden wollen:
CODE:
chrisbra@256bit:~$ mairix -t muttng
Matched 1385 messages
chrisbra@256bit.org:~$
Matched 1385 messages
chrisbra@256bit.org:~$
Jetzt sind alle Nachrichten geordnet in Threads. Das funktioniert natürlich nur, wenn auch korrekte In-Reply-To und References Header, sowie eine Message-ID gesetzt sind. Kommt also drauf an, wie nützlich das ist. Einige populäre Mailreader unter Windows können nämlich kein Threading und setzen (einige) diese Header auch nicht.
Erwähnswert ist noch das sehr gute Manual unter /usr/share/doc/mairix. In Debian Sarge ist momentan Version 0.15.2, aktuell ist aber bereits die Version 0.16.1. Aber das ist halt stable.

Leider kann mairix nicht in GZIP-komprimierten MBOXes suchen.
Ich nutze archivemail, um aus meinen Maildirs Mails, die älter als 30 Tage sind, in komprimierte MBOXen zu verschieben.
Wenn mairix jetzt auch darin suchen und dann ggfls. extrahieren könnte, das wäre der wahre Zucker auf dem ganzen.
Ich zitiere aus den Release Notes für die Development Version:
Version 0.17-pre1 19 Ocvober 2005
Release notes:
Support gzipped mbox folders (any file matched by a mbox= line in the config file is considered as a gzipped mbox if its name ends in .gz)
Gleich mal besorgen, uupdate anwerfen und Paket bauen.