Grepmail findet mit einer Hand voll Optionen in Ihren Mail-Ordnern beinahe alles. Neben dem Kommandozeilen-Interface gibt es für die Software auch eine grafische Oberfläche.
Das Rezept, um RPM-Pakete zu bauen, enthielt welche Optionen? Und wie lautete die URL, die sich nun unauffindbar in einem Stapel Nachrichten versteckt? Als Anwender, der mehr als ein paar Mails pro Tag bekommt und nebenbei auch noch Mailing-Listen bezieht, kennen Sie dieses Problem. Mit grepmail haben Sie jedoch ein flexibles Tool zur Hand, mit dem Sie selbst im dicksten Mail-Ordner den Überblick behalten.
Quellen und Installation
Inzwischen dürfte jede der großen Distributionen eine Version des beliebten Suchprogramms an Bord haben. Sollten Sie auf Ihren CDs nichts entdecken, können Sie sich unter [1] ein entsprechendes Paket suchen. Als Alternative steht Ihnen ein Tar-Archiv [2] zur Verfügung.
Die zweite Möglichkeit können wir Neueinsteigern allerdings nicht mit gutem Gewissen empfehlen. Ein Blick in die Datei README, die dem gezipptes Archiv beiliegt, macht schnell klar, warum: grepmail ist ein Perl-Skript und benötigt verschiedene Perl-Module. Diese müssen Sie unter Umständen aus dem Internet ziehen [3] und ohne Distributions-Tools wie YaST installieren. Aus diesem Grunde wollen wir auf die Installation aus dem Tar-Archiv nicht weiter eingehen. Fortgeschrittenen Anwendern legen wir die hervorragend dokumentierte README-Datei ans Herz.
Mehr Interna zum Programm finden Sie auf der Homepage des Projektes [4]. Dort liegen auch Add-Ons bereit, die Sie mit Mailern wie mutt, Gnus oder pine verwenden können.
Bevor wir loslegen, noch ein Hinweis: grepmail arbeitet ausschließlich mit Mbox, dem traditionellen Unix-Format für Mailfolder. Das bedeutet, dass jede Mailbox aus einer Datei besteht. Darin liegen die einzelnen Nachrichten durch eine Leerzeile voneinander getrennt. Die Formate Maildir oder MH hingegen verwenden pro E-Mail eine seperate Textdatei [5] zur Speicherung.
Wenn Sie also mit grepmail experimentieren möchten und bis dato Maildir oder MH verwenden, müssen Sie Ihre Post ins Mbox-Format konvertieren – natürlich nicht, ohne zuvor ein Backup Ihrer Mails zu erstellen.
Als kleiner Trost für die Konvertierungsarie ist das Such-Tool dafür in der Lage, sich durch archivierte und komprimierte Mbox-Dateien zu wühlen.
Suchet, und Ihr werdet finden!
Nehmen wir gleich mit ein Beispiel aus der Zeitgeschichte. Wie oft und in welchen Mail-Ordnern wurde das Wort Steuern erwähnt?
[andreas]~ > grepmail -rb Steuern ~/mail/* /home/andreas/mail/gerd: 0 […] /home/andreas/mail/linux: 0 /home/andreas/mail/linux-debian: 0 /home/andreas/mail/linux-suse: 1 /home/andreas/mail/linux-user: 0 /home/andreas/mail/mbox: 0 /home/andreas/mail/michael: 0 […] /home/andreas/mail/zwortwaal: 0
Einmal. Und zwar im Ordner, der zur SuSE-Mailing-Liste gehört. Sehen wir uns die Optionen des Befehls grepmail näher an. Das -r zeigt uns den Fundort und die Häufigkeit des Suchwortes Steuern an. Mit -b beschränkt das Tool seine Suche auf die Textkörper (body) der Nachrichten. Als nächstes nutzen wir den Parameter -h, um nur die Header der Mail in die Suche einzubeziehen. Wir möchten wissen, wie oft der Mailer Gnus verwendet wurde:
[andreas]~ > grepmail -rh "User-Agent: Gnus" ~/mail/* | grep -v " 0$" /home/andreas/mail/gerd: 5 /home/andreas/mail/gmx: 1 /home/andreas/mail/linux: 20 /home/andreas/mail/linux-debian: 11 /home/andreas/mail/linux-suse: 5 /home/andreas/mail/mbox: 6 /home/andreas/mail/netzliteratur: 8 /home/andreas/mail/posted: 64 /home/andreas/mail/sent-mail: 333 /home/andreas/mail/sudelbuch: 4 /home/andreas/mail/xtest: 3
Da uns eine Null als Ergebnis nicht interessiert, haben wird die Ausgabe von grepmail in eine Pipe geschrieben. Der Output wird durch den Befehl grep geleitet, der jede Ausgabe mit einer Null unterdrückt. Das Verwenden von Pipes, um Programme miteinander zu verketten, ist eine Stärke der Kommandozeilen-Tools. So erhalten wir mit dem Befehl…
[andreas]~ > grepmail -b "spam" linux-debian | grep "^From: " | sort > liste.txt
…eine alphabetisch geordnete Liste aller Absender des Mailfolders ~/mail/linux-debian, die das Wort spam im Textkörper der Nachricht tragen. Neu am obigen Kommando ist, dass wir statt eines kompletten Pfades zur Mailbox (~/mail/linux-debian) den Ordner selbst (linux-debian) angegeben haben. Grepmail schaut nämlich von sich aus in die Verzeichnisse ~/Mail, ~/mail oder orientiert sich an der Umgebungsvariablen $MAIL.
Um die Mails als Ganzes zu lesen, können Sie die Ausgabe durch einen Pager wie less oder more leiten:
[andreas]~ > grepmail -b -d"between today and 4/15/2003" "spam" sent-mail | less
Auch hier suchen wir wieder nach spam im Text der Nachrichten – diesmal jedoch nur in Mails im Absendezeitraum zwischen heute und dem 15. April 2003. Die Option -d versteht eine Reihe von Zeitdefinitionen. Sie reichen von yesterday über 3 weeks ago bis zum genauen Kalenderformat Monat/Tag/Jahr. Auch ein before, since oder after vor einer Zeitangabe bereitet dem Tool keine Schwierigkeiten.
Nun ist das Lesen von E-Mails mit einem Pager alles andere als angenehm. Beispielsweise zeigt er Umlaute, die quoted-printable kodiert sind, nicht korrekt an. Abhilfe schafft hier das Umleiten der Suchtreffer in eine neue Mbox-Datei:
[andreas]~ > grepmail -mbi yast ~/mail/* > mbox_neu
In diesem Beispiel fahnden wir in allen Mailboxen (~/mail/*) nach dem SuSE-Tool yast. Die Option -i steht für case-insensitive. Das bedeutet: Gleichgültig ob YaST, YAST oder yAst, es wird jede Groß- und Kleinschreibung im Wort akzeptiert. Das -m fügt in die Kopfzeilen jeder Nachricht einen so genannten X-Header ein, der anzeigt, aus welchem Folder die Mail stammt:
X-Mailfolder: /home/andreas/mail/linux-suse
Die Ausgabe lassen wir in die Datei mbox_neu im aktuellen Verzeichnis schreiben. Mutt [6] zeigt dann den Inhalt an (Abbildung 3):
[andreas]~ > mutt -f mbox_neu
Die Option -v des folgenden Beispiels haben Sie bereits kennen gelernt. Nur betraf sie oben im Text den Befehl grep, um die Nullen von der Ausgabe abzugrenzen. Jetzt kopieren wir alle Mails der Mailbox ~/mail/linux in die Datei mbox_neu – mit Ausnahme von Nachrichten, die durch Microsoft Outlook und Yahoo Groups Message Poster erstellt wurden:
[andreas]~ > grepmail -hv "X-Mailer: (Microsoft Out|Yahoo Groups)" ~/mail/linux > mbox_neu
Auf ähnliche Art und Weise entfernen wir Doubletten, also doppelte Nachrichten, aus einer Mailbox:
[andreas]~ > grepmail -u ~/mail/gmx < mbox_neu
grepmail orientiert sich dank der Option -u an der Eindeutigkeit jeder Message-ID in der Mailbox. Ein Vergleichstest, der die Gesamtzahl der Nachichten im Folder anzeigt, verrät, dass in der Datei mbox_neu eine E-Mail aussortiert wurde:
[andreas]~ > grepmail -r . ~/mail/gmx /home/andreas/mail/gmx: 7 [andreas]~ > grepmail -r . mbox_neu mbox_neu: 6
Freilich beherrscht das Programm auch das Hantieren mit Größen. Der Parameter -s gibt die Höchstgrenze in Bytes an:
[andreas]~ > grepmail -ri -Y "^TO:" debian -s 4000 ~/mail/* | grep -v " 0$" /home/andreas/mail/linux-debian: 20 /home/andreas/mail/sent-mail: 13
Nehmen wie das Kommando Stück für Stück auseinander. Mit den Optionen -r und -i haben Sie bereits Bekanntschaft geschlossen. Der Abschnitt -Y "^TO:" debian ist die Abkürzung des ellenlangen Such-Strings "^((Original-)?(Resent-)?(To|Cc|Bcc)|(X-Envelope|Apparently(-Resent)?)-To):.*debian", der mit dem Parameter -h ausgeführt wird. Er passt auf so ziemliche jede Zieladresse im Header, die den Namen der Linux-Distribution enthält. Das -s 4000 beschränkt die Suche schließlich auf Nachrichten unter 4000 Bytes.
Damit sind wir schon fast am Ende unserer Experimente mit grepmail. Weitere Optionen und Shortcuts zu regulären Ausdrücken finden Sie mit dem Befehl man grepmail im Handbuch. Zu guter Letzt riskieren wir noch einen Blick auf das Add-On grepm[7] und das Frontend gtkgrepmail.
Beigaben
Wenn es Ihnen zu viel Aufwand ist, mit grepmail eine Mbox-Datei zu erstellen, um gleich darauf Mutt zu starten, dann ist grepm das Tool Ihrer Wahl. Es ist ein Shell-Skript und arbeitet als Wrapper. Das bedeutet, Sie rufen es anstelle von grepmail auf:
[andreas]~ > grepm -i -Y "^TO:" debian -s 4000 ~/mail/*
Nach dem Aufruf legt grepm im temporären Verzeichnis /tmp eine Mailbox an und verfüttert sie an Mutt. Nachdem Sie den Mailreader beendet haben, wird auch der Folder in /tmp wieder entfernt.
Eine klickbare Oberfläche bietet Ihnen gtkgrepmail (Abbildung 4). Bei einigen Distributionen ist das Frontend bereits im Lieferumfang enthalten. Auch im Netz haben Sie an verschiedenen Stellen eine Chance zum Download [8]. Das GUI wartet mit den wichtigsten Optionen auf, die Sie inzwischen von der Kommandozeile kennen. Wem an einfacher Bedienung gelegen ist, der wird sich mit diesem Programm schnell anfreunden.
Doch egal, ob Sie zum Add-On, Frontend oder zur Kommandozeile pur greifen: Das Versteckspiel von wichtigen Nachrichten im Mail-Verkehr hat ein Ende.
Infos
[1] RPM-Suchmaschine http://rpmfind.net/linux/rpm2html/search.php?query=grepmail&submit=Search+…
[2] Grepmail-Tarball http://sourceforge.net/project/showfiles.php?group_id=2207&release_id=130784
[3] Perl-Module http://search.cpan.org
[4] Grepmail-Homepage http://grepmail.sourceforge.net/
[5] Mbox-Maildir-Vergleich http://www.courier-mta.org/mbox-vs-maildir/
[6] LinuxUser-Mutt-Artikel http://www.linux-user.de/ausgabe/2001/05/086-mutt/mutt.html
[7] grepm-Homepage http://www.barsnick.net/sw/grepm.html
[8] gtkgrepmail http://www.terminus.net.au/services/software.html






