Table of contents
Worum geht’s?
Diesmal geht es um das Einrichten und Benutzen des Kommandozeilen-Mailclients
mutt-ng
(Weiterentwicklung von mutt
). Als System
kommt Linux zum Einsatz, prinzipiell sollte es jedoch auf allen unixoiden
Systemen funktionieren, ich habe sogar mal von einer Portierung von
mutt
für Windows gehört… (das soll nicht heißen, dass Windows
unixoid sei, im Gegenteil!)
Ich benutze mutt-ng
hauptsächlich, da ich meinen Mailclient auf
einem zentralen Rechner laufen lassen möchte, da ich zu viele Rechner habe um
das effizient zu synchronisieren und eventuell auch gerne mal von einem
beliebigen anderen Rechner meine Mails beantworten möchte…
Kommandozeile?
Ja, mutt-ng
hat keine grafische Oberfläche und das macht ihn um
einiges flexibler als andere Mailclients – auch in der allgemeinen Flexibilität
(von der Oberfläche abgesehen) sind Kommandozeilenprogramme meist um Einiges
besser als ihre entsprechenden Pendants mit grafischer Oberfläche. Wieso das so
ist, ist schnell erklärt: Das Erstellen einer guten grafischen Oberfläche
dauert seine Zeit und dann soll das Programm auch noch möglichst einfach
gestaltet sein – klar, dass da einige Funktionen auf der Strecke bleiben.
Zu den eben erwähnten Vorteilen gehört zum Beispiel, dass man
mutt-ng
auch über eine SSH-Verbindung benutzen kann, ohne dafür
gleich eine schnelle Verbindung zu benötigen (zum Beispiel wenn man nur einen
Internetzugang über ein 56k-Modem hat oder via GPRS online geht). Außerdem ist
mutt-ng
sehr schnell. Allgemein ist man mit der
Tastatur nach einer gewissen Eingewöhnungsphase schneller, als wenn man dauernd
mit der Maus umhersuchen muss.
Zu den Abbildungen: Die Bildschirmfotos wurden gemacht, als
mutt-ng
in einer screen
-Session
(daher kommt die zusätzliche Zeile ganz unten) lief. Zu sehen ist die
lojban-beginners-Mailingliste. Da es sich hier um ein Konsolenprogramm handelt,
liegt es in der Natur der Sache, dass man auf den Vorschauversionen der
Abbildungen eigentlich nur schwarz sieht ;-).
1.) Installation
mutt-ng
ist zur Zeit noch in Entwicklung aber durchaus benutzbar.
Die aktuelle Version kann man sich aus dem CVS laden, einen täglichen Snapshot
gibt’s unter http://nion.modprobe.de/mutt-ng/snapshots/. Ich
persönlich benutze den Snapshot vom 27.03.2006 (mittlerweile ziemlich alt, aber
er funktioniert gut).
Die Installation selbst verläuft wie bei den meisten anderen Linuxprogrammen, die man aus dem Quelltext kompiliert. Allerdings sollte man sich vorher üerlegen, welche Optionen man in mutt-ng kompilieren möchte, da standardmäßg wirklich nur die Grundfunktionalität enthalten ist. Ich habe mutt-ng mit den folgenden Optionen kompiliert:
./configure --enable-pgp \ --enable-smime \ --with-regex \ --enable-pop \ --enable-imap \ --enable-nntp \ --enable-imap-edit-threads \ --with-ssl \ --enable-hcache \ --with-libesmtp
Die einzelnen Optionen stehen für:
- --enable-pgp: Aktiviert die Unterstützung für das Verschlüsselungstool PGP
- --enable-smime: Aktiviert die Unterstützung für S/MIME, was der Standard für Verschlüsseln und Signieren in MIME (was wiederum zum Transport von E-Mails und Unhägen verwendet wird) ist
- --with-regexp: Erlaubt uns, reguläre Ausdrücke (Regular Expressions) zu verwenden
- --enable-pop, --enable-imap, --enable-nntp: Aktiviert die eingebaute Üterstützung von POP- und IMAP-Postfächern sowie Newsgroups (NNTP). Zumindest IMAP ist für unser Setup notwendig, POP und NNTP sind optional
- --with-ssl: Unterstützung für via SSL verschlüsselte Verbindungen fü POP und IMAP
- --enable-hcache: Unterstützung für das Zwischenspeichern (Caching) der E-Mailkopfzeilen, was die Geschwindigkeit beim Öffnen eines Postfachs enorm erhöht
- --with-libesmtp: Lässt mutt libesmtp statt einem externen Programm zum Verschicken der E-Mails benutzen
Die komplette Liste der verfügbaren Optionen sieht man via ./configure
--help
.
Nachdem configure
fertig ist, kann man mit make &&
make install
mutt kompilieren und installieren.
2.) Einrichtung
OK, ab hier wird’s kompliziert ;-). Ich persönlich habe mich dafür entschieden,
einen eigenen IMAP-Server aufzusetzen, damit ich zur Not auch mit anderen
Clients im Netzwerk diesen Server benutzen kann. Man kann aber natürlich auch
ohne einen eigenen IMAP-Server mutt-ng
benutzen, ich empfehle
jedoch, nicht direkt auf IMAP-Server zu arbeiten, sondern die E-Mails auf jeden
Fall mit fetchmail
abzuholen und lokal zwischenzuspeichern (so
macht man das in der Regel auch mit grafischen Mailclients).
Wir fangen also bei fetchmail
und procmail
an
(procmail
filtert E-Mails, wir werden das dazu benutzen, mehrere
Identitäten oder Postfächer zu verwalten). Vorab noch: Der Benutzer, unter dem
wir arbeiten und an den die E-Mails gehen (lokal), nennen wir mal „michael”.
In der Datei ~/.fetchmailrc
muss man nun konfigurieren, von
welchen Servern fetchmail
die E-Mails abholt und an welchen
lokalen Benutzer diese zugestellt werden sollen. Wichtig sind hierbei die
Protokoll-, SSL- und Benutzereinstellungen. Ich geb’ hier ein Beispiel für
einen normalen, unverschlüsselten POP3-Server und für das verschlüsselte GMail:
poll my.pop3.de with proto pop3 user "michaelmy-pop3-de" pass "beispiel" is "michael" mda "/usr/bin/procmail -f %F" fetchall keeppoll pop.gmail.com with proto pop3 user “michael” pass “natuerlichnichtmeinechtes” is “michael” mda “/usr/bin/procmail -f %F” ssl fetchall keep
Die Syntax sollte klar geworden sein, hier werden also zwei Server abgefragt
(„gepolled”), die POP3 sprechen. Benutzername und Passwort sind
unterschiedlich, im Endeffekt werden die E-Mails aber an den selben lokalen
Benutzer via procmail
zugestellt. Die Verbindung zum GMail-Server
wird über SSL hergestellt, in beiden Fällen werden die E-Mails aber behalten,
was zu Testzwecken nützlich ist (schließlich will man nicht gerne E-Mails
verlieren), später aber geändert werden sollte (einfach die Option „keep”
entfernen). Die Option „fetchall” sorgt dafür, dass alle E-Mails abgerufen
werden, auch wenn sie bereits von einem anderen Mailer als gelesen markiert
wurden (zum Beispiel vom GMail-webinterface).
Hinweis: Wenn man einen eigenen IMAP-Server verwendet, kann man die Zeile mit
procmail
auch weglassen, da wir den Mailer exim
ohnehin so anpassen werden, dass er procmail
benutzt.
2.1) Ohne eigenen IMAP-Server
Wir werden nun procmail
einrichten und im nächsten Abschnitt
schließlich mutt-ng
in Betrieb nehmen. Hier direkt ’mal meine
Konfiguration von procmail
(~/.procmailrc
):
DEFAULT=$HOME/Mail/unsorted MAILDIR=$HOME/Mail LOGFILE=$MAILDIR/log:0:
- ^From:[email protected] freunde
:0:
- ^[email protected] firma
:0:
- ^[email protected] privat
:0:
- ^[email protected] privat
Die drei Variablendefinitionen am Anfang sorgen dafür, dass alle Mails
prinzipiell in $HOME/Mail/unsorted
landen, in meinem Fall also in
/home/michael/Mail/unsorted
. Ein Protokoll über die gefilterten
Mails wird in $MAILDIR/log
abgespeichert, und MAILDIR ist wiederum
$HOME/Mail
. Effektiv kommen also gefilterte Mails bei mir in
/home/michael/Mail/
, ungefilterte in
/home/michael/Mail/unsorted
und die Logdatei ist
/home/michael/Mail/log
.
Auf die ganzen Filtermöglichkeiten von procmail
möchte ich an
dieser Stelle nicht eingehen, gerade auch zur Spamvermeidung gibt’s da schon
einige Websites im Netz, die sich damit befassen.
2.2) Eigener IMAP-Server
Mit einem eigenen IMAP-Server fungieren wir wie ein kleiner E-Mailprovider – nur eben lokal. Das bedeutet, dass sich andere Rechner mit dem Server verbinden und E-Mails ablegen und dass der Anwender sich mit dem Server verbindet und sie abholt. In unserem Fall sind allerdings sowohl zustellender Rechner, als auch Server und Benutzer der selbe Computer.
Der Vorteil eines IMAP-Servers ist, dass man ihn von mehreren Rechnern benutzen kann und die kompletten E-Mails mitsamt ihrer Ordner-Zuordnung synchron sind. Außerdem könnte man dann einfacher das E-Mailprogramm wechseln, wenn man doch in irgendeiner Weise unzufrieden ist mit mutt ;-).
Als Zustellungsprogramm für die E-Mails (SMTP-Server) kommt bei mir
exim
zum Einsatz, der bei Debian standardmäßig verwendet wird. Als
IMAP-Server verwenden wir cyrus
, der ebenfalls für Debian
verfügbar ist.
Cyrus
ist nach einem apt-get install cyrus-imapd
fast
direkt einsatzbereit, man muss nur noch ein Passwort für den Administrator
setzen und die Mailboxen für die Benutzer anlegen:
# passwd cyrus $ cyradm -user cyrus localhost cm user.michael cm user.michael.privat cm user.michael.firma cm user.michael.freunde cm user.michael.Trash cm user.michael.Sent
(Ich habe die Einteilung aus der Procmailkonfiguration beibehalten)
Bei exim
sieht es da schon etwas anders aus. Glücklicherweise wird
man bei der ersten Installation oder nach der Eingabe von
dpkg-reconfigure exim
durch einen Assistenten geleitet, der eine
weitestgehend sinnvolle Konfiguration erzeugt. Hinzufügen muss man in der Regel
nur noch die Verwendung von procmail
:
procmail_pipe: driver = pipe command = "/usr/bin/procmail -t -d ${local_part}" from_hack return_path_add delivery_date_add envelope_to_add suffix = "" user = $local_part group = mail
Im Abschnitt localuser
muss man dann das Transportmittel auf die
eben erstellte procmail_pipe
ändern:
localuser: driver = localuser transport = procmail_pipe
So, das war’s auch schon. Nun müssen wir nur noch procmail
selbst
einrichten, die Konfiguration für einen IMAP-Server unterscheidet sich leicht
von der obigen.
DELIVERMAIL="/usr/sbin/cyrdeliver"
LOGFILE="/var/log/mail/procmail.log"
DEFAULT="$DELIVERMAIL -e -a $LOGNAME -m user.$LOGNAME"
PRIVAT="$DELIVERMAIL -e -a $LOGNAME -m user.$LOGNAME.privat"
FIRMA="$DELIVERMAIL -e -a $LOGNAME -m user.$LOGNAME.firma"
FREUNDE="$DELIVERMAIL -e -a $LOGNAME -m user.$LOGNAME.freunde"
VERBOSE=off
:0 w
* ^From:gute@freundin\.de
| /bin/sed 1d | $FREUNDE
:0 w
* ^TO_michael\.stapelberg@firma\.de
| /bin/sed 1d | $FIRMA
:0 w
* ^TO_michael@privat\.de
| /bin/sed 1d | $PRIVAT
:0 w
* ^TO_mailing@liste\.de
| /bin/sed 1d | $PRIVAT
# Wir loggen das Ergebnis der Zustellung:
:0 w
{
EXITCODE=$?
HOST
}
3.) Konfiguration
Ich werde hier auf meine Konfiguration eingehen, das heißt, welche Optionen ich verwende und warum ich sie verwende. Eine komplette Befehlsreferenz für die Konfigurationsdatei gibt’s im muttng-manual.
Vorsicht: Da in dieser Datei möglicherweise Mailpasswörter im
Klartext abgelegt werden, sollte sie nur für den Benutzer lesbar sein
(chmod 600 ~/.muttngrc
).
Allgemeine Einstellungen
set pager_context=1
Bestimmt die Anzahl der Zeilen, die beim Umblättern von der vorigen Seite
angezeigt werden sollen, um eine bessere Orientierung beim Umblättern zu
haben.
set mail_check=15
Schaut alle 15 Sekunden nach, ob neue Mails auf dem Server liegen.
Vorsicht: 15 Sekunden ist ein sehr kurzer Intervall, den man
sich nur erlauben kann, wenn der IMAP-Server im lokalen Netz betrieben
wird.
set timeout=15
Veranlasst muttng
, nach 15 Sekunden Nichtstun (= keine Eingaben
vom Benutzer) tatsächlich nach neuen Mails zu schauen (also das Ergebnis des
durch mail_check
ausgelösten Checks auszuwerten).
set pager_index_lines=10
Der Mailindex soll mit 10 Zeilen angezeigt werden, während wir uns im Pager
befinden.
set menu_scroll
Aktiviert das Hoch/Runter-Bewegen, wenn man eigentlich außerhalb des
Bildschirms wäre.
set status_on_top
Die Statuszeile soll ganz oben (anstatt ganz unten) angezeigt werden.
set header_cache="~/.muttng/header_cache"
Aktiviert das Zwischenspeichern der Header, das macht muttng
beim
Öffnen einer Mailbox (egal welches Format sie hat) erheblich schneller.
set sort=threads
Mails sollen in der Threadansicht (Baumstruktur) angezeigt werden. Dies trägt
sehr zur Übersichtlichkeit von Mailinglisten bei.
set sort_aux=reverse-date-received
Ansonsten sollen Mails nach Datum sortiert werden.
set mark_old=no
Mails sollen nicht automatisch beim Öffnen der Mailbox auf „alt” gesetzt
werden.
set rfc2047_parameters=yes
Aktiviert das korrekte Verarbeiten von RFC2047-kodierten Dateinamen (betrifft
Attachments mit Umlauten, eigentlich ist diese Kodierung inkorrekt, daher ist
es nicht standardmäß aktiviert ist).
Sidebar
set sidebar_width=15
Setzt die Breide der Sidebar auf 15 Zeichen.
set sidebar_visible=yes
Die Sidebar soll angezeigt werden.
alternates
"michael@nospamplease\.de|michael\.stapelberg@firma\.de"
Die ist eine Auflistung meiner Mailadressen, damit mutt-ng sicher weiß, ob die
jeweilige Mailadresse mir gehört. Reguläre Ausdrücke sind hier
erlaubt.
set record="=Versendet"
Legt fest, dass versendete Mails in den Ordner =Versendet abgelegt werden
sollen.
Ordnerabhängige Einstellungen
folder-hook . source ~/.muttng/fs_defaults
folder-hook privat source ~/.muttng/fs_privat
folder-hook INBOX source ~/.muttng/fs_ms
folder-hook Schule source ~/.muttng/fs_schule
Da der erste Befehl für alle Mailboxen gilt, wird zuerst über den Source-Befehl
die Datei ~/.muttng/fs_defaults
eingebunden, die ein paar
generelle Einetellungen festlegt. Für die anderen Mailboxen werden dann in den
entsprechenden Dateien zum Beispiel andere SMTP-Server festgelegt oder
Einstellungen bezüglich der Kryptographie vorgenommen.
Einstellungen zum Versenden von Mails
set alias_file=~/.muttng/alises
Legt eine Alias-Datei fest, in der Namen wie „stefan” in E-Mailadressen
umgewandelt werden.
source ~/.muttng/aliases
Diese Datei muss außerdem als Konfigurationsdatei eingelesen werden.
set reverse_alias
Aktiviert die Anzeige der in der Aliasdatei festgelegten Namen anstelle der
(eventuell kryptischen, schwer zu merkenden) Mailadresse.
set attribution = "Guten Tag %n,\n\n* [%(%d.%m.%y %H:%M)]:"
Setzt die Standard-anrede. %n
steht für den Absender der E-Mail,
auf die man antwortet und ist leer, wenn man eine neue E-Mail schreibt. Eine
Liste der möglichen Variablen findet man im mutt-ng-Handbuch.
set editor="vim -c 'set tw=78 nocin noai'"
Setzt den Editor, mit dem die Mails geschrieben werden. Ich benutze dafür
vim
ohne Einrückungen mit einer Zeilenlänge von 78 Zeichen.
set delete=yes
Sagt, dass Mails wirklich gelöscht werden sollen, wenn die Änderungen an der
Mailbox gespeichert werden sollen oder eine neue Mailbox geöffnet wird (das ist
hauptsächlich für IMAP-Mailboxen wichtig).
set include=yes
Bindet bei Antworten die Mail, auf die man antwortet, als Zitat mit ein.
set fast_reply=yes
muttng
soll uns bei Antworten nicht nach Name und Betreff fragen –
ersteres ist ohnehin klar und letzteres ändern wir selbst am Ende bei
Bedarf.
unset metoo
Dadurch, dass die Variable nicht gesetzt ist, fügt mutt-ng
uns
nicht zu den Empfängern unserer eigenen Antworten auf einer Mailingliste
hinzu.
unset forward_decrypt
Verschlüsselte Mails sollen beim Weiterleiten nicht entschlüsselt werden. (Das
hatte der Versender vermutlich nicht im Sinne, als er die Mail verschlüsselte.
Weiterleitungen von verschlüsselten Mails sind übrigens nur dann sinnvoll, wenn
man sie an sich selbst weiterleitet oder die Mail an den falschen Empfänger
geraten ist.))
set beep=yes
Erlaubt muttng
zu piepsen (wobei viele Benutzer das Piepsen wohl
durch ein Blinken ersetzt haben).
set beep_new=yes
Lässt muttng
bei Bemerken neuer Mails piepsen (nur ein Mal, egal
wieviele neue Mails in einem Rutsch eingegangen sind, keine Sorge ;-)).
set markers=no
Deaktiviert das Anzeigen von +-Symbolen bei umgebrochenen Zeilen.
IMAP-Einstellungen
set imap_user="michael"
Setzt den Benutzernamen für den IMAP-Server.
set imap_pass=""
Legt das Passwort für den IMAP-Server fest (nein, mein Passwort ist natürlich
nicht leer ;-)).
set folder=imap://localhost/user.michael.
folder
ist der Basisordner, mit ihm wird nachher das =-Symbol
ersetzt. Wenn folder
also „imap://localhost/user.michael.” ist,
wäre die Mailbox =privat
voll ausgeschrieben
„imap://localhost/user.michael.privat”.
set spoolfile=imap://localhost/INBOX
Legt die eigentliche Mailbox fest.
set trash="=Trash"
Unser Mülleimer ist die IMAP-Mailbox =Trash
.
mailboxes imap://localhost/INBOX =privat =schule
Legt die weiteren Mailboxen fest (die dann auch im Pager angezeigt werden –
mutt zeigt nicht automatisch alle verfüfbaren an).
Header
ignore *
unignore Date To From: Subject X-Mailer Organization User-Agent
hdr_order Date From To Subject X-Mailer User-Agent
Organization
Ignoriert zuerst alle Header und schaltet dann diejenigen, die wir sehen
möchten, frei. Letztendlich werden die verbliebenen Header (wenn sie in der
Mail nicht gesetzt sind, werden sie garnicht angezeigt) geordnet.
Farben
color normal white black # Normaler Text
color indicator black red # Die ausgewählte Nachricht
color tree red black # Die Pfeile, die einen Thread zusammenhalten
color status brightyellow blue # Die Statuszeile
color error brightred black # Eine Fehlermeldung
color message red black # Informative Nachrichten
color signature blue black # Die Signatur eines Senders
color attachment brightyellow red # MIME attachments
color search brightyellow red # Suchergebnisse
color tilde black black # Die »~« am Anfang einer Nachricht
color markers red black # Das »+« bei umgebrochenen Zeilen
color hdrdefault blue black # Standardheaderzeilen
color bold red black # *hervorgehobener* Text im Body
color underline green black # _unterstrichener_ Text im Body
color quoted blue black # gequoteter Text
color quoted1 magenta black
color quoted2 red black
color quoted3 green black
color quoted4 blue black
color quoted5 cyan black
color quoted6 magenta black
color quoted7 red black
color quoted8 green black
color quoted9 blue black
#
# object foreground backg. RegExp
#
color header green black "^(Subject):"
color header red black "^(From|X-Mailer|To|Cc|Reply-To|Date):"
color body black white "((ftp|http|https)://|(file|mailto|news):|www\\.)[-a-z0-9_.:]*
[a-z0-9](/[^][{} \t\n\r\"<>()]*[^][{} \t\n\r\"<>().,:!])?/?"
color body green black "((;|:|8\\:|\\=)(-|=|~|_|-'|%|<|)(\\)|Q|P|\\)%))"
color body cyan black "[-a-z_0-9.+]+@[-a-z_0-9.]+"
color body red black "(^| )\\*[-a-z0-9*]+\\*[,.?]?[ \n]"
color body green black "(^| )_[-a-z0-9_]+_[,.?]?[ \n]"
color index blue black ~F # geflagged Nachrichte
color index red black ~N # Neue Nachrichten
color index magenta black ~T # getaggte Nachrichten
color index yellow black ~D # Nachrichten, die als gelöscht
# markiert sind
Diese Farbkonfiguration stammt von liesdiemanpage.de.
Titelleiste
set xterm_set_titles=yes
Aktiviert das Setzen der Titelzeile.
set xterm_title="muttng [new: %n c/%b o]"
Legt das Format der Titelzeile fest.
Tastenbelegung
bind index \CP sidebar-prev
bind pager \CP sidebar-prev
Steuerung (Ctrl) und P (Groß-/Kleinschreibung ist hierbei nicht relevant) wählt
den vorhergehenden Eintrag der Sidebar aus, und das sowohl in der
Index-Ansicht, als auch im Pager.
bind index \CN sidebar-next
bind pager \CN sidebar-next
Wie eben, nur mit Steuerung+N für den nächsten Eintrag.
bind index \CO sidebar-open
bind pager \CO sidebar-open
Wie eben, nur mit Steuerung+O, um die jeweilige Mailbox zu öffnen.
bind index P purge-message
Groß-P löscht die ausgewählte Mail sofort (hier ist Groß-/Kleinschreibung wieder wichtig).
bind pager h display-toggle-weed
h blendet die kompletten Header ein- oder aus.
Reguläre Ausdrücke
set quote_regexp="^( {0,4}[>|:%]| {0,4}[a-z0-9]+[>|]+)+"
Erkennt Zitate um sie richtig einfärben zu können.
set smileys="((:|\\(|;|=)(-|=|-'|%)(\\)|:|\\=))"
Erkennt Smilies wie :-)
, %-(
und so weiter…
set reply_regexp="^((re(\\^[0-9])? ?:|a(nt)?w(ort)?:|wg:|\\(fwd\\))[ \t]+)*"
Wandelt bei Antworten alle überflüssigen AW, Re, ANTWORT, WG, FWD, etc in ein
simples „Re:” um - besonders nützlich, wenn man mit Outlook-Benutzern
kommuniziert.
Mailinglisten
subscribe lojban-beginners
Sagt muttng
, dass man die Mailingliste
lojban-beginners
abonniert hat. Dadurch funktioniert der
Reply-to-Befehl und muttng
setzt den
followup-to
-Header richtig.
GPG-Einstellungen
source ~/.muttng/gpg.rc
Bindet die mitgelieferten Standardwerte mit ein (Die GnuPG aufrufen).
unset crypt_autosign
unset crypt_autoencrypt
Da die Mehrheit der Leute leider kein PGP benutzt, wollen wir Mails nicht
automatisch, sondern nur auf Wunsch verschlüsseln lassen.
set crypt_verify_sig=yes
Wenn wir signierte Mails erhalten, soll die Signatur geprüft werden.
set pgp_sign_as="65B790C2"
Der Key mit dieser ID wird aus dem privaten Schlüsselbund geholt und zum
Signieren verwendet.