Mutt, le client mail

Attention : cet article est en cours de rédaction. Certaines sections peuvent être incomplètes, voir inexactes si en attente de relecture.
All mail clients suck. This one just sucks less.
-- Michael R. Elkins, circa 1995.
Vers 1995, Thunderbird n'existait pas encore.
-- Étienne Mollier, vers 2020.

Introduction

Cet article présente le client mail Mutt et une façon particulière de le configurer pour s'en servir à la fois en tant que client de messagerie, et pour naviguer dans ses archives de courriels. Ce devait au départ n'être qu'une entrée de journal datée du 9 février 2020, mais qui a pris beaucoup d'ampleur au fur et à mesure que les informations sont allé remplir la page.

Figure : Page d'accueil de Mutt avec une configuration vierge
l'image est essentiellement blanche, étant donné que le spool local
	de l'utilisateur emollier est vide.  En tête, une barre d'outils
	comporte « q:Quit d:Del u:Undel s:Save m:Mail r:Reply g:Group ?:Help »,
	et en bas, la barre d'état dit « Mutt: /var/mail/emollier [Msgs:0] »,
	suivi de « (threads/date) » et enfin « (all) ».  Une dernière ligne
	blanche apparait sous la barre d'état, qui servira à recueillir les
	commandes, un peu comme dans vi.

Les instructions présentées ci-dessous ont été essentiellement obtenues en suivant le guide du débutant, sur le wiki du projet Mutt, en Anglais. Sans son aide, ma configuration de départ aurait très probablement été beaucoup plus bancale. Je reporte mes notes ici, afin de pouvoir m'en resservir un jour, au cas où configurer un autre client Mutt serait nécessaire.

Après avoir passé plus de temps dans la documentation, je ne saurais que trop recommander de lire la documentation de Mutt. Même si ce manuel peut parfois être assez aride, il se lit relativement bien, et toutes les questions que j'ai pu me poser au sujet de cet outils y ont trouvé réponse. Même si tout ne sera pas forcément utile, les possibilités de ce MUA donnent une nouvelle dimension au courriel. Pour certaines personnes, il peut même quasiment s'agir de leur interface principale lors de leurs activités informatiques habituelles, comme peut en témoigner Greg Kroah-Hartman.

Installer

Mutt est disponible dans Debian, via le paquet intelligemment appelé mutt, qui donc s'installe simplement à coups de :

$ sudo apt install mutt

À noter, à l'instar de Neovim pour le Vim de Bram Moolenar, il existe une réimplémentation Neomutt de Mutt. Dans les deux cas, les objectifs sont similaire, moderniser la base de code afin d'en améliorer la maintenabilité. Le projet Neomutt dit ainsi avoir réussi à faire accepter un certain nombre d'améliorations comme la sidebar dans le code source du Mutt original. Pour information, jusqu'en Debian 9, un certain nombre de rustines en provenance de Neomutt étaient directement appliquées dans Mutt, mais à partir de Debian 10, ces modifications sont apportées dans un paquet neomutt séparé, ce qui a été source de confusion pour pas mal d'utiilisateurs au moment de la transition.

Configurer

Ici a lieu le gros du travail. Il faut configurer le client afin qu'il contacte votre boîte de courriel. Par défaut, en lançant mutt après installation, le logiciel va consulter les courriels dans le spool local de la machine, ce qui n'est guère intéressant que si vous hébergez vous-même votre courriel. Il y a fort à parier que vous préfererez vous connecter en IMAP, afin d'accéder au courriel fourni par votre hébergeur. À noter que gregkh utilise le programme mbsync, fourni par le paquet isync, afin de synchroniser localement boîte de courriel via IMAP en arrière plan. Ça pourrait être un outil intéressant de plus à essayer, pour la peine.  :)

La configuration Mutt se trouve à la racine du répertoire home de l'utilisateur, dans le fichier .muttrc. Par défaut, ce fichier est inexistant, et les options auront alors les valeurs par défaut documentées dans le manuel de muttrc(5). Voici un exemple de fichier de configuration pour se mettre le pied à l'étrier :

# Mon compte
set realname  = "Prénom Nom"
set smtp_url  = "smtps://prenom.nom@example.org@mail.example.org:465"
set spoolfile = "imaps://prenom.nom@example.org@mail.example.org:993/INBOX"
set record    = "imaps://prenom.nom@example.org@mail.example.org:993/sent"
set folder    = "~/mail"
set postponed = "+drafts"

# Paramètres généraux
set mbox_type = Maildir
set header_cache = "~/.cache/mutt_headers/"
set mail_check = 60
set timeout = 30

# Affectation des touches
bind pager      k previous-line
bind pager      j next-line
bind pager   <up> previous-line
bind pager <down> next-line

# Thème de couleurs un peu plus sobre
color attachment default       default
color bold       brightdefault default
color tilde      green         default
color quoted     yellow        default
color message    default       default
color status     brightyellow  red
color hdrdefault brightyellow  red
color indicator  white         green
color markers    default       default
color normal     default       default
color search     black         brightyellow
color tree       default       default
color underline  green         default
color signature  magenta       default
Attention : les numéros de ports peuvent varier en fonction de votre fournisseur de courriel. Ne copiez/collez pas l'exemple ci-dessus aveuglément. Reférez vous à la documentation de votre hébergeur, qui ne manquera pas de publier ces informations sur son site web, si c'est un acteur sérieux.

Voici une description des différents champs, afin de dégrossir un peu tout ça. Commençons par la première partie, qui décrit comment se connecter à votre compte :

La seconde partie de la configuration contient quelques paramètre qui, étant donné ma configuration, étaient intéressants à modifier :

Il est également possible de changer l'affectation des touches de clavier. Le comportement par défaut consiste à passer d'un courriel à l'autre quand on appuie sur les touches j et k, ou bien les flèches du clavier, ce qui est assez contre-intuitif en comparaison avec l'affection des touches dans quasiment tous les autres programmes, ou le défilement se fait ligne à ligne.

Pour rentrer dans les détails, la directive bind permet de réaffecter les touches. Son premier argument indique dans quel context, ici pager indique que c'est le comportement du pageur qui doit être modifié. Le second argument est la touche du clavier. Le dernier argument est la fonction à associer à la touche.

Enfin, comme beaucoup d'autres applications ncurses semi-graphique, il est possible de changer le thême de couleur. En effet, Mutt n'échappe pas à cette règle, le jeu de couleur par défaut est criard. Notez qu'en général, pour toutes les applications de ce type, s'en tenir aux couleurs par défaut de la fonte et de l'arrière plan permet d'avoir l'expérience la plus homogène, en passant d'un programme à l'autre.

À ce titre, la directive permettant de changer le jeu de couleur est color. Tout comme bind, le premier argument indique le contexte. Ensuite sont spécifiées la couleur de la fonte, puis celle de l'arrière plan. Typiquement, pour en revenir à un thème sobre, le premier réglage à noter est donc :

color normal default default

Un petit détail anecdotique, le système d'exploitation fournit également une configuration système globale dans /etc/Muttrc, mais en tant qu'utilisateur normal, ce n'est pas elle qui va nous intéresser.

Normalement, les options par défaut de Mutt intègrent par défaut le chiffrement depuis le client Mutt vers le serveur IMAP. Pour avoir regardé quelles étaient les options de chiffrement par défaut pour ces connextions, les valeurs par défaut semblaient tout à fait honorables. Pis, il semblait peu sage de dériver de la configuration par défaut.

Quelques options d'environnement permettent de compléter cette configuration. Elles sont documentées dans le manuel de mutt(1), et se configurent typiquement dans le .profile ou plus généralement le .bashrc, en fonction des configurations, afin que tous les programmes, et pas seulement Mutt, puissent en profiter. On notera notamment :

export EDITOR="vi"
export EMAIL="prenom.nom@example.org"

Enfin, les programmes à sélectionner en fonction des types de fichiers qui peuvent figurer en pièces joints, peuvent être définis dans le fichier ~/.mailcap, dont le format est également documenté en page de manuel mailcap(5). En voici un court exemple :

# Programs dedicated to specific formats
text/html; surf -- %s >/dev/null; test=test -n "$DISPLAY"
text/html; w3m %s ; needsterminal
image/gif; mpv --loop=inf -- %s >/dev/null; test=test -n "$DISPLAY"
application/pdf; zathura -- %s >/dev/null; test=test -n "$DISPLAY"
application/x-xcf; gimp -- %s >/dev/null; test=test -n "$DISPLAY"

# Default programs, when nothing better is available
video/*; mpv -- %s >/dev/null; test=test -n "$DISPLAY"
image/*; feh -- %s; test=test -n "$DISPLAY"; edit=gimp -- %s
text/*;  vim -- %s; needsterminal

# Programs with copious output should be always last, for noninteractive use.
text/html; w3m -dump %s; copiousoutput
text/*; cat -- %s; copiousoutput
image/*; catimg -- %s; copiousoutput

À noter que d'autres programmes, comme le navigateur web w3m, sont capable de lire ce fichier Mailcap pour savoir quel programme lancer avec quel type de fichier, modulo un lien symbolique vers ~/.mailcap dans le cas de w3m, qui a sont propre fichier dans ~/.w3m/. En tant que tel, Mailcap mériterait son propre article, tant il y a de spécificités à mentionner à son égard. La lecture de la RFC 1524 est chaudement recommandée, à ce titre.

Manipuler

Pour lancer Mutt, rien de plus simple, il faut, roulements de tambour, lancer mutt :

$ mutt

Le serveur IMAP va demander le mot de passe du compte. Une fois celui-ci accepté, les courriers entrants sont affichés au milieu de la fenêtre qui s'affiche. L'en-tête indique les fonctions de base qui peuvent être exécutées, ainsi que les touches associées pour les déclencher. Par exemple, q permet de quitter, m permet d'écrire un nouveau courriel, et ? permet d'accéder à la liste complète des commandes disponibles. Voici une copie de l'en-tête :

q:Quit  d:Del  u:Undel  s:Save  m:Mail  r:Reply  g:Group  ?:Help

Migrer depuis un MUA existant

Afin de ne pas perdre l'intégralité des courriels archivés à gauche et à droite, il est important de comprendre comment sont stockées les différentes archives. Avec Thunderbird par exemple, les archives locales sont par défaut stockées à l'intérieur du profil de l'utilisateur, sous le répertoire .thunderbird, cachées au milieu de toute la configuration du MUA. Plus les archives sont volumineuses, plus il est facile de les repérer, avec une commande du calculant l'utilisation du stockage par exemple.

Par défaut également, Thunderbird va utiliser le format mbox, sa gestion du format Maildir ayant longtemps été non supportée puis buggée. Chaque dossier de courriels, représentés sous forme de répertoire dans Thunderbir, var en réalité correspondre à un

Me concernant, ayant utilisé très tôt Thunderbird en mode Maildir, tout en ayant stocké les archives dans un dossier séparé et visible, déjà intitulé ~/mail, la question de partir à la recherche de la location ou de la conversion des archives ne s'est pas posé, d'où le défaut d'exemple dans ce chapitre. Un point qui a été piégeux par contre avec Maildir, et son interprétation par Mutt. Par définition, un Maildir, c'est un répertoire avec exactement trois sous répertoires :

Or, Thunderbird ne produit les répertoires en questions que s'ils sont strictement nécessaires pour le stockage d'un courriel. En tant que tels, les Maildirs produits par Thunderbird ne sont pas utilisables par Mutt avant de bien s'être assuré de la présence des trois sous-répertoires dans l'archive. À la première tentative de lecture des courriels, avoir un répertoire vide, sans message d'erreur particulier, ça fait bizarre.  :(

À l'inverse, les Maildir de Thunderbird contiennent une quantité de fichiers divers, servant essentiellement de cache pour les en-têtes, afin de fluidifier l'interface graphique. Ces fichiers ne sont pas nécessaires et peuvent être effacés après migration vers Mutt, à moins de vouloir continuer à utiliser Thunderbird.

Voici un exemple d'ensembles de Maildirs stockés dans un folder nommé mail et tout à fait valides du point de vue de Mutt, aussi longtemps que les trois répertoires cur, new et tmp sont présents :

$ ls mail/*
mail/2020:
cur  new  tmp

mail/archive-2019:
cur  new  tmp

mail/drafts:
cur  new  tmp

Davantage de ressources

[ICO]NameLast modifiedSize
[PARENTDIR]Parent Directory  -
[IMG]mutt-gravure.png2020-02-09 21:06 830
[IMG]mutt.png2020-02-09 21:04 6.4K

La rédaction de cet article a commencé le dimanche 9 février 2020. Il est pour le moment inachevé.