Mailstack

Obwohl ich mir redlich Mühe gegeben habe, die Nutzung von mutt mit Unterstützung von GnuPG aufwendig zu gestalten, ist mein Mailstack ausgesprochen flach – praktisch übernimmt mutt alle MxA-Aufgaben. Neben prinzipiellen Nachteilen (experimentelle Protokollunterstützung!) hat diese Überforderung auch praktische Folgen, denn mutt benötigt stets eine Verbindung zum IMAP-Server, um E-Mails anzuzeigen, und manche Konferenzräume haben gewisse Gemeinsamkeiten mit der äußeren Mongolei.

Das Internet hat sich längst auf die Kombination von OfflineImap als MRA, msmtp als MTA und mutt als MUA geeinigt und liefert neben mehreren Anleitungen zur Konfiguration aller Komponenten eine plausible Begründung für den nicht unerheblichen Aufwand:

Und wenn ihr euch jetzt fragt: Warum in aller Welt sollte ich mir das antun? – keine Sorge – das ist eine berechtigte Frage. Aber, so unter uns: Warum sollte man allen ernstes auf einer Text-Konsole mit einem Editor arbeiten, der vor knapp 40 Jahren erfunden wurde?

Die Kompilation verläuft allerdings erstaunlich glatt (abgesehen von einer zirkulären Referenz zwischen pkg-config und glib-2.0, die sich mit dem Flag --with-internal-glib auflösen lässt), so dass ich erst an meinem Lieblingsgegner scheitere – Zertifikate. Während es mir nach einigen Versuchen gelingt, die DFN-Zertifikatskette zu hinterlegen, weist OfflineImap das Zertifikat meines privaten E-Mail-Providers beharrlich zurück. Früher™ hätte ich vermutlich einige Zeit in die Lösung dieses Problems investiert, nun rufe ich einfach den Fingerabdruck des IMAP-Servers ab –

openssl s_client -connect imap.provider.de:993 < /dev/null 2>/dev/null | openssl x509 -fingerprint -noout -in /dev/stdin

– und hinterlege ihn mit den Parametern cert_fingerprint (→ .offlineimaprc) und tls_fingerprint (→ .msmtprc). Merke: OfflineImap wünscht keine Trennzeichen, msmtp besteht auf Doppelpunkten. Chacun à son goût.

Die aktuelle msmtp-Version unterstützt den OS X-Schlüsselbund, ermöglicht aber (wie mutt) auch die Einbindung eines Shell-Kommandos bzw. des Schlüsselbund-CLI security:

# .msmtprc passwordeval security find-internet-password -l imap.provider.de -w # .muttrc set smtp_pass=`security find-internet-password -l imap.provider.de -w` set imap_pass=smtp_pass

Für OfflineImap muss man diesen simplen Aufruf in eine Python-Funktion einbetten, die ihrerseits über den Parameter pythonfile in .offlineimaprc referenziert wird:

#!/usr/bin/python import re, subprocess def get_keychain_pass(account=None, server=None): params = { 'security': '/usr/bin/security', 'command': 'find-generic-password', 'account': account, 'server': server, } command = "%(security)s %(command)s -w -a %(account)s -s %(server)s" % params output = subprocess.check_output(command, shell=True, stderr=subprocess.STDOUT) return output.rstrip() # .offlineimaprc remotepasseval = get_keychain_pass(account="username", server="imap.provider.de")

TTL: 0:47:39, verbunden mit dem guten Gefühl, künftig auch in Bunkern konferieren zu können.