Mutt est certainement le meilleur logiciel de lecture de courrier électronique (en anglais, mail user agent) existant sous Unix. Voici quelques-unes de ses fonctionnalités...
Tout d'abord, il s'agit d'un logiciel non graphique, qu'on lance dans un terminal texte. Cela peut être vu comme un inconvénient par certains, mais l'interface est très bien conçue, faisant de Mutt un logiciel très agréable à utiliser, et cela présente aussi des avantages: il est très rapide, on peut le lancer sur une machine distante via une connexion en mode texte (c'est utile pour certains d'entre nous!) et un certain nombre d'opérations peuvent être faites en mode graphique (en utilisant un client XWindow): composition de messages, lecture de messages (éventuellement de manière exceptionnelle), visualisation des attachements, etc.
Mutt supporte parfaitement les derniers standards: MIME (encodages, attachements, jeux de caractères, PGP/MIME, DSN, etc.), POP3, IMAP, différents formats de boîtes aux lettres (mbox, MMDF, MH, maildir), etc.
Mutt est entièrement configurable: possibilité d'écrire des macros, n'importe quelle fonction ou macro peut être attachée à n'importe quelle opération clavier, contrôle des en-têtes pour l'affichage et la composition des messages, configuration puissante pour la mise en page (index, couleurs), l'archivage des e-mails et autres fonctions.
Les enfilades peuvent être affichées sous forme d'arbre de réponses, avec détection possible des messages manquants. Il est possible d'effectuer des opérations liées à cet arbre.
Mutt a des fonctions spéciales pour les listes de diffusion, avec notamment le support du pseudo-standard Mail-Followup-To.
Les attachements imbriqués sont très bien supportés et affichés sous forme d'arbre.
Malgré toutes ses fonctionnalités, Mutt utilise peu de mémoire (son code est très propre) et est très efficace. Il tourne sans problème sur de petites configurations, comme sur les grosses, même avec des boîtes aux lettres énormes.
Mutt est traduit dans plus de 20 langues différentes, dont le français (je suis co-traducteur et le mainteneur de cette traduction en français).
Enfin, Mutt est un logiciel libre (distribué sous la licence GPL).
Personnellement, j'utilise Mutt depuis octobre 1996 (version 0.47).
Traduction en français: fichier fr.po; il s'agit de la dernière version, à n'utiliser qu'avec les dernières versions de développement.
Mes utilitaires escreen et sh.screen. La commande escreen (script Perl) est utilisée par mon script smutt décrit ci-dessous: il s'agit d'un wrapper de GNU Screen pour sauver le nouvel environnement (e.g. correspondant à la nouvelle session graphique) dans un fichier. Elle est à utiliser conjointement avec sh.screen, qui est un wrapper du shell (habituellement /bin/sh) utilisé pour exécuter une commande; ce wrapper a pour but de récupérer le nouvel environnement. Ainsi une session Screen survivant à un changement de session graphique (soit parce que le serveur X a été relancé après un logout, soit parce que la session Screen est reprise à travers un ssh) pourra continuer à lancer des applications graphiques sur le bon écran.
Note: pour pouvoir utiliser le wrapper sh.screen, Mutt doit être recompilé avec l'option de configure --with-exec-shell=/path/to/sh.screen.
Mon script smutt, dont la fonctionnalité principale est de lancer Mutt dans une session Screen ou rappeler la session Screen de Mutt courante s'il y en a une. Il utilise le wrapper escreen (voir ci-dessus).
Le script smutt utilise maintenant un petit script apptty, qui désactive certaines fonctionnalités du terminal inutiles et en conflit avec l'utilisation de Mutt dans le cas présent.
Note: la fonctionnalité de changer l'environnement via un fichier externe était déjà supportée directement par une ancienne version, écrite à l'origine en février 2003, mais restait limitée à l'éditeur (pour composer des messages...), via mon script mutteditor (voir ci-dessous).
Mon script mutteditor, wrapper de GNU Emacs, dont le but initial était de récupérer l'environnement sauvé par smutt pour que l'éditeur (pour composer des messages...) s'ouvre sur le bon écran. Ce script permet aussi de remplacer les données malformées par un caractère représentable dans la locale courante (c'est nécessaire pour Emacs) et d'enlever les caractères de contrôle de U+007F à U+009F; pour cela, le script mkprintable est utilisé (à mettre dans son répertoire ~/bin ou modifier le chemin dans le script mutteditor).
Mon script Perl mutt-mailto, permettant d'envoyer un e-mail avec Mutt à partir d'une URL en mailto:, fournie au script en argument. Lorsque ce script est lancé depuis un terminal, Mutt est simplement lancé dans ce terminal. Sinon, Mutt est lancé dans une fenêtre Emacs, qui fait office de terminal; la raison est que j'utilise Emacs comme éditeur, et je peux ainsi réutiliser la même fenêtre pour la composition du message.
Pour cela, il vous faut aussi le fichier
emacs-mutt.el
(à installer dans un répertoire listé dans la variable
Emacs load-path)
ainsi que le script
mutteditor
déjà mentionné ci-dessus et l'utilitaire
gnuclient. De plus, le script
mutteditor contient (en commentaire) du
code à mettre dans son .emacs; ou bien utiliser
mutteditor.el
(à charger depuis votre .emacs,
avec (load "mutteditor" t)
par exemple),
qui contient ce code, ainsi que d'autres choses utiles décrites
ci-dessous.
Pour utiliser ce script mutt-mailto
lors d'un clic sur un lien mailto:
dans Firefox sous
GNU/Linux (et peut-être d'autres systèmes similaires),
ouvrir l'onglet Applications des préférences,
et pour l'entrée mailto, choisir
Use other...
et sélectionner le script
mutt-mailto. Il y avait une autre méthode,
qui ne
fonctionne plus: ouvrir l'URL spéciale
about:config et ajouter
(ou modifier) la préférence
network.protocol-handler.app.mailto,
en donnant comme valeur la chaîne
mutt-mailto.
Note: puisque Mutt supporte en fait les URL mailto: en argument (ce qui n'était pas documenté), le script mutt-mailto pourrait être simplifié.
Le patch sysdotlock, qui fournit une option de configure --with-system-dotlock pour choisir un utilitaire mutt_dotlock existant (déjà installé sur le système).
J'avais écrit un patch --with-dotlock initial le 2002-07-29. Le patch ci-dessus est basé sur celui que Tamotsu Takahashi a écrit le 2005-02-03, que j'ai mis à jour.
Mon patch address_all_patt, qui ajoute un modificateur de motif ~a pour les adresses se trouvant dans tout en-tête pris en compte par Mutt dans sa structure d'enveloppe: From:
, Sender:
, To:
, Cc:
, Bcc:
, Return-Path:
, Reply-To:
, Mail-Followup-To:
.
J'ai écrit le patch initial le 2008-05-30 (ancien ticket 3065), que j'ai mis à jour.
Le patch progress, qui fournit une barre de progression en couleur.
C'est le patch que Rocco Rutte a écrit le 2009-03-17, avec une correction que j'ai faite le 2010-08-02.
Mon patch simplesearchkw pour rendre les simple search keywords
optionnels.
J'ai écrit ce patch le 2012-06-04 (ancien ticket 3586).
Mon patch pretty_size pour améliorer l'affichage pretty size
(bytes size display).
J'ai écrit ce patch le 2020-04-24 (ancienne version, partiellement incorrecte) et je l'ai corrigé le 2024-07-10 (son comportement a dû être changé).
Mon patch save history, permettant de sauver l'historique dans un fichier, a été intégré au dépôt de Mutt et cette fonctionnalité sera disponible dans Mutt 1.6. Pour ceux qui ont une version plus ancienne de Mutt, voici la dernière version de mon patch. L'historique est contrôlé par les variables $history_file et $save_history (taille minimum de l'historique dans le fichier), et est sauvé en encodage UTF-8 de façon à avoir un comportement cohérent si l'utilisateur change de locales. La première version datait de juillet 2002.
Mon patch time_inc, pour empêcher l'information de progression d'être affichée trop souvent (e.g. quand on fait une recherche sur une grosse boîte-aux-lettres). Des variables de contrôle de cette information de progression existent, mais elles permettent seulement à l'utilisateur de dire quelque chose du genre: afficher la progression tous les 10 messages traités. Comme le temps moyen de traitement d'un message peut être très différent d'un contexte à l'autre, ces variables ne suffisent pas: si on veut que l'information de progression soit mise à jour suffisamment souvent (dans n'importe quelle condition, comme une recherche dans le corps des messages), il faut une petite valeur; mais dans le même temps, cela peut ralentir Mutt énormément pour les opérations les plus rapides (e.g. une recherche dans l'objet des messages), surtout s'il tourne sur une machine distante (e.g. via SSH). Ce patch rend ainsi Mutt bien plus rapide sous certaines conditions, sans inconvénient. J'ai posté des informations techniques et le patch dans la liste de diffusion mutt-dev le 2006-11-22.
Le dépôt de Mutt contient maintenant une fonctionnalité similaire, qui sera disponible dans Mutt 1.6. Cf changeset 5288:b68ccc2e66e2 et changeset 5293:daf29fe0ed4c.
Pour Mac OS X, j'utilisais le fichier url-mailto.el (à adapter suivant vos besoins) en remplacement du fichier fourni par Emacs 22.3; il nécessite gnuserv-compat.el et sa dépendance gnuserv.el (non fournis par MacPorts, mais ce sont de vieux fichiers que vous pouvez trouver sur le web, par exemple). Les premières versions d'Emacs 22 devaient utiliser cet ancien fichier url-mailto.el à la place. Concernant l'installation, il suffit que ce fichier soit trouvé dans le load-path avant le fichier officiel. Ceci ne fonctionne pas avec Cocoa Emacs 23, et je n'ai pas encore de solution.
Dans les préférences de Mac OS X (e.g. avec RCDefaultApp), il suffit de choisir Emacs comme application à lancer pour l'e-mail, et Mutt sera lancé automatiquement dans une fenêtre Emacs. Je suppose que ça marche aussi avec d'autres navigateurs web. Mais il y a un problème que je n'ai pas réussi à résoudre: si une fenêtre (plus précisément, une frame) d'Emacs est présente, elle va être réutilisée (au lieu d'en obtenir une nouvelle), puis automatiquement fermée quand Mutt sera quitté.
Si votre terminal est correctement configuré, i.e. si l'encodage des caractères utilisé par le terminal correspond bien à vos locales, il n'y a théoriquement rien à configurer du côté de Mutt (mais voir ci-dessous). En effet, par défaut, les caractères sont automatiquement convertis dans l'encodage spécifié par les locales, via la bibliothèque libiconv. Ce comportement peut être changé en spécifiant un autre encodage dans la variable $charset.
Si votre terminal est configuré pour utiliser un encodage d'Unicode (normalement UTF-8), tout devrait bien se passer, sauf problème éventuel (comme des fontes manquantes) non spécifique à Mutt. Sinon, il est possible que certains caractères à afficher ne fassent pas partie du jeu de caractères local. Par exemple, c'est le cas du symbole Euro (€) en ISO-8859-1, ou plus généralement, du guillemet simple fermant (’), que certains utilisent comme apostrophe. Lorsqu'un tel caractère ne peut pas être converti ou que la chaîne d'entrée contient une séquence invalide, Mutt affiche à la place un ou plusieurs caractères de remplacement (en général, ce sont des points d'interrogation). Alternativement, on peut vouloir remplacer un caractère non représentable dans le jeu de caractères local par un caractère équivalent ou semblable. Cela s'appelle la translittération, qui peut être activée à l'aide du suffixe //TRANSLIT. Ainsi le guillemet simple fermant peut être remplacé par le caractère accent aigu (´) ou par le caractère apostrophe (') dans un terminal utilisant l'encodage ISO-8859-1.
Pour utiliser la translittération dans Mutt, il suffit donc d'ajouter la ligne suivante à votre fichier .muttrc:
set charset=`locale charmap`//TRANSLIT
Sous Mac OS X (Darwin), la commande locale charmap ne fonctionne malheureusement pas (sans même terminer dans un état d'erreur), bien qu'elle soit définie par POSIX. J'utilise donc la ligne suivante dans mon fichier .muttrc:
set charset=`codeset 2> /dev/null || locale charmap`//TRANSLIT
où le source C de la commande codeset est le suivant: codeset.c.
Note: si vous utilisez Mutt dans une session Screen en UTF-8 sur un terminal ISO-8859, alors la translittération ne pourrait être faite que par Screen (de manière nécessairement plus limitée, de façon à respecter l'alignement des caractères dans le terminal), mais Screen ne semble pas supporter la translittération et n'utilise pas libiconv.
Si vous utilisez le terminal xterm, il est recommandé de mettre la ressource X11 keepSelection à true (vous devez avoir xterm #230 ou plus). Ceci peut être fait de manière permanente en ajoutant la ligne
*keepSelection: true
à votre fichier $XAPPLRESDIR/XTerm ou
XTerm*keepSelection: true
à votre fichier .Xresources (les différentes façons de fixer cette option peuvent dépendre de votre système et votre configuration). Cette option se trouve aussi dans le menu VT Options (qui apparaît avec Ctrl-clic avec le bouton du milieu), mais cela affecterait uniquement la fenêtre xterm courante.
Si vous ne l'avez pas encore fait, il faut d'abord régler les problèmes liés aux encodages des caractères (charset), en particulier si votre langue contient des caractères non ASCII (par exemple à cause de diacritiques, comme les accents) ou si vous communiquez avec des personnes dont le nom peut contenir de tels caractères. Lorsque vous devez composer un message (que ce soit un nouveau message ou une réponse), Mutt lance l'éditeur avec un contenu (éventuellement vide) dans l'encodage spécifié par votre environnement (locales). Lorsque vous quittez l'éditeur, le fichier contenant le message doit avoir le même encodage (qui n'est pas forcément celui utilisé lors de l'envoi du message par Mutt).
Par défaut, Emacs est configuré pour utiliser l'encodage (coding system, dans le jargon d'Emacs) spécifié par les locales. Vous n'avez donc rien à faire de particulier. En cas de conflit avec le reste de votre configuration, vous pouvez toujours mettre la ligne suivante dans un find-file-hook de votre fichier .emacs:
(prefer-coding-system locale-coding-system)
Cela peut cependant poser des problèmes si vous devez éditer des messages avec la fonction edit-message de Mutt; dans ce cas, le code donné plus bas est préférable, même s'il n'est pas parfait.
Par défaut, les entrées-sorties ne sont pas configurées correctement lorsqu'Emacs est lancé dans un terminal texte (e.g. xterm). Pour cela, vous devez ajouter à votre .emacs:
(when (not window-system) (set-keyboard-coding-system locale-coding-system) (set-terminal-coding-system locale-coding-system) )
Aussi, si vous avez un fichier de signature, celui-ci doit être également dans l'encodage spécifié par les locales. Si vous utilisez plusieurs locales (c'est mon cas), vous pouvez convertir la signature dans le bon encodage à la volée avec iconv, en mettant la bonne commande dans votre .muttrc. Par exemple, pour faire une conversion à partir de iso-8859-1:
set signature="iconv -f iso-8859-1 $HOME/.signature|"
Exemple de code Emacs LISP pour placer le curseur après les lignes de l'en-tête éventuelle et enlever toute signature citée quand on répond à des messages (remerciements à Ralf Fassel pour son aide):
(add-hook 'find-file-hook (lambda () (when (string-match "^mutt-.*-[0-9]+-[0-9]+-[0-9]+$" (file-name-nondirectory (buffer-file-name))) (set (make-local-variable 'backup-inhibited) t) ;; The following code is executed only when composing messages ;; (new messages or replies), not when editing messages (which ;; start with "From ") from the mailbox. (when (looking-at "^From:") (flush-lines "^\\(> \n\\)*> -- \\(\\(\n> .*\\)+\\|$\\)") (not-modified) (search-forward "\n\n" nil t)) (mail-mode) )))
À placer dans son fichier .emacs après adaptation éventuelle...
Un autre exemple, pour choisir correctement le système de codage du fichier édité:
(defun mutt-search-header (regexp) (goto-char (point-min)) (while (not (or (eolp) (looking-at regexp))) (forward-line 1)) (not (eolp)) ) (defun mutt-find-file-coding-system (arg-list) "\ Determine the coding system of a mail file. Use the current locale if the file doesn't declare a charset (in practice, when composing a mail message instead of editing one). This is a heuristic." (if (eq (car arg-list) 'insert-file-contents) (let ((case-fold-search t)) (save-excursion (goto-char (point-min)) (cond ((looking-at "^From:") ;; Composed mail (new mail or reply). locale-coding-system) ((and (mutt-search-header "Content-Transfer-Encoding: 8bit") (mutt-search-header "Content-Type:.*charset=\"?\\([-0-9a-z]*\\)")) (let ((charset (intern (downcase (match-string 1))))) (if (memq charset (coding-system-list)) (progn (message "Found charset %s in header." charset) charset) 'undecided-unix))) (t 'undecided-unix)))) 'undecided-unix) ) (modify-coding-system-alist 'file "/mutt-.*-[0-9]+-[0-9]+-[0-9]+\\'" 'mutt-find-file-coding-system)
Ce doit être le système de codage spécifié par les
locales lors de la composition d'un
message (soit un nouveau message ou une réponse). Mais quand un message est
édité (grâce à la fonction edit-message de
Mutt), ce devrait être le
charset
du message,
lorsque cela a un sens (les messages avec attachements MIME
ne sont pas supportés).
Les pages officielles de Mutt, où vous pouvez trouver de la documentation, les sites pour le télécharger, etc.
Le wiki.
Voici mon .muttrc (fichier de configuration). Il ne devrait plus contenir de commandes strictement privées (comme les commandes alternates). Mais il est sage de le comprendre et de l'adapter à vos besoins avant de l'utiliser.
Cette section est obsolète.