09-01-2010 22:28

Mutt, client Email en console

Dans ma quête d'améliorer mes connaissances sur GNU/linux, il m'apparaît indispensable d'apprendre à utiliser le terminal. Pour cela, je choisis d'utiliser celui-ci pour mes activités quotidiennes. En effet, il n'y a que la pratique qui permet d'avoir des automatismes et de progresser significativement.

Une étape importante est donc de gérer mes boîtes mail via la console. Jusqu'à présent, j'utilisais Claws-mail, très efficace au demeurant. Après une recherche sur le net, j'ai découvert Mutt, qui semblait correspondre à mes besoins. Voici en détail mes tatonnements et ce qui en est sorti.

Installation et première approche

Dans le dépôt Current de Frugalware, il existe trois versions de mutt :

  • mutt 1.4.2.3-1 : la version stable
  • mutt-devel 1.5.20-1 : la version la plus à jour
  • mutt-ng 1.5.20-1 : un fork de mutt qui intègre plusieurs patchs.

A l'origine, je souhaitais avoir la possibilité d'avoir une sidebar avec la liste des dossiers. Je choisis donc mutt-ng, qui intègre cette option.

  pacman-g2 -S mutt-ng

Comme pour beaucoup d'applications sur GNU/Linux, toute la configuration se fait via un fichier .$$$rc. Pour pouvoir le modifier, il faut le copier dans son répertoire personnel :

  su
  cp /etc/Muttrc /home/mike/.muttrc
  chown mike /home/mike/.muttrc

Alors, ce fichier est complexe et très personnalisable. Pour pouvoir vous donner une idée de ce qu'il est possible de faire, il existe sur le net des muttrc qui trainent. Je vous conseille cette page du manuel en ligne (en)

Pour remplir correctement votre muttrc, il est bien sur nécessaire de savoir quel protocole utiliser. Pour ma part, j'utilise l'IMAP avec deux comptes gmail : 1 normal et 1 compte googleapps. Voici la partie du muttrc qui permet de se connecter à ces comptes.

  # Compte Gmail (mettre l'adresse sans @gmail.com) 
  # Reception
  account-hook imaps://login@imap.gmail.com:993/ \
    'set record=imaps://login@imap.gmail.com:993/Sent; \
     set imap_pass=xxxxxxxxxxxxx ; \
     set spoolfile=imaps://login@imap.gmail.com:993/INBOX ;\
     set folder=imaps://login@imap.gmail.com:993/'
  mailboxes "=INBOX"
  mailboxes "=ART-LIBRE"
  mailboxes "=WEB-HOST"
  mailboxes "=FAMILLE"
  mailboxes "=Sent"
  
  
  # Compte googleapps (mettre votre adresse complete)
  
  account-hook imaps://adresse-complete@votredomaine.com@imap.gmail.com:993/ \
    'set record=imaps://adresse-complete@votredomaine.com@imap.gmail.com:993/Sent; \
     set imap_pass=xxxxxxxx ;\
     set spoolfile=imaps://adresse-complete@votredomaine.com@imap.gmail.com:993/INBOX ;\
     set folder= imaps://adresse-complete@votredomaine.com@imap.gmail.com:993'
  mailboxes "=INBOX"
  mailboxes "=ecoles"
  mailboxes "=peupleloup"
  mailboxes "=Sent"
   
   unset folder
   unset imap_passive
  
  # SMTP
   
  folder-hook    'imaps://login@imap.gmail.com:993' 'set smtp_url="smtp://login@smtp.gmail.com:587" from="login@gmail.com" smtp_pass="xxxxxxxx"'
   folder-hook    'imaps://adresse-complete@votredomaine.com@@imap.gmail.com:993' 'set smtp_url="smtp://adresse-complete@votredomaine.com@smtp.gmail.com:587" from="adresse-complete@votredomaine.com@" smtp_pass="xxxxxxxxx"'
  
  # Macros pour envoyer dans laboite à spam et remettre dans l'inbox
  
   macro index,pager S "<save-message>=[Gmail]/Spam<enter>"    "mark message as spam"
   macro index,pager H "<save-message>=INBOX<enter>"               "mark message as ham"

Bon, c'est un bon début pour déja voir comment mutt fonctionne. Lancons donc le programme depuis le terminal :

  mutt -y

Au démarrage, Mutt affiche une boîte aux lettres qui n'est pas votre compte gmail. Il s'agit du mail système, où sont rapportés les anomalies. Pour aller dans votre boîte mail, il vous faut changer de boîtes aux lettres avec la touche c et, au prompt, renseigner l'adresse de la boîte :

  imaps://login@imap.gmail.com:993

Vous arrivez alors à la liste des libellés de gmail, qui sont en fait des boîtes aux lettres. Votre boite de reception est INBOX. Et là, miracle, vous obtenez la liste de vos messages, triés selon votre choix dans muttrc.

Le principe de Mutt est très simple : vous avez une page où sont listés les messages. Elle se fait appeler "index". Lorsque vous visualisez un message, vous êtes dans le "pager". Cette notion est importante, notamment pour régler les macros et raccourcis clavier, qui sont différents selon la vue. Voici une revue simplifiée des actions possibles.

Commandes

Vue Index



Touche Action
c changer de BAL
ENTREE voir message
t Selectionner message
T Selectionner messages selon requete
d effacer message
D effacer messages selon requete
m écrire message
s sauver le message dans une BAL
r répondre au message
f transférer le message
g répondre à tous
L répondre à la liste de diffusion
a mettre en alias l'auteur du message
q quitter mutt

Vue Pager



Touche Action
c changer de BAL
v voir pièces jointes
d effacer message
s sauver le message dans une BAL
j message suivant dans la liste
r répondre au message
f transférer le message
g répondre à tous
L répondre à la liste de diffusion
a mettre en alias l'auteur du message
q quitter mutt

Envoi de message

Lorsque vous rédiger un message ou une réponse, mutt lance l'éditeur. Soit un éditeur interne, qui réagit comme Emacs, soit l'éditeur que vous spécifiez dans votre muttrc. Personnellement, j'utilise Vim. Lorsque vous sauvez le texte, vous arrivez alors dans la page d'envoi. C'est ici que vous pouvez insérer des pièces jointes, signer ou crypter vos mails avec PGP et bien sur envoyer votre courriel.

Touche Action
a Attacher fichier
p Options PGP
y Envoyer message

Configuration avancée

Bien sur, il existe tout un tas de paramètres. Je n'en ai pas fait le tour, notamment parce que je n'en ai pas l'utilité pour le moment. Voici les options que j'ai mis en place.

Alias

Pour envoyer un message à quelqu'un qu'on connait bien, c'est plus sympa de pouvoir le faire sans retaper toute l'adresse. Pour se faire, il vous faut créer un fichier qui accueillera les alias :

  $ vim ~/.mutt/aliases

Le contenu sera de ce type (à noter qu'il faut insérer plusieurs espaces entre les paramètres. Le dernier est nécessairement l'email :

  alias drine   Sandrine T  sandrine@domaine.com
  alias pixelpipe   pixelpipe   xxxxx@upload.pixelpipe.com

Pour indiquer à Mutt l'emplacement de ce fichier, il est nécessaire de rajouter ces lignes dans muttrc

  # configuration des alias
  set alias_file= ~/.mutt/aliases
  set sort_alias= alias
  set reverse_alias=yes
  source $alias_file

PGP

Alors pour pouvoir utiliser votre clé PGP pour signer ou chiffrer vos messages, vous devez ajouter du code dans muttrc. J'ai récupéré sur le net un code qui fonctionne très bien :

  # GnuPG
  
  set pgp_decode_command="gpg %?p?--passphrase-fd 0? --no-verbose --batch --output - %f"
  set pgp_verify_command="gpg --no-verbose --batch --output - --verify %s %f"
  set pgp_decrypt_command="gpg --passphrase-fd 0 --no-verbose --batch --output - %f"
  set pgp_sign_command="gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --detach-sign --textmode %?a?-u %a? %f"
  set pgp_clearsign_command="gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --textmode --clearsign %?a?-u %a? %f"
  set pgp_encrypt_only_command="pgpewrap gpg --batch --quiet --no-verbose --output - --encrypt --textmode --armor --always-trust --encrypt-to 0x2EA32E78 -- -r %r -- %f"
  set pgp_encrypt_sign_command="pgpewrap gpg --passphrase-fd 0 --batch --quiet --no-verbose --textmode --output - --encrypt --sign %?a?-u %a? --armor --always-trust --encrypt-to 0x2EA32E78 -- -r %r -- %f"
  set pgp_import_command="gpg --no-verbose --import -v %f"
  set pgp_export_command="gpg --no-verbose --export --armor %r"
  set pgp_verify_key_command="gpg --no-verbose --batch --fingerprint --check-sigs %r"
  set pgp_list_pubring_command="gpg --no-verbose --batch --with-colons --list-keys %r"
  set pgp_list_secring_command="gpg --no-verbose --batch --with-colons --list-secret-keys %r"
  set pgp_autosign=yes
  set pgp_sign_as=0x2EA32E78
  set pgp_replyencrypt=yes
  set pgp_timeout=1800
  set pgp_good_sign="^gpg: bonne signature de"

Filtres

Indispensable à mon sens, le filtrage des messages qui reviennent souvent. Les listes de discussions sont particulièrement concernées par ce système. Dans .muttrc donc :

  # FILTRES
  
  save-hook "~C membres@peupleloup.info" +peupleloup
  save-hook "~C peuple-loup@googlegroups.com" +ecoles
  save-hook "~C copyleft_attitude@april.org" +art-libre
  save-hook "~C debats@april.org" +april
  save-hook "~C sard@societe-civile.org" +sard

Raccourcis pour basculer de compte mail

Oui, parce que c'est plus sympa que de retaper l'adresse imap à chaque redémarrage :

  # imap 'profile change' bindings. Use to switch personalities so that you can
  # browse multiple IMAP servers' folders in the file browser
  
  macro index 1 "c?c^Uimaps://votreadresse-complete@votredomaine.com@imap.gmail.com/INBOX:993^Mq"
  macro index 2 "c?c^Uimaps://login@imap.gmail.com/INBOX:993^Mq"

Thème de couleur

Pour égayer un peu le tout, on peut bien sur personnaliser les couleurs. Voici mon choix :

  # ## COLORS
  #
  # #source ~/.mutt/colors/pink
  # #source ~/.mutt/colors/themes.256
  # #source ~/.mutt/colors/calmar.light
  #
  #
  color attachment brightmagenta black
  color error brightwhite red   # errors yell at you in red
  color hdrdefault red black   # headers
  color indicator brightyellow magenta # currently selected message
  color markers brightcyan black  # the + for wrapped pager lines
  color message brightcyan black  # informational messages, not mail
  color normal white black    # plain text
  color quoted green black  # quoted text
  color search brightgreen black # hilite search patterns in the pager
  color signature red black    # signature (after "-- ") is red 
  color status brightyellow blue # status bar is yellow *on blue*   
  color tilde blue black  # ~'s after message body
  color tree red black    # thread tree in index menu is magenta
  color signature brightred black
  color underline yellow black
  color header cyan black ^(From|Subject): # Important headers
  color body magenta black "(ftp|http)://[^ ]+"  # picks up URLs
  color body magenta black [-a-z_0-9.]+@[-a-z_0-9.]+
  #
  # #  Coloring quoted text - coloring the first 7 levels:
  color quoted    cyan black
  color quoted1   yellow black
  color quoted2   red black
  color quoted3   green black
  color quoted4   cyan black
  color quoted5   yellow black
  color quoted6   red black
  color quoted7   green black
  #
  # #  Colorize smileys:  :-)  ;-)  :-/  :-(
  color body  yellow black "[;:]-[)/(|]"
  color body  yellow black "[;:][)/(|]"
  color body  green black "[[:alpha:]]\+://[^ ]*"
  color index brightyellow black ~N      # New
  color index yellow black ~O              # Old
  color index magenta black ~F
  color index blue black ~T
  color index red black ~D

Comportement

Alors, première des choses : les touches d'actions sont très bien pensées et intuitives. Si on oublie quelque chose ? vous rafraîchit la mémoire. La lecture est confortable, si on utilise un thème couleur sympathique. Les gens qui pensent que travailler en console est austère et donne mal aux yeux n'ont surement pas pratiquer. je trouve personnellement le travail en console très confortable et reposante. L'accent est de plus mis sur le contenu, ce qui aide à la concentration.

Au niveau faiblesse ?

  • en SMTP, il arrive très souvent que la connexion coupe et c'est la seconde tentative qui est la bonne. Embétant lorsque l'on envoie des pièces jointes.
  • Je n'ai pas tout compris apparemment aux macros. j'ai beaucoup de mal à personnaliser les raccourcis claviers.
  • Il arrive que mutt bloque. C'est peut etre du à gmail, je ne sais pas. A ce moment, je dois fermer le terminal et relancer mutt.

Conclusion

Je ne suis pas revenu à claws-mail, c'est une bonne partie de la réponse :) Il a été assez long à configurer, le temps de faire le tour, chercher des infos sur le net, principalement en anglais. Le gros avantage est que le muttrc que j'ai personnalisé est un gage de tranquilité : un fichier de configuration me permet de retrouver mes marques rapidement (en cas de réinstallation par exemple). La configuration des rc peut sembler lourde et complexe. Ce n'est pas faux. Mais cela vous oblige à vous plonger dans l'application et donc de mieux la connaître. Au fil des usages, on peaufine, on ajoute, on modifie et on finit par avoir exactement ce que l'on souhaite. Et comme je suis en apprentissage, cet effort fait partie du plaisir !

Alors bien sur, j'ai encore bien des choses à apprendre pour utiliser au mieux cet outil. Cette présentation n'est donc absolument pas une référence, voyez la comme un bilan (positif) de mes premiers pas. Je vous tiendrais au courant sur ce blog s'il y a des choses importantes que j'aurais oublié.

Ressources