wall < "Vom Home Office und grafischen Mailclients – hier geht es um mutt"

Broadcast message from spillerm@unixe.de (pts/1) (So Okt 19 13:15:33 2014):
4
Diesen Beitrag schrieb ich vor 4 Jahren. Behalte das beim Lesen bitte im Hinterkopf.

Beruflich gesehen bin ich, wenn ich mich so umhöre, in einer bemerkenswerten Situation: ich kann relativ viele Aufgaben von zu Hause aus prima bewältigen und darf für Meetings und ähnliches das Baby mit ins Büro bringen. Im ersten Moment klingt das alles ganz grossartig, aber was die wenigsten bedenken: auch das ist ganz schön kräftezehrend. Ich liebe meinen Job und habe den Drang, ihn wirklich gut zu machen, und das ist gar nicht so einfach, wenn ich mit einem Auge das Baby beobachten und es mit einem Arm davon abhalten muss, Netzwerkkabel anzuknabbern, die Fingerchen in den doppelten Boden zu stecken, in nagelneue MacBooks zu sabbern oder mit Festplatten zu werfen. Schon beim ersten Kind gewöhnte ich mir deshalb sehr schnell an, root-Shells nur noch spät am Abend zu öffnen — wenn ausser mir alles schläft und die Fehlerwahrscheinlichkeit sinkt.

Das Beschäftigungsverbot riss mich 2013 über Nacht aus meinem gewohnten Ablauf. Zwar hielt ich regelmässigen Kontakt zu meinen Kollegen, nicht aber zu meiner Mailbox. Im Schnitt empfängt mein Firmenaccount etwa 1400 Mails pro Tag — Nagios, Cron, einfach alles — und an schlechten Tagen auch mehr. Multipliziert mit rund 380 Tagen ergibt das… Ähm… Einen Monat vor Arbeitsbeginn öffnete ich meine Mailbox erstmalig, knapp 650.000 neue Mails. Meine Sieve-Filter hatten vieles in Unterordner verteilt, doch ich stand unmittelbar vor grossen Problemen: jeder grafische Mailclient (Thunderbird, AppleMail,…) und auch das Webinterface des OpenExchange schossen sich einfach tot, wenn ich versuchte, meinen Posteingang auf Stand zu bringen. Ich wünschte mir eine andere Lösung, eine dauerhafte, eine effizientere, eine, die mich bei der Arbeit unterstützt und nicht davon abhält. Eine, die es mir erlaubt, in Babys Schlafpause ein paar Mails zu bearbeiten — ohne mit der Technik ringen zu müssen. Und auch eine, die ich jederzeit nutzen kann.

Und hier kam — wieder — mutt ins Spiel. Schon 2012 hatte ich einen Artikel dazu geschrieben, und auf dem Setup von damals baute ich auf. Ich jagte mutt-1.5.23-devel durch den Compiler, diesmal ohne den trash folder patch, dafür aber mit dem sidebar patch. Die Abhängigkeiten hatte ich zuvor über die MacPorts installiert — mit autoconf-1.13.1 und aclocal-1.13.1 funktioniert es prima, höhere Versionen verursachen wohl Ärger.

$ /opt/local/bin/mutt -v
System: Darwin 13.4.0 (x86_64)
ncurses: ncurses 5.9.20110404 (compiled with 5.9)
libiconv: 1.14
libidn: 1.26 (compiled with 1.26)
hcache backend: GDBM version 1.11. 25/12/2013 (built Jan 16 2014 12:54:58)
 
Compiler:
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1
Apple LLVM version 5.1 (clang-503.0.40) (based on LLVM 3.4svn)
Target: x86_64-apple-darwin13.3.0
Thread model: posix
 
Configure options: '--prefix=/opt/local/' '--with-curses' '--with-regex' '--enable-locales-fix' '--enable-pop' '--enable-imap' '--enable-smtp' '--with-sasl=/opt/local' '--enable-hcache' '--with-ssl' '--mandir=/opt/local/man'
 
Compilation CFLAGS: -Wall -pedantic -Wno-long-long -g -O2
 
Compile options:
-DOMAIN
-DEBUG
-HOMESPOOL  +USE_SETGID  +USE_DOTLOCK  +DL_STANDALONE  +USE_FCNTL  -USE_FLOCK   
+USE_POP  +USE_IMAP  +USE_SMTP  
+USE_SSL_OPENSSL  -USE_SSL_GNUTLS  +USE_SASL  -USE_GSS  +HAVE_GETADDRINFO  
-HAVE_REGCOMP  +USE_GNU_REGEX  
+HAVE_COLOR  +HAVE_START_COLOR  +HAVE_TYPEAHEAD  +HAVE_BKGDSET  
+HAVE_CURS_SET  +HAVE_META  +HAVE_RESIZETERM  
+CRYPT_BACKEND_CLASSIC_PGP  +CRYPT_BACKEND_CLASSIC_SMIME  -CRYPT_BACKEND_GPGME  
-EXACT_ADDRESS  -SUN_ATTACHMENT  
+ENABLE_NLS  +LOCALES_HACK  +HAVE_WC_FUNCS  +HAVE_LANGINFO_CODESET  +HAVE_LANGINFO_YESEXPR  
+HAVE_ICONV  -ICONV_NONTRANS  +HAVE_LIBIDN  +HAVE_GETSID  +USE_HCACHE  
-ISPELL
SENDMAIL="/usr/sbin/sendmail"
MAILPATH="/var/mail"
PKGDATADIR="/opt/local/share/mutt"
SYSCONFDIR="/opt/local/etc"
EXECSHELL="/bin/sh"
-MIXMASTER
To contact the developers, please mail to <mutt-dev@mutt.org>.
To report a bug, please visit http://bugs.mutt.org/.
 
patch-1.5.23.sidebar.20140412.txt

Und dann begann ich erstmal mit den Aufräumarbeiten, denn ehe ich mich dem Finetuning der Konfig widmete, wollte ich den eindeutig identifizierten Müll aus der Mailbox schonmal raushaben. Es war mir beispielsweise nicht gelungen, mit einem der grafischen Mailclients die mehr als 64.000 Nachrichten in einem Alert-Ordner zu trashen — Thunderbird stürzte ab, MailApp drehte durch. Mit mutt gestaltete sich das einfach, ich navigierte in den Ordner hinein und ging folgendermassen vor:

Strg+T ## In der Fusszeile erscheint der Text "Tag messages matching:"
~A ## Das markiert alle Nachrichten, und in der Übersicht erhalten sie ein *
; ## Jetzt kann ich angeben, was mit ALLEN Nachrichten passieren soll
d ## für delete
$ ## synct die Mailbox; je nach Konfiguration kommt in der Fusszeile die Frage, ob die Nachrichten wirklich gelöscht werden sollen

Und weg sind die Nachrichten. Nix Papierkorb. Nix »als gelöscht markiert«. Die sind weg, und es dauert lediglich Sekunden. Hat man diese Vorgehensweise einmal kapiert, kommt man äusserst effizient voran, und die Möglichkeiten sind vielfältig. So lassen sich alle Nachrichten eines bestimmten Absenders auf einen Schlag als gelesen markieren:

Strg+T ## In der Fusszeile erscheint der Text "Tag messages matching:"
~f einuser@domain.com ## Alle Nachrichten dieser Absenderadresse werden markiert und erhalten ein *
; ## Was soll mit all diesen Nachrichten passieren?
W ## In der Fusszeile erscheint "Clear flag? (D/N/O/r/*/!):", und ich möchte das N-Flag weghaben
N ## und fertig

In der Doku sind die verschiedenen Flags gut beschrieben, und hat man sie ein paar Mal benutzt, gehen sie so richtig in Fleisch und Blut über. Innerhalb kürzester Zeit (und ohne jeden Crash) hatte ich also Spams, alte Nagios-Benachrichtigungen und nervende Cron-Messages gelöscht, die Quota war nicht mehr auf Anschlag und ich konnte mich auf die wirklich wichtigen Dinge konzentrieren. Zeit, sich mit der Verfeinerung des Scoring zu beschäftigen, und ich löste das für mich wie folgt:

  1. Mails, die von unsere Firmen-Domain kommen, erhalten Score 5 (score '~f @firma\.de' 5)
  2. Mails, die konkret an mich gerichtet sind (definiert in alternates!), erhalten Score 5 (score '~p' 5)
  3. Mails, die geflaggt sind, erhalten kurzerhand Score 100 (score '~F' 100)
  4. Mails der obersten Chefs erhalten Score 60 in Abhängigkeit der Absenderadresse (score '~f chef@firma\.de' 60)
  5. Mails meiner Abteilung erhalten Score 40, ebenfalls in Abhängigkeit der Absenderadresse (score '~f kollege@firma\.de' 40)
  6. Jetzt kommen die Mails aus allen anderen Bereichen; sie erhalten niedrigere Scorings, damit sie sich farblich voneinander abheben (siehe dazu auch meinen Artikel aus dem Jahr 2012)
  7. Zum Schluss kommen die Mails, die eindeutig als Müll zu erkennen sind, anhand von Subject, Absender oder was auch immer… Diese erhalten Score -50 (score '~s "Viagra"' -50)

Wir erinnern uns: Scores addieren sich, und negative Scores gibt es nicht — Müll-Messages fallen also auf Score 0. In der Liste meines Posteingangs erscheinen sie am Ende und grau und können nun (vorher nochmal grob drübergucken) gelöscht werden — wir erinnern uns an den Trick mit Strg+T? Ich zeig’s euch nochmal:

Strg+T ## In der Fusszeile erscheint der Text "Tag messages matching:"
~n 0 ## Alle Nachrichten mit Score 0 werden markiert
; ## Und was tun wir mit ihnen?
d ## löschen :D
$ ## Und weg damit...

Effizienz. Effizienz. Alles, was man mehr als zwei mal in genau derselben Form machen muss, ist ein Macro wert, oder? Als vim-Nutzer stehe ich ja tierisch auf diese ESC-Sequenzen, aber man kann natürlich auch die F-Tasten oder sonstwas belegen. Mein Macro sieht so aus:

macro index <ESC>l "<tag-pattern>~n 0<enter><tag-prefix-cond><delete-message><sync-mailbox>" "Mails mit Score 0 löschen"

Das ist noch nicht perfekt, da ich die Abfrage »Wirklich löschen?« nach wie vor bestätigen muss, aber ich arbeite dran.
Ein weiterer Vorteil für mich ist, dass ich beim Schreiben der Mails nun auf die Power von vim zugreifen kann. Neben den ganzen Dingen wie Rechtschreibprüfung, Syntax Highlighting (die man in der Regel ja sowieso schon benutzt) mache ich mir in der .vimrc gnadenlos die Kürzel zunutze:

:ab     mfg             Viele Grüsse,<CR>Marianne
:ab     tach            Sehr geehrte Damen und Herren,<CR>

Und auch das für alles, was mehr als zweimal benötigt wurde. Der initiale Aufbau der Files kostet natürlich etwas Zeit, man muss die Arbeit immer mal wieder unterbrechen, um einen Eintrag hinzuzufügen — aber die Kurve ist, wie ich feststellen durfte, sehr steil, schon nach einigen Tagen musste ich immer seltener ran.

Eine letzte grosse Änderung, die ich für mich einführte, dürfte manchem befremdlich erscheinen: mein Client ruft nicht mehr automatisch Mails ab, sondern nur noch dann, wenn ich es möchte. Im ersten Moment erscheint das wie ein Rückschritt, aber tatsächlich kann ich nun sauberer arbeiten — da ich nicht mehr unterbrochen werde. Ich fühle mich nicht mehr zugebombt mit Requests, sondern beende erst eine Aufgabe (beispielsweise einen Beschaffungsantrag) und rufe dann meine Mails ab (und habe dann auch die Zeit, sie zu bearbeiten).

Um nicht auf ständige Internetverbindung angewiesen zu sein habe ich offlineimap installiert — der zieht sich die Mails von der Firma und speichert sie lokal (im Maildir-Format). Änderungen synct er in beide Richtungen, es ist wirklich ein cooles Stück Software. Ich rufe es aus mutt heraus auf, entweder schneller Abruf (nur die INBOX) oder kompletter Sync (da reicht mir einmal täglich):

macro index O "<shell-escape>offlineimap -a FIRMA<enter>" "run offlineimap to sync all mail"
macro index o "<shell-escape>offlineimap -a FIRMA -qf INBOX<enter>" "run offlineimap to sync inbox"

Mir hilft es auch ungemein, dass mir Fotos und bunte, blinkende, hüpfende Mails nichts mehr präsentiert werden — mutt kann mit HTML-Mails natürlich nicht viel anfangen. So werde ich von Werbung & Co. auch nicht mehr abgelenkt, was ich sehr begrüsse, denn bisweilen bin da etwas anfällig — vor allem, wenn es spät ist, ich müde bin usw. Momentan speichere ich wichtige HTML-Mails und öffne sie dann im Browser — auch das lässt sich per .mailcap auf einen Tastendruck reduzieren, aber ich habe noch nicht raus, wie… Für PDF-Dokumente und Bilder funktioniert es mit Preview.app so:

$ more .mailcap
application/pdf; open -a /Applications/Preview.app %s; needsterminal
image/jpeg; open -a /Applications/Preview.app %s; needsterminal

Update… Und für HTML funktioniert es, indem man per ‚v‘ in die Anhänge wandert, den HTML-Content per ‚m‘ über .mailcap öffnet und in der .mailcap einen Eintrag wie diesen hat:

text/html; open -a "/Applications/Google\ Chrome.app" %s; needsterminal

Mein mutt Ich benutze für meine privaten Accounts und den der Firma getrennte mutt-Konfigurationen, aber gemeinsame .mailcap, .vimrc und so — das vereinfacht es. Die jeweilige mutt-Instanz kann prima in einem screen laufen, und von unterwegs kann ich auf meinen Rechner zu Hause zugreifen und alle Features nutzen. Die dummen Sieve-Filter habe ich abgeschaltet, die brauche ich nicht mehr. Um nicht ständig nach meinen Attachments fahnden zu müssen (und um mir Tipperei zu sparen), habe ich mir einen entsprechenden Alias in die .bash_profile gesetzt:

alias firma="cd ~/Desktop/mutt/firma && /opt/local/bin/mutt -F ~/.muttrc-firma"
alias privat="cd ~/Desktop/mutt/privat && /opt/local/bin/mutt -F ~/.muttrc-privat"

Die Default-Konfiguration der Sidebar funktioniert in MacOS X übrigens nicht so ohne weiteres; per Ctrl+P und Ctrl+N navigiert man zwischen den Ordnern (das ist das, was man mit mailboxes definiert) herum, mit Ctrl+O sollte sich der Ordner öffnen lassen — doch es passiert einfach nichts. Da wird wohl was falsch interpretiert, aber meine Suche nach dem Fehler beschränkte sich, fürchte ich, auf zwei Sekunden. Ich legte mir die Funktion auf Ctrl+L, und da passt es.

set sidebar_width=32
set sidebar_visible=yes
set sidebar_delim='|'
set sidebar_sort=yes
set sidebar_shortpath=yes
color sidebar_new brightcyan black
macro index B ':toggle sidebar_visible^M'
macro pager B ':toggle sidebar_visible^M'
bind index \CP sidebar-prev
bind index \CN sidebar-next
bind index \CL sidebar-open ## Das war ursprünglich \CO
bind pager \CP sidebar-prev
bind pager \CN sidebar-next
bind pager \CL sidebar-open  ## Das war ursprünglich \CO

Wichtig ist für mich auch die Möglichkeit, die Sidebar ein- und auszublenden, da ich öfter mal aus Mails heraus kopieren muss. Der Default liegt eigentlich auf b, aber das biss sich irgendwie mit der bestehenden Konfig, weshalb ich es auf B auslagerte.

Mein Mailarchiv geht zurück bis 2002, mit allen Attachments, denn ich habe mir nur die Mails aufgehoben, die mir wichtig waren. Allerdings sprengt das zum einen die Quota beim Provider, und zum anderen ist es mir zu unsicher, das alles irgendwo vorzuhalten. Die Aufteilung in Unterordner habe ich ebenfalls gekippt, es gibt jetzt nur noch einen Ordner pro Jahr — so ist das wohl, wenn man viele Jahre intensiv drinsteckt. Diese Mails sind in einem lokalen Maildir organisiert, das aus der offlineimap-Konfiguration ganz rausfällt und nicht gesynct wird. Steckt natürlich im lokalen Backup. Zuvor hatte ich das Archiv in diesen lokalen Apple-Mail-Dingsis organisiert, und es war ein mittelprächtiger Krampf (einschliesslich lokalem IMAP-Server!), die da wieder rauszukriegen…

Aufgrund der Nachfrage hier also der Artikel zum Thema, und ich hoffe, ihr könnt etwas damit anfangen. Und habt vielleicht schon beim Lesen eigene Ideen entwickelt? Ich hatte vor etwa vier Wochen zuletzt den grafischen Mailclient an, und ich kann sagen: ich vermisse nichts. Manchmal ist es etwas ungewohnt, das sind solche radikalen Umstellungen ja immer. Nicht zu vernachlässigen ist natürlich auch der Aspekt, dass ich nun viel mehr Ressourcen auf dem Rechner frei habe als vorher: gerade Thunderbird hat mir das RAM immer ganz gut zugeballert. Und ich springe nicht mehr zwischen Sieve-Filtern und lokalen Mailfiltern hin und her, was mich auch sehr froh macht: endlich eine ressourcenschonende Lösung für immer und von überall her.

Über eure Erfahrungsberichte würde ich mich sehr freuen.

4
  1. Nachdem ich letztens diesen Artikel gelesen hatte, schaute ich direkt mal nach, ob ich meine alten Mutt-Dotfiles noch irgendwo rumzuliegen hatte – und wurde fündig.

    Ich installierte mir dann auch mal schnell Mutt per Homebrew (--with-trash-patch --with-confirm-attachment-patch --with-s-lang) und habe die über zehn Jahre lang nicht angefassten Config-Files auf den aktuellen Stand gebracht.

    Was soll ich sagen – es dauerte nicht lange und die Tasten-Kombinationen sassen wieder. Mail.app habe ich seit rund einer Woche nicht gestartet :-)

    In diesem Sinne – vielen Dank für die Inspiration!

  2. Ich bin [noch] bei gmail und nutze auch deren Kalender. Beides schon seit 2007, das sind rund 5GB an eMails. Längerfristig möchte ich da weg und brauche auch keine GUI für die Verwaltung, ich LIEBE die Konsole [wenn ich auch noch kein superduper Zauberheld bin].

    Allerdings ist mutt sozusagen nur der Verwalter, wenn ich das richtig sehe; einen Server brauche ich ja immer noch, oder? Irgendwie raffe ich den technischen Teil von „eMail“ noch nicht: Um [von Gmail] unabhängig zu werden, brauche ich einen Ort = eine Festplatte, wo all meine eMails liegen, eine eMail-Adresse/einen Server = früher eben @gmail.com, an den meine Kontakte schreiben können UND ???
    [Webhosting-Pakete bei checkdomain, wo ich zwei Domains habe, kosten 5-7 Euro im Monat :-/.]

    Jedenfalls 1000 Dank für den Artikel, der mich zum zweiten Mal und final von mutt überzeugt.

  3. Immer wieder erstaunlich wie man im Zeitalter hochgezüchteter Grafikkarten und Multiprozessormaschinen mit dutzenden Gigabyte RAM auf „antike“ Software-Lösungen zurück greifen muss, weil die „Moderne“ Software zusammen klappt :D Das lässt imho tief blicken was die Fähigkeiten heutiger Softwareentwickler an geht. Find Ich.

Keine weitere Reaktionen mehr möglich.