Gérer ses mails en local : étape 3, rendre le tout utilisable avec mutt !
Ce billet fait partie d'une série d'articles présentant la façon dont je gère mes mails en local. Si vous êtes arrivés là sans lire l'introduction, c'est probablement une bonne idée de commencer par le début.
- Étape 0 : Introduction
- Étape 1 : Synchronisation IMAP avec OfflineIMAP
- Étape 2 : Envoi d'e-mails avec msmtp et msmtpq
- Étape 3 : Configuration de mutt ← vous êtes ici !
- Étape 3 bis : Dose supplémentaire de mutt
- Étape 4 : Chiffrement et signature avec PGP
On commence enfin à en avoir fini avec la configuration « sous le capot », et on va enfin pouvoir voir directement les conséquences de nos bidouillages. Je vous présente donc Mutt, le client mail moins pourri que les autres.
C'est même, à traduction approximative près, leur slogan officiel.
Mutt est un client mail en mode console qui, conformément à la philosophie Unix, a été conçu pour être uniquement un client mail, c'est à dire qui lit un dossier de types Maildir, et qui permet de gérer son contenu efficacement. Il est très rapide, efficace, clair, et surtout, configurable à l'infini.
Installation et premiers pas
Pour l'installer, sans surprise, aptitude install mutt
en root fera l'affaire.
Pour le lancer, il suffit de lui préciser le dossier que l'on veut qu'il lise.
Par exemple :
mutt -f ~/Mail/ikura_damien
vu que dans mon .offlineimaprc
, j'avais indiqué ce dossier comme destination
d'une de mes boîtes mail.
Je laisse faire au lecteur ses premiers pas dans mutt. Globalement, c'est plutôt
intuitif - j
/k
ou les flèches directionnelles pour se déplacer, Entrée
pour ouvrir un mail, q
pour revenir au menu précédent… Dès qu'on cherche à
faire une action, il suffit de taper ?
au clavier pour obtenir la liste des
commandes disponibles avec une description courte. On s'y fait assez vite, il
n'y a pas besoin d'un tutoriel détaillé comme pour vim, par exemple. Par contre,
par défaut, la configuration n'est pas très utilisable. Modifions donc le
fichier de config', ~/.muttrc
, pour en faire un mutt aux petits oignons qui
fait exactement ce qu'on veut.
Évidemment, en pratique, devoir taper quelque chose d'aussi comme mutt -f
~/Mail/ikura_damien
quand on veut ouvrir sa boîte mail, c'est affreusement
long, donc j'ai un alias dans mon ~/.bash_aliases
:
alias dam="mutt -f ~/Mail/dam"
où dam
est un lien symbolique vers ~/Mail/ikura_damien
(ce qui permet de
changer de dossier dans mutt en cliquant c
, et en entrant =dam
, au lieu de
=ikura_damien
).
Réglages internes
Alias
Mutt a un système d'alias minimaliste que je trouve pratique. L'idée est de
taper « maman » dans le champ « To: » d'un mail qu'on veut envoyer, au lieu de
adressedemamaman@gmail.com. Pour ajouter un alias, appuyer sur a
alors qu'un
mail de la personne en question est sélectionné.
set alias_file=~/.muttalias
source ~/.muttalias
set reverse_alias
Je sais que d'autres utilisent des logiciels de carnet d'adresses plus complexes (abook, ou des systèmes basés sur ldbd) mais en ce qui me concerne, ça me suffit.
Cache
Mutt a une fonction, désactivée par défaut, pour mettre certaines données (des
en-têtes ou même le contenu de messages) en cache quelque part. Ça permet,
notamment, de charger beaucoup plus rapidement le contenu de boîtes de réception
récemment ouvertes. Pour activer cette fonction, on peut par exemple créer un
dossier cache
dans le ~/.mutt
et ajouter :
set header_cache = ~/.mutt/cache/headers
set message_cachedir = ~/.mutt/cache/bodies
dans le ~/.muttrc
.
Identités alternatives
Le comportement de mutt dépend parfois de la condition « est-ce que le message courant est un message reçu, ou un message envoyé » (par exemple, si on essaie de « répondre » à un message qu'on a envoyé, on a pas envie de se répondre à soi-même…). Et comme tout ce qu'il sait faire, c'est lire le contenu de dossiers, il n'a pas de méthode infaillible pour ça. Il faut donc l'aider avec un morceau de configuration dans lequel on lui dit quelles adresses e-mail sont les notres.
alternates ".*@desfontain.es|ddfontaines@gmail.com"
Configuration spécifique au dossier dans lequel on se trouve
C'est bien beau, tout ça, mais on aimerait bien que mutt interagisse avec le
reste du système. Par exemple, qu'il sache quelle commande exécuter lorsqu'on
lui dit d'envoyer un mail. Le paramètre pour ça s'appelle sendmail
. Assez
logiquement, si on veut utiliser msmtpq, il faudrait entrer :
set sendmail = "/usr/local/bin/msmtpq"
sauf que c'est plus compliqué que ça : on veut utiliser le contenu du .msmtprc
pour envoyer les e-mails de plusieurs façons différentes, suivant si on est dans
une boîte ou dans une autre.
On peut faire ça dans mutt, en utilisant des hooks. Dans le .muttrc
, on met
quelque chose de ce type :
folder-hook +dam "source ~/.mutt/damien"
folder-hook +ikura_damien/.* "source ~/.mutt/damien"
pour chaque dossier en local. Le fichier indiqué, ici ~/.mutt/damien
, contient
des morceaux de configuration qui ne seront pris en compte que si le dossier
courant est ~/Mail/ikura_damien
ou ~/Mail/dam
. Dans le morceau de
configuration en question, on met donc plein de choses.
On précise à msmtp la section de sa configuration à utiliser quand on veut envoyer un mail :
set sendmail = "/usr/local/bin/msmtpq -a damien"
on envoie les mails en mettant le bon champ « From: » :
set from = "damien@desfontai.nes"
on se met en copie de chaque mail envoyé (pas mal de gens avec qui j'ai discuté trouvent ça bizarre, moi j'aime bien voir sur une même page les mails que j'envoie et ceux que je reçois) :
my_hdr bcc: damien@desfontai.nes
du coup, ça ne sert à rien de garder une copie des mails envoyés dans un autre dossier :
unset record
et enfin, on indique l'endroit où on veut stocker les brouillons :
set postponed=+"ikura_damien/drafts"
Affichage et interface
Moins de questions, plus d'efficacité
Pas besoin de demander confirmation avant de sauver un message dans un dossier ou lorsqu'un message est déplacé par un script :
set noconfirmappend
set move = no
pas non plus besoin de poser cinquante mille questions sur les headers lorsqu'on répond à un mail :
set fast_reply
pour envoyer un mail, appuyer sur « Entrée » après avoir fermé l'éditeur, ça paraît naturel :
bind compose <Return> send-message
par ailleurs, ouvrir les boîtes mails compressées naturellement, ça permet de gagner du temps le jour où on en a l'utilité :
open-hook \\.gz$ "gzip -cd %f > %t"
close-hook \\.gz$ "gzip -c %t > %f"
append-hook \\.gz$ "gzip -c %t >> %f"
et d'un coup, ça va déjà plus vite :-)
Utiliser l'éditeur de son choix
Évidemment, une grande partie du temps qu'on passe sur un client mail consiste à envoyer des mails, donc le choix (et la bonne configuration) de l'éditeur de texte utilisé est aussi important que celui du client mail lui-même.
set editor="vim -c 'set tw=70 et'"
J'utilise vim, avec ma configuration habituelle (que je détaillerai dans un
prochain billet, peut-être, un jour), en lui indiquant en plus d'utiliser des
lignes de 70 caractères, pour être non seulement en règle vis-à-vis de la RFC
sur le sujet mais pour avoir
un peu de marge (et que les réponses, qui vont décaler chaque ligne de deux
caractères en rajoutant les >
, respectent toujours la RFC).
En passant, on en profite pour afficher les en-têtes du mail dans l'éditeur lui-même, ce qui permet de rajouter des destinataires ou de changer le sujet plus facilement qu'en faisant ça à l'intérieur de mutt.
set edit_headers = yes
Ah, et les signatures automatiques, je trouve ça horripilant, donc évitons.
unset signature
Avoir un joli affichage, c'est important
Par défaut, mutt manque sacrément de couleurs, et n'a pas vraiment une utilisation optimale de l'écran par défaut. Bien entendu, ses possibilités infinies de configuration permettent facilement non seulement de combler les lacunes de l'affichage par défaut, mais aussi d'obtenir une interface qui convient exactement aux besoins de chaque utilisateur.
Le pager, et le comportement des menus
Déjà, on utilise le pager de mutt parce que généralement, on a de la place sur l'écran : quand on consulte un message, on a une partie de l'écran qui permet de voir quels sont les quelques mails précédents et suivants, comme un petit menu. C'est très pratique.
set pager_context=5
set pager_index_lines=6
Ensuite, j'ai horreur de l'affichage de la liste de mails « par pages », où lorsqu'on descend plus bas que ce qui est déjà affiché, on se retrouve tout en haut de la page suivante. C'est beaucoup moins fluide qu'avec le bout de config' qui supprime ce phénomène.
set menu_scroll
set menu_context=6
Quand quelqu'un répond à un mail, on a envie de pouvoir accéder au mail original rapidement, et c'est particulièrement vrai lors de grosses discussions avec plein de ramifications. On va donc dire à mutt de trier les messages par fil de discussion, et il va même nous afficher les discussions compliquées sous la forme d'un joli arbre dans la liste.
set sort=threads
set sort_aux="last-date-received"
set strict_threads
Des couleurs, vite !
Bon, ça va déjà mieux, mais ça manque d'un truc important : la couleur. Avec les hooks de mutt, on peut profiter de la puissance des expressions régulières pour colorer n'importe quoi de n'importe quelle couleur. Ce morceau de config' prend vite de la place, donc on peut le mettre dans un fichier à part, que l'on appelle de la façon suivante :
source ~/.mutt/colors
j'ai mis mon ~/.mutt/colors
personnel en ligne. Je ne pourrais pas
me passer de la fonction qui colore les mails adressés à moi personnellement
différemment (de façon beaucoup plus visible) que les mails reçus parce que je
suis sur une liste de diffusion : en général, ceux de la première catégorie sont
beaucoup plus importants.
Pour une interface vraiment aux petits oignons
Continuons avec quelques trucs moins importants, qui sont plus du confort qu'autre chose. La genre de barre bleue en haut ne sert franchement à rien donc enlevons-la :
set help = no
j'aime bien marquer visuellement la fin des e-mails par des tildes :
set tilde
je n'ai pas envie de « voir » quand une ligne a été coupée en deux, c'est moche :
set nomarkers
je n'ai pas envie de voir toutes les en-têtes d'un mail, mais seulement celles susceptibles de m'intéresser :
ignore *
unignore From: Subject To Cc Date Reply Organization Newsgroup
j'ai envie que les lignes soient coupées intelligemment, entre les mots, lorsqu'elles ne tiennent pas sur l'écran :
set smart_wrap
je suis content que les entrées du menu « alias » soient triés en fonction de l'alias et non pas du nom ou de l'adresse réelle de la personne :
set sort_alias = alias
et pour finir, afficher la version de mutt au démarrage, ça ne coûte rien et c'est joli :
push <show-version>
joie, bonheur, allégresse, mon client mail ressemble exactement à ce dont je rêvais quand j'étais petit.