Mutt Howto Virginie Vacca, virginie@muttfr.org 12 Mars 2001 Changelog: sections alias, patterns, et menus compléments dans vim et procmail. Ce document est une toute première mouture d'un futur Mutt-HowTo, soyez indulgents :) Introduction Licence

ce document est sous .

Copyright (c) 2001 Virginie Vacca.

Permission vous est donnée de distribuer, modifier des copies de cette page tant que cette note apparaît clairement.

Remerciements et dédicace

Remerciements aux habitués de muttfr pour leurs contributions, en particulier Luc hermitte et Yahn Kerhervé. Je dédicace ce howto à Gianny, qui a accepté mon adhésion à parinux lors de la linux expo 2000, avec l'espoir qu'il abandonne un jour Outlook express :). Qu'est-ce que mutt ?

Mutt est un très sympathique

Mutt est léger, modulaire et entièrement paramétrable : aucune fonctionnalité inutile, aucun besoin qui ne puisse être satisfait par un petit patch, un add-on ou une simple option. Toutes les commandes sont configurables, et des macro-commandes peuvent être définies pour faciliter/accélérer les taches courantes ; Grâce à la librairie ncurse, Mutt est dotée d'une interface semi-graphique tout à fait conviviale, et de plus entièrement personnalisable ; Mutt supporte l'arborescence des messages par thèmes, ou Mutt se lance en mode texte, ou sur une simple console : idéal si l'on souhaite se connecter chez soi en SSH ou en telnet pour checker ses mails, idéal pour les amateurs de Screen. Idéal également pour des machines à faible capacité ; Mutt est le plus RFC-compliant des clients mail : pas de formats fantaisistes, et un respect scrupuleux des standards en vigueur et de la netiquette, moyennant quelques options que vous ne manquerez pas d'ajouter. Il supporte également la RFC1522 pour l'encodage/décodage (8-bit) ; Mutt est parfaitement interopérable : Mutt s'utilise en parfaite harmonie avec l'ensemble des applications unix, en particulier vim/procmail/fetchmail, mais également tout programme que vous décideriez d'associer à un type mime particulier). Avec mutt, et moyennant quelques options dans son mailcap, il est possible de visualiser des attach word, des documents PDF, des images etc... il est également possible, grâce à urlview, de browser les URLs contenues dans un fichier texte  Mutt est sans doute l'un des clients les mieux adaptés à la gestion des gros volumes de mails : des centaines de mails filtrés et classés par procmail en moins de 2 minutes, puis intelligemment gérés par Mutt grâce à son système de Mutt supporte et intègre pafaitement PGP et GnuPG (version internationale) ; Mutt supporte le format mbox, infiniment moins lourd que Maildir. Ce format regroupe une multitude de messages en un seul fichier, ce qui facilite les sauvegardes et déplacements ; Mutt dispose, comme beaucoup de programmes Unix, un fichier de configuration unique, et ménage la possibilité d'y appeler d'autres fichiers, ou Et enfin, non des moindres, Mutt est évidemment sous licence GPL.

Ce ne sont quelques unes des caractéristiques de Mutt. Cette petite documentation permettra j'espère aux nouveaux utilisateurs d'en comprendre les principes de fonctionnement, et m'aider à l'améliorer ;)

Installer et compiler Mutt

Mutt est disponible sous forme de paquets debian ou RPM. Toutefois, certaines options nécessitent de compiler les sources, notamment les supports POP, IMAP, SSL etc. Avec les sources, il sera également possible d'appliquer des patchs fournissant encore d'autres options de compilation, comme Télécharger les sources

Vous pouvez télécharger les sources de Mutt sur ces différents sites FTP :

 ;  ; , indispensable pour compiler Mutt.

Si vous ne souhaitez pas ajouter d'options telles que POP, IMAP ou SSL et que vous diposez d'une distribution à base de Redhat ou de Debian, autant installer directement les paquets :

Il n'est pas nécessaire de compiler Mutt avec l'option POP pour faire du POP. Nous pourrons utiliser fetchmail pour remplir cette fonction. Fetchmail permet de récupérer facilement les mails de différents comptes, et il est de plus indépendant du client Mail utilisé (Cf Chapitre 2).

 :  : Ou biensûr, pour les heureux possesseurs de Debian :

Patcher et compiler mutt

Après avoir décompressé le tarball et s'être assuré que l'ensembles des programmes nécessaires est bien installé, c'est le classique configure/make/make install

Pour une installation basique :./configure

Pour une installation plus élaborée, Mutt propose un certain nombre d'options :

--prefix=< install_path_prefix>Permet de modifier le répertoire d'installation. Par défaut : /usr/local. Certains préfèreront créer un répertoire /usr/local/mutt afin de mieux s'y retrouver. Dans ce cas, ne pas oublier de l'ajouter dans son path... --with-cursesinclude=< path to curses.h dir>curses pose souvent des problèmes au moment de la compilation, faire un find / -name curses.h et en préciser le path peut être une bonne idée pour assurer le bon fonctionnement d'autoconf... --enable-popCompile Mutt avec le support POP (inutile si l'on souhaite utiliser un programme externe tel que fetchmail). --enable-hidden-hostForce Mutt à traduire les adresses locales en user@domain plutôt que user@host.domain ; Cette tâche est normallement réservée au MTA, qui traduit les adresses locales en adresses "internet". --enable-imapCompile Mutt avec le support IMAP --enable-sslCompile Mutt avec le support SSL, un compagnon presque obligé pour imap :) --enable-random-sigIndispensable! Permet à Mutt de gérer les signatures aléatoires :)

La configuration s'est bien effectuée ? Vous pouvez alors compiler et installer  make make install

Patcher Mutt

Conservez précieusement les sources, vous pourrez en avoir besoin un jour ou l'autre pour appliquer des petits patchs. La démarche à suivre est très simple :

$ cd rep_sources_mutt/ $ patch -p1 < patch.diff $ ./configure -v

Faire tourner Mutt

Avertissement : ce qui suit n'est qu'une recette pour installer et faire tourner Mutt, il existe d'autres moyens pour le faire, d'autres logiciels pour accomplir les memes tâches. Ceux-ci sont ceux que j'ai testé.

Un agent pour récupérer les mels : Fetchmail

Fetchmail a vocation à checker vos comptes pop et rapatrier le courrier en local. Avec votre éditeur favori, créez un fichier ".fetchmailrc" dans votre home directory, et mettez dedans : poll pop.mon_fai.com proto pop3 user "mon_login" password "mon_mot_de passe" is nom_de_mon user here ; Et c'est tout. Enregistrer le fichier, et virer les droits de lecture/écriture à tous les autres utilisateurs (il y a quand même le mot de passe en clair ! (man chmod)

Un Mail Transport Agent (MTA) pour acheminer vos messages vers l'extérieur : Postfix ou Sendmail

Une fois le courrier rapatrié en local, les messages sont distribués aux différents utilisateurs de la machine et/ou du réseau. Même si vous n'avez qu'une machine et un seul utilisateur, configurer un MTA est un excellent exercice :)

La bonne nouvelle, c'est que la documentation sur le sujet est particulièrement abondante, et les quelques URLs ci-dessous devrait vous permettre de réaliser l'exploit sans trop de difficultés.

La mauvaise, c'est qu'installer un MTA est tout de même une rude mise à l'épreuve : Sendmail, parce que sa syntaxe et son fonctionnement sont pour le moins obscures... Postfix parce que, jusqu'ici, la documentation était largement insuffisante.

Heureusement, Jacoboni est passé par là et on a aujourd'hui les moyens de configurer Sendmail sans rien y comprendre. Ce n'est certes pas très sain, mais le but est de faire tourner Mutt non ?:)

Alors vite :  : Ne vous fiez pas au titre, ce document est entièrement axé Sendmail et extrêmement simple à mettre en oeuvre. Plutôt que les interfaces graphiques, obscures et souvent sources de problèmes, Jacoboni nous permet de configurer proprement et simplement sendmail grâce aux macros M4, et ce en trois commandes seulement!

Encore bonne nouvelle : Jacoboni a également sévi sur Postfix et c'est un vrai régal ! Et puis l'intérêt (énorme) de Postfix, c'est que là au moins on a une chance de comprendre ce qu'on fait...Il existe également un postfix-howto sur le site de redhat.

On y arrive...le fichier de config de Mutt !

Pour commencer, un peu d'ordre...

Petit conseil gratuit : Plus on utilise Mutt, et plus on crée de petits fichiers et autres add-ons, alors autant bien structurer les choses dès le début, sinon ça fait vite désordre :

Créons tout de suite 3 dossiers dans notre ~/Mail/ : Indispensable pour l'utilisation de Mutt, il stockera l'ensemble de vos mails. Mutt vous proposera de le créer automatiquement lors de son premier lancement ; ~/.mutt/ : Facultatif mais utile: on y stockera les alias, les signatures, mailcaps, petits programmes destinés à améliorer Mutt... ~/.procmail/ : Facultatif également mais TRES utile pour une meilleure gestion du flood entrant: on y stockera, par la suite, l'ensemble des filtres de messagerie (que nous aborderons dans la partie .)

Le sample muttrc

Thomas Roessler, dans son infinie sagesse, a pris la précaution d'aider les newbies que nous sommes par un sample.muttrc, habituellement dispo dans /usr/doc/mutt*/. Copiez le in extenso dans votre home directory : $ cp /usr/doc/mutt-1.2i/sample.muttrc ~/.muttrc

Voilà, la moitié du travail est accomplie :)

Le sample muttrc, une fois décommentées les quelques options décrites dans le muttrc de base ci-dessous, devrait déjà permettre d'effectuer les premiers tests, et également fournir, par défaut, une superbe arboresence de vos messages, par "thread".

set folder=~/Mail/ # Le répertoire des mailboxes set editor="vi" # l'éditeur à utiliser pour rédiger les messages my_hdr From: Me <me@free.fr> # le champ From par défaut set spoolfile='/var/spool/mail/me' # l'endroit ou le MTA stocke vos messages ("spool file") set signature="~/.mutt/.signature" # votre fichier signature

Note : pour la spool file (l'endroit où les mels de votre user arrive par défaut lorsqu'un MTA est configuré), vérifier qu'elle existe. Sinon, vous pouvez la créer simplement en vous envoyant un mail : echo test | mail -s test user Si ça ne suffisait pas, créer dans /var/spool/mail un fichier du nom de votre user, à son nom et avec les droits de lecture et d'écriture : # adduser me mail # touch /var/spool/mail/me # chown me:mail /var/spool/mail/me # chmod g+rw /var/spool/mail/me

Quelques commandes pour démarrer

Lancer Mutt

options : -a attache un fichier à ce message -b spécifie une adresse à mettre en copie aveugle (BCC) -c spécifie une adresse à mettre en copie (CC) -e spécifie une commande à exécuter après l'initialisation -f spécifie quelle boîte aux lettres lire -F spécifie un fichier muttrc alternatif -H spécifie un fichier de brouillon d'où lire les en-têtes -i spécifie un fichier que Mutt doit inclure dans la réponse -m spécifie un type de boîte aux lettres par défaut -n fait que Mutt ne lit pas le fichier Muttrc système -p rappelle un message ajourné -R ouvre la boîte aux lettres en mode lecture seule -s spécifie un objet (entre guillemets s'il contient des espaces) -v affiche la version et les définitions de compilation -x simule le mode d'envoi mailx -y sélectionne une boîte aux lettres spécifiée dans votre liste `mailboxes' -z quitte immédiatement s'il n'y a aucun nouveau message dans la boîte aux lettres -Z ouvre le premier dossier contenant un nouveau message -h ce message d'aide

Mutt est lancé...que faire maintenant ?

Ces quelques commandes de base permettront de remplir 95% des tâches courantes en attendant d'en savoir plus:

Pour changer de mailbox, c puis ? pour choisir. Pour un nouveau message, m Pour envoyer le message, y Pour attacher un fichier, a Pour supprimer un message, d Pour annuler la supression d'un message, u Pour voir l'attachement, v Pour sauver le message dans un autre dossier, s Pour sauver l'attachement, v puis s etc .... ? pour l'aide... q pour quitter....

Et pour bien démarrer, je vous invite à lire la traduction de la RFC 1855 .

Configurer et customizer Mutt

Grâce à la rubrique précédente, vous devriez être en mesure d'utiliser Mutt de manière très basique: envoyer et recevoir des mails. Dans cette rubrique, nous allons essayer de voir comment tirer partie au mieux des étonnantes capacités de Mutt : gestion/personnalisation des messages reçus et envoyés, personnalisation de l'interface, de l'affichage etc.

Gérer ses alias avec mutt

Les alias permettent d'associer un nom à une adresse mail. Sous mutt, ils sont stockés dans un fichier sous la forme : alias td Tyler Durden

Dans son muttrc, préciser le chemin du fichier d'alias : source ~/.mutt/aliases.rc set alias_file="~/.mutt/aliases.rc"

Pour chaque nouveau mel entrant, un simple Customiser ses propres commandes et raccourcis clavier les macro-commandes

Mutt reconnait dix types de raccourcis et commandes clavier :

# Key bindings # # maps: # alias alias menu # attach attachment menu # browser directory browser # compose compose menu # index message index # pgp pgp menu # postpone postponed message recall menu # generic generic keymap for all of the above # editor line editor # pager text viewer

En fait, Mutt utilise en particulier trois de ces commandes et/ou macro-commandes, chacune correspondant à un contexte particulier : , , ou . Ainsi, une meme commande, ou un même raccourci clavier, pourra être défini de manière différente selon le contexte dans lequel on se situe. Exemple: Esc-k peut permettre d'attacher sa clé PGP en mode composition, tandis qu'il listera les répertoires lorsqu'on se trouve sur l'index.

Quelques exemples :

macro index l "g?\t" "folder list" # Shows folder list, no need to hit TAB macro pager l "g?\t" "folder list" # Shows folder list, no need to hit TAB macro browser c "qm" "compose mail" # To compse new mail from the browser macro index S "as" "save tagged messages" # Saves tagged messages macro pager P "!gpg --keyserver wwwkeys.us.pgp.net --recv-key 0x" "Get PGP Key" macro pager L "!gpg --lsign-key 0x" "Sign PGP Key" macro index \ee ":source ~/.mutt/muttrc\n" "\"ESC e\" reloads the muttrc" macro pager \ee ":source ~/.mutt/muttrc\n" "\"ESC e\" reloads the muttrc" macro index ":source ~/.mutt/muttrc\n" "Reload the muttrc" macro pager ":source ~/.mutt/muttrc\n" "Reload the muttrc" macro index \cx "!fetchmail\n" "Check for new mail via fetchmail" macro pager \cx "!fetchmail\n" "Check for new mail via fetchmail" macro index A "|~/bin/mail2muttalias.py\n: source ~/.mail_aliases\n" macro pager A "|~/bin/mail2muttalias.py\n: source ~/.mail_aliases\n" macro pager \ea "!vim ~/.mail_aliases\n: source ~/.mail_aliases\n" macro index \ea "!vim ~/.mail_aliases\n: source ~/.mail_aliases\n" bind compose \cl ispell macro compose \Cp "F/usr/bin/pgps\ny" macro index \cx "!fetchmail\n" "Check for new mail via fetchmail" macro pager \cx "!fetchmail\n" "Check for new mail via fetchmail" macro index \ea "!$EDITOR ~/.mutt/aliases\n:source ~/.mutt/aliases\n" "edit aliases file and reload it" macro pager \ea "!$EDITOR ~/.mutt/aliases\n:source ~/.mutt/aliases\n" "edit aliases file and reload it"

Utilisation avancée de Mutt Comprendre les "patterns" Mutt

Les "patterns" mutt permettent de filtrer des messages sur des critères précis (sujet, body, headers etc...). Ils s'appliquent à la plupart des commandes que nous étudierons, notamment les hooks, les tags, les systèmes de scoring, les macros etc. Il est donc important d'en comprendre le principe.

Liste des "patterns" mutt, extraits du manuel de référence :

~A tous les messages ~b EXPR messages contenant EXPR dans le corps du texte (body) ~B EXPR messages contenant EXPR où que ce soit ~c USER messages adressés en copie carbone (Cc) à USER ~C EXPR message comprenant EXPR dans le champs to: ou Cc: ~D messages effacés ~d [MIN]-[MAX] messages compris entre telle et telle date ~E messages expirés ~e EXPR message comprenant EXPR dans le champs ``Sender'' ~F messages flagués ~f USER messages en provenance de USER ~g messages PGP signés ~G messages PGP encryptés ~h EXPR messages contenant EXPR dans les headers ~k message contenant des clés PGP ~i ID message comprenant ID dans le champs ``Message-ID'' ~L EXPR message en provenance de ou reçu par EXPR ~l message adressés à une mailing list connue ~m [MIN]-[MAX] message numéros MIN à MAX ~n [MIN]-[MAX] messages dont le score et compris entre MIN et MAX ~N nouveaux messages ~O vieux messages ~p messages adressés à soi-même (voir $alternates) ~P message en provenance de soi-même (voir $alternates) ~Q messages auxquels on a déjà répondu ~R messages lus ~r [MIN]-[MAX] messages reçus entre telle et telle date ~S superseded messages ~s SUBJECT messages intitulés SUBJECT. ~T messages taggés ~t USER messages addressés à USER ~U messages non lus ~v message compris dans un thread condensé. ~x EXPR messages comprenant EXPR dans le champs `References' ~y EXPR messages comprenant EXPR dans le champs `X-Label' ~z [MIN]-[MAX] messages dont la taille est comprise entre MIN et MAX Où EXPR, USER, ID, et SUBJECT sont des expressions régulières.

Exemple de patterns : ~A -> Tous les messages ~b toto -> Tous les messages comprenant toto dans le corps du texte ~f toto -> Tous les messages en provenance de toto

Exemple appliqué aux tags :

Exemple appliqué aux hooks : fcc-hook ~s urgent =OUT.urgent -> garde une copie dans OUT.urgent des messages sortants comprenant "urgent" dans le sujet.

Le Principe des hooks Mutt

Les folder-hooks

Les folder-hook sont sans doute les hooks les plus puissants et les plus intéressants à exploiter. Ils permettent de personnaliser les headers (champ From, X-Useless header etc), selon la mailboxe (Exemple 1) ou le folder (Exemple 2) utilisés.

Exemple 1 : folder-hook ~/Mail/ML/IN.mutt my_hdr From: Mutt user <me@free.fr> Exemple 2 : folder-hook ~/Mail/ML/ my_hdr From: me <me-ml@free.fr> Dans ce cas, l'ensemble des mailboxes présentes dans le dossier ~/Mail/ML/ héritent des caractéristiques ainsi définies. C'est évidemment l'application la plus intéressante des folder-hooks, surtout lorsqu'on commence à gérer une multitude de mailboxes : celà évite de redéfinir un folder-hook pour chaque nouvelle mailboxe, ce qui devient rapidement ingérable...

Dans tous les cas, il existe plusieurs notations pour désigner la folder-hook =ML/, où le '=' fait référence au répertoire de mail défini par défaut dans son muttrc : set folder=~/Mail/. Ce principe s'applique à tous les hooks, et aux options mutt de manière générale.

Les folder-hooks permettent même d'attribuer une folder-hook =ML/ source ~/.mutt/ml.muttrc De cette manière, il est alors très simple de définir un "mini-muttrc" dont les propriétés s'appliqueront à l'ensemble du répertoire contenant les MLs : # Propriétés des MLs # ~/.mutt/ml.muttrc set index_format="%4C %Z %N %{%b %d} %-15.15L (%4l) %s" set signature="~/.mutt/.signature-ml" set sort=threads my_hdr From: Me my_hdr X-LUG: http://www.parinux.org my_hdr X-URL: http://www.muttfr.org push #Condense les threads set record="/dev/null" #Ne conserve aucune copie des messages sortants # Cas particuliers: folder-hook =ML/IN.april my_hdr From: Me

Les send-hooks

Les Ex : send-hook mutt-users@mutt.org "set signature=~/.mutt/.muttsig"

Les fcc-hooks

Les Ex : fcc-hook Pierre =Outboxes/OUT.pierre

Les save-hooks

Les save-hook null =News/linuxFR Note : "null" est le nom utilisé par le mailer linuxfr, c'est donc le nom que propose mutt, par défaut, pour stocker les fameuses news...le save-hook permet de le changer pour un nom plus significatif, et crée automatiquement la mailboxe linuxFR dès le premier message ainsi sauvegarder, ici dans le folder ~/Mail/News.

Les mbox-hooks

Les mbox-hook =IN.parinux ~/Mail/Archives/parinux.archive

Autres Hooks

Les pgp-hooks

Les pgp-hook associent une clé PGP à un destinataire. Cf section .

open-hook, close-hook, append-hook

Ces hooks permettent d'ouvrir, fermer ou ajouter des messages à une archive existante. Nécessite le Compressed Folder Patch, qui n'a pas encore été intégré à Mutt à cause de ses quelques bugs :). Exemple : open-hook \\.bz2$ "bzip2 -cd %f > %t" close-hook \\.bz2$ "bzip2 -c %t > %f" append-hook \\.bz2$ "bzip2 -c %t >> %f" Ou encore : open-hook \\.gz$ "gzip -cd %f > %t" close-hook \\.gz$ "gzip -c %t > %f" append-hook \\.gz$ "gzip -c %t >> %f" Ces deux exemples permettent, respectivement, d'appliquer ces facultés à des archives bz2 ou gz.

Editer et formatter ses messages : Mutt et Vim

J'utilise personnellement Mutt et vim dans un xterm. Il s'agit d'un terminal couleur, dont les caractéristiques peuvent donc être définies par ctermfg et ctermbg (foreground et background). L'ensemble des caractéristiques de VIM est défini dans .vimrc, mais il est possible d'intégrer à son muttrc des variables spécifiques, qui s'appliqueront en priorité lorsque VIM est utilisé dans ce contexte.

Ce qui suit est une retranscription, avec l'autorisation de Linuxmag, du petit articleque j'avais rédigé pourleur numéro de Novembre 2001. Merci à eux ;))

Configuration de base

En mode édition, mutt s'en remet entièrement à l'éditeur par défaut. C'est donc cet éditeur, en l'occurence VIM, qui devra être configuré pour accomplir différentes petites tâches telles que la suppression automatique des signatures quotées, le paramétrage des couleurs, le formatage du texte ainsi qu'une multitude d'autres options.

La configuration de base nécessaire à la suite de cet article ne repose que sur deux prérequis : définir VIM comme éditeur par défaut dans le fichier de configuration de mutt : set editor="vim" ; Activer, si ce n'est déjà fait, la coloration syntaxique VIM, indispensable pour la personnalisation des en-têtes mutt en mode édition : syntax on

A présent on peut passer aux choses sérieuses :)

Automatisation des tâches courantes à l'aide des autocommandes VIM Tronquer les lignes trop longues

Une des principales règles de courtoisie Usenet consiste à ne pas dépasser 80 caractère de large. Une largeur de 72 à 76 (en tenant compte des quotes lors des différents reply), constitue donc une option raisonnable. Ce paramétrage peut être effectué d'au moins deux manières :

La méthode la plus simple consiste à appeler vim avec l'option textwidth, directement dans son ~/.muttrc : set editor="vim -c 'set textwidth=72'"

Une solution plus élégante consiste à définir une autocommande VIM, dans son ~/.vimrc : au BufRead ~/.tmp/mutt* set tw=72

Cette auto-commande s'applique aux fichiers temporaires créés par VIM lorsqu'il est appelé par l'application. Par défaut, /tmp/nom_application*[0-9]. Ce type de commande peut donc être élargie à de multiples applications autres que mutt, sous réserve que l'on spécifie les chemins et noms de fichiers temporaires correspondant. Ici, la désignation des fichiers ~/.tmp/mutt* suppose que ~/.tmp ait été défini comme répertoire temporaire par défaut dans son muttrc : set tmpdir="~/.tmp"

Il est également possible de supprimer automatiquement ses la sauvegarde automatique et donc l'entassement de ces fichiers en cas de réécriture, uniquement pour mutt : au BufNewfile,BufRead ~/.tmp/mutt*[0-9] set nobk nowb

Supprimer automatiquement les signatures lors du reply

Comme toute autre tâche réalisée en mode édition, la suppression des signatures quotées revient à l'éditeur par défaut, non à mutt. Le principe consiste à déterminer, dans son vimrc, une commande chargée de remplir cette fonction, puis d'activer cette fonction par défaut en fonction du contexte (en l'occurence dans mutt).

Un exemple de configuration est fournie dans certains paquets vim, permettant au passage de positionner convenablement le curseur :

map ,kqs G?^> *-- $d} au BufRead ~/.tmp/mutt*[0-9] :normal ,kqs

Cette autocommande peu élaborée a cependant le défaut de beeper et susciter un message d'erreur lorsqu'aucune signature n'est détectée. Pour l'éviter, il est possible d'introduire une ou plusieurs conditions par l'intermédiaire d'une fonction plus élaborée, comme celle de Yahn Kehervé (ci-dessous) : "--------------------------------------------------------------------------- " Function: Erase_Sig_but_Your() " Purpose: Delete signatures at the end of e-mail replies. But keep " your sig intact. (if mutt (or other MUA) had added it) " Features: * Does not beep when no signature is found " * Also deletes the empty lines (even those beginning by '>') " preceding the signature. " * keep your sig intact " Author: Yann Kerhervé based on Luc Hermitte " work "--------------------------------------------------------------------------- " here was my beeping macro :) " map ,kqs G?^> *-- $d/^-- $/-2 function! Erase_Sig_but_Your() " Search for the signature pattern : "^> -- $" let lastline = line ('$') let i = lastline " (1) while i >= 1 if getline(i) =~ '^> *-- $' break endif let i = i - 1 endwhile " let find the beginning of our sig let j = i while j < lastline let j = j + 1 if getline(j) =~ '^-- $' let j = j - 1 break endif endwhile " If (1) found, then if i != 0 " First, search for the last non empty (non sig) line while i >= 1 let i = i - 1 " rem : i can't value 1 if getline(i) !~ '^\(>\s*\)*$' break endif endwhile " Second, delete these lines plus the signature let i = i + 1 exe 'normal '.i.'Gd'.j.'G' endif endfunction

Editer et personnaliser ses en-têtes

Lors de la composition de message, mutt intervient de manière pseudo-interactive pour que soient définis les champs To et Subject, et conserve les en-têtes par défaut. Ces champs peuvent ensuite être modifiés avant l'envoi du message, en tapant la première lettre du champs en question. L'éditeur n'intervient alors que pour la rédaction du corps du message.

Il est possible de modifier ce comportement et d'éditer l'ensemble des en-têtes directement dans VIM, de deux manières : ajouter l'option set edit_headers dans son muttrc ; simplement taper 'E' dans le menu d'envoi ;

Pour personnaliser ses en-têtes, une solution propre et simple, proposée par Sven Gückes consiste à définir dans son vimrc des couleurs spécifiques à mutt : sourcer dans son vimrc le fichier contenant les propriétés vim pour mutt : au BufEnter ~/.tmp/mutt* so ~/.vim/mutt.colors ; créer et renseigner le fichier ~/.vim/mutt.colors (exemple ci-dessous). Pour plus d'informations sur la syntaxe de ce fichier et les différentes couleurs disponibles, taper :help highlight, :help cterm ou :help colors dans VIM.

" exemple de fichier ~/.vim/mutt.colors hi mailHeaderKey ctermfg=cyan hi mailSubject ctermfg=magenta hi mailHeader ctermfg=darkcyan hi mailEmail ctermfg=yellow hi mailSignature ctermfg=darkmagenta hi mailQuoted1 ctermfg=darkgreen hi mailQuoted2 ctermfg=darkcyan hi mailQuoted3 ctermfg=darkmagenta hi mailQuoted4 ctermfg=blue hi mailQuoted5 ctermfg=darkblue hi mailQuoted6 ctermfg=black

La liste complète de ces différents champs (emails, en-têtes, subject ...)est en fait définie dans un des fichiers de syntaxe vim, mail.vim (sous debian, /usr/share/vim/vim58/syntax/mail.vim). Il est composés en "régions" (ensembles de champs auxquels seront affectées les mêmes propriétés) et en "matchs", permettant de déterminer des propriétés spécifiques à chacun des champs. Il est donc très facile de le personnaliser : Exemple de region (extraite du mail.vim) :

syn region mailHeaderKey contained start="^\(From\|To\|Cc\|Bcc\|Reply-To\).*" skip=",$" end="$" contains=mailEmail

Exemple de match (personnalisé) :

syn match mailTo contained "^To.*"

Une fois définis, ces différents "matchs" ou "regions" peuvent alors être nommément désignés dans le fichier mutt.colors, et associés à un ensemble de propriétés.

Quelques commandes et macros utiles

Il est toujours possible de regrouper un ensemble de macros, comme nous l'avons fait pour les définitions de couleurs, à condition d'en spécifier le chemin : au BufEnter ~/.tmp/mutt*[0-9] so ~/.vim/mutt.macros

De nombreuses macros utiles sont disponibles sur , passionné de mutt et VIM, et peuvent être utilisées dans ce contexte. Je citerai pour exemple :

mail.set : réunit une grande partie des macros et commentaires de Sven Guckes, et charge au passage les 3 autres fichiers de macros qui suivent ; Mail_Re.set : très utile pour fusionner et repositionner les 're' et 'Re' sur les threads des listes de diffusion mal paramétrées :). Permet également de transformer les "Réf. :" en "Re:" ; Mail_Cc.set : permet supprimer sa propre adresse mail lorsqu'on effectue un "group reply" ; Mail_mutt_alias.set : permet d'insérer des destinataires à partir du fichier d'alias mutt, sans quitter VIM, simplement en tapant ,Ca <alias>. Suppose biensûr que le chemin d'alias soit préalablement défini dans cette macro (par défaut, ~/.mutt/aliases) ;

Un seul être vous manque...Vigor !

Et pour terminer sur un clin d'oeil, et parce qu'un seul être vous manque depuis que vous avez lachement abandonné Outlook Express, sachez qu'il existe aussi...LE trombone pour VI ! Je ne doute pas que l'incontournable compagnon, aussi utile qu'esthétique, saura répondre à toutes les questions qui pourraient subsister après la lecture de cet article ;).

Références pour aller plus loin

 : de nombreuses macros utiles pour VIM. Une référence ;  : une autre page de macros VIM, par  ;  ;  : mon petit site (non officiel) sur mutt avec différentes astuces et exemples de configuration.  : page de Sven Gückes, l'un des principaux spécialistes de la question. Sven sévit également sur comp.mail.mutt, avis aux amateurs ;) ;  : des exemples de configuration mail/news (entre autres) pour tous les goûts.

Filtrer ses mails avec procmail

Architecture et principe

Le principe de procmail est simple : faciliter le travail de mutt (ou tout autre client mail) en classant automatiquement les messages entrants dans les mailboxes appropriées.

Un fichier de configuration, ~/.procmailrc, qui définit notamment où se trouvent les filtres et où classer les mels entrants, plus quelques options (fichier de log etc.) ; ~/.procmail/* et contenant nos différents filtres.

Il est tout à fait possible de mettre l'ensemble des filtres dans notre Un exemple de .procmailrc

#~/.procmailrc DEFAULT=$HOME/Mail/mbox MAILDIR=$HOME/Mail LOGFILE=$MAILDIR/.procmail-log VERBOSE=off PMDIR=$HOME/.procmail INCLUDERC=$PMDIR/rc.ml-linux INCLUDERC=$PMDIR/rc.parinux INCLUDERC=$PMDIR/rc.flood INCLUDERC=$PMDIR/rc.news

Note : si comme moi vous gérez plusieurs folders dans votre ~/Mail, le plus simple est de retirer l'option MAILDIR, et la mettre directement dans vos différentes RCfiles avec le chemin qui va bien (ce qui évite de le répéter pour chaque filtre).

#~/.procmail/rc.news MAILDIR=$HOME/Mail/News

Voir également mon .

Quelques exemples de filtres pour vos rcfiles :

#Filtrage sur le champ Subject : # Sujet Commencant par editor et contenant l'expression emacs à envoyer # a la poubelle : :0: * ^Subject: editor.*emacs /dev/null #Filtrage sur le champ Subject a envoyer vers le folder vim :0: * ^Subject: Notification.*vim vim # Stocke les messages en provenance de Linus dans le # répertoire /home/me/tux/corresp/linus # et en garde une copie sur le serveur (c rule option) :0c: * ^From.*linus /home/me/tux/corresp/linus # Stocke chaque message du sender boss dans un nouveau fichier # Unix # sous la forme date-nom.nsg :0c: * ^From.*boss@ /home/me/arbeit/boss/`date +%y%m%d-%H%M%S`.msg # Traitement des messages des ML mutt # Un exemple de filtre sophistiqué : :0 * ^To:.*mutt- { # stocke les messages contenant "bug" dans le corps du texte # (option B comme body) dans la mailboxe /home/me/Muttstuff/Devel/ :0cB: * bug /home/me/Muttstuff/Devel/ # Tous ceux qui ne contiennent pas "bug" (!) vont dans # /home/Muttstuff/help/ :0cB: * ! bug /home/me/Muttstuff/help/ }

Autres applications interessantes de procmail Elimination des doublons

:0 Wh: msgid.lock | formail -D 8192 msgid.cache

Le principe est simple. En gros, aucun message ne passe si un ID identique a déjà été signalé : procmail va piper les headers (flag h) des messages entrants vers formail. Formail compare alors les ID de chaque message (option -D) et stocke les plus récents dans un petit fichier de 8Ko max (msgid.cache dans l'exemple). Pendant ce temps, procmail attends la réponse (flag W). Si formail repère des IDs identiques, il retourne "VRAI" et procmail *bloque* les duplicats.

Mutt, PGP et GNUPG

Configuration rapide

Ce dont vous aurez besoin :

Une version *internationale de mutt*, genre 1.2.5i Un logiciel de crypto, PGP ou GnuPG, installé et configuré : Voir le  ; Une doc/ fourni avec Mutt : gpg.rc, pgp5.rc ou autre selon le logiciel de crypto que vous utilisez 

Copier ce fichier source dans votre ~/.mutt/, et ajouter une ligne dans votre muttrc pour indiquer à Mutt de la prendre en compte :

source ~/.mutt/pgp5.rc # Si PGP5, ou : source ~/.mutt/gpg.rc # Si GnuPG

Le tour est joué :) Maintenant, et si vous avez correctement configuré PGP (ou gnuPG), il suffira, dans mutt, une fois votre message sauvé (et juste avant de l'envoyer), de taper Les pgp-hook

Les pgp-hooks permettent d'associer une clé unique à une adresse mel, ce qui accélère considérablement la manip :

Dans son muttrc, ajouter :

pgp-hook [pattern] [keyID] Exemple: pgp-hook destinataire@truc.org 0xD69D68E5

Quelques options intéressantes :

En plus du pgp.rc, très complet, quelques options utiles méritent d'être signalées :

# Encrypter automatiquement les réponses à des messages cryptés : set pgp_replyencrypt # Signer automatiquement les réponses à des message signés set pgp_replysign # Oublier la phrase PGP au bout d'1h set pgp_timeout=3600 # Inclure la signature PGP dans le corps du message en tapant Ctrl-p : macro compose \Cp "F/usr/bin/pgps\ny"