Le lecteur de courrier électronique mutt est apprécié en mode texte. À l’origine il ne permettait que de lire des messages reçus en local. Cependant il permet maintenant (et ce n’est pas récent) d’utiliser les protocoles pop ou imap pour lire les messages et de se connecter en smtp sur un serveur distant pour envoyer les messages. Ce billet explique un moyen de le configurer pour l’utiliser efficacement et facilement avec plusieurs fournisseurs de courrier électronique.
Pour comprendre ce billet il est bon d’être familiarisé avec
la configuration de mutt , et en particulier les mécanismes de
hook . Vous pouvez vous référer au
manuel pour avoir la
documentation officielle.
|
Contexte
Dans ce billet nous considérerons que nous cherchons à utiliser le même mutt pour lire depuis plusieurs comptes imap, chaque compte ayant une identité différente, et étant associée à un serveur smtp différent.
Le but est de pouvoir envoyer par défaut un email avec l’identité correspondant à la boite lue, mais de pouvoir changer, y compris via des hooks (par exemple pour envoyer à une mailing list, quelle que soit la boite actuellement visitée).
J’avais mis en place ce type de configuration il y a quelques années, mais ma situation a évoluée et je ne l’utilise plus, il peut donc y a avoir quelques erreurs. Cependant je pense que ce type de configuration peut être utile c’est pourquoi je publie. Si vous trouvez des erreurs, les correctifs sont bienvenus. |
Qu’est-ce qu’une identité ?
Une identité est un ensemble d’information utilisées lors de l’envoi d’un message :
-
Le nom
-
L’adresse email
-
le serveur d’envoi avec éventuellement le login et mot de passe associés.
-
la boite éventuelle où laisser une copie du message envoyé.
Exemples utilisés dans ce billet
Dans ce billet je prendrai l’exemple d’une situation avec 2 comptes :
-
Un compte personnel chez son fai
-
Un compte gmail
Bien entendu chaque fournisseur d’email ne permet d’envoyer de message
que depuis son propre serveur, et il est donc hors de question
d’utiliser un sendmail
local pour l’envoi.
Organisation des fichiers
Tout le mécanisme est basé sur des hooks
qui chargent des fichiers via
la commande source
. Il faut donc répartir la configuration sur un
ensemble de fichiers qui seront chargés selon les circonstances.
Organisation générale
.mutt ├── common-send-hooks ├── muttrc ├── profiles │ ├── fai │ └── gmail └── senders ├── fai └── gmail
J’ai mis toute la configuration dans un répertoire .mutt
, non
standard mais qui me permet de regrouper mes différents fichiers.
Voici une description rapide des fichiers et de leur rôle avant de
voir les commandes qu’on met dans chaque fichier.
common-send-hooks
-
Dans ce fichier je mets, comme le nom l’indique l’ensemble des send-hooks utilisés quelle que soit l’identité d’envoi, par exemple des signatures selon la destination ou des commandes pour changer l’identité d’envoi quand on envoie à une mailing list. Ainsi j’ai (entre autres), pour que mes message à la mailing list
mutt-users
utilisent mon identitéfai
send-hook mutt-users "source ~/.mutt/senders/fai"
muttrc
-
C’est le fichier principal. Pour que mutt le prenne en compte, mon
~/.muttrc
est un lien symbolique sur ce fichier. Voir ci-dessous pour plus de détails. profiles
-
Dans ce répertoire j’ai un fichier par compte de lecture, contenant les configurations liées à ce compte. Voir ci-dessous pour plus d’explication
senders
-
Dans ce répertoire j’ai un fichier par identité d’envoi. Voir ci-dessous pour plus d’explication.
Ceci est un schéma de base, on peut aussi avoir d’autres fichiers qui pourront être chargés au besoin. |
Fichier Muttrc
Dans ce fichier, on trouve
-
La définition des défauts et des réglages communs.
-
La logique de chargement des fichiers de configuration selon le compte visité.
-
Des macros de changement d’identité
Réglages et macros communs
Ici je mets les macros communes, les réglages de couleur, les
fcc-hook,subscribe, etc. De fait la majeure partie de la configuration
est dans cette partie du fichier muttrc
Chargement du profil selon le folder/le compte
J’utilise là
-
des
account-hook
de la forme
account-hook . 'unset imap_user;unset imap_pass;set ssl_starttls=yes' account-hook imap://mail.fai "source ~/.mutt/profiles/fai" account-hook imaps://imap.gmail.com "source ~/.mutt/profiles/gmail"
Le premier est pour éviter une fuite de mot de passe vers le mauvais serveur.
-
les folder-hook correspondant
folder-hook imap://mail.fai/ "source ~/.mutt/profiles/fai" folder-hook imaps://imap.gmail.com/ "source ~/.mutt/profiles/gmail"
Profiles
Dans les fichiers de profil je mets
-
Les identifiants sur le serveur imap (
imap_user
etimap_pass
), et l’éventuel usage de starttls. -
Des macros spécifiques, par exemple pour signaler un message comme spam
-
Je fais un source de l’identité d’expéditeur par défaut pour ce compte
-
Je mets en place les
send-hook
Voici un exemple :
# -*- conf -*- ## # # home profile set imap_user=user_name set imap_pass=******** set ssl_starttls=yes macro index "<Esc>j" "<enter-command> \ set my_resolve=\$resolve my_confirmappend=\$confirmappend \ resolve=no confirmappend=no<enter>\ <clear-flag>N\ <enter-command> set resolve=\$my_resolve &my_resolve<enter>\ <save-message>imap://mail.fai/spam<enter>\ <enter-command> set confirmappend=\$my_confirmappend &my_confirmappend<enter>" macro pager "<Esc>j" '<save-message>imap://mail.fai/spam<enter><enter>' macro pager,index "<Esc>h" '<copy-message>imap://mail.fai/nospam<enter><enter>' source ~/.mutt/senders/fai unhook send-hook send-hook . "source ~/.mutt/senders/fai" source "~/.mutt/common-send-hooks"
Senders
Dans les fichiers de sender, peu de chose :
-
l’adresse d’expéditeur
-
La signature éventuelle
-
les identifiants sur le serveur smtp
Ainsi l’exemple suivant suffit-il
# -*- conf -*- set from=address@fai signature=~/.signature-courte set record=^ set smtp_url="smtp://user@mail.fai:587/" smtp_pass="********"
Conclusions
C’est un schéma assez complexe de configuration, mais il fonctionne, même s’il est assez difficile à débugguer.
J’aurais voulu à l’époque pouvoir ajouter plusieurs points :
-
Possibilité de changer l’expéditeur par une macro. Mais cela n’est pas trop compatible avec l’utilisation du
send-hook .
que j’ai utilisé pour revenir en arrière lorsqu’un envoi à une ML change le sender. -
Possibilité d’avoir plusieurs identités pour un même fournisseur. Là c’est le manque de courage qui m’a retenu.
-
Faire une configuration plus propre à l’aide de variables de configuration. Cette approche pourrait peut-être aider à gérer le premier point.