Mail en console : bases pour un outil très puissant et utilisation de plusieurs comptes mail
Jusqu'à présent j'utilisais des clients mail graphique pour relever mes différentes adresses mail (4 au total) avec un mélange de pop et d'imap. Je suis passé par thunderbird, claws mail et evolution. Mais j'ai eu quelques problèmes avec evolution et maintenant que je suis passé à awesome j'essaye d'utiliser un maximum d'applications en console, tant que ça reste aussi agréable que du graphique bien sûr.
Je pensais que les clients mail en console devaient être légion et plutôt évolués avec le temps. Alors oui, c'est le cas, mais il ne faut pas compter sur une accessibilité formidable. Si vous utilisez une adresse mail unique aucun problème, mais dès que vous avez plusieurs adresses, que vous voulez répondre avec plusieurs adresses aussi et que vous avez en plus des abonnements à des mailing list (celles de debian dans mon cas), c'est un véritable calvaire. Je vais donc vous présenter ma solution en espérant pouvoir vous faire gagner un peu de temps.
les indispensables
Pour que tout fonctionne, nous aurons besoin de procmail, fetchmail, msmtp et mutt. Fetchmail pour relever les mails, procmail pour faire le trie, msmtp pour envoyer les mails et enfin mutt qui va nous permettre de consulter et rédiger nos missives.
Première étape : fetchmail
Comme je l'ai dit, fetchmail est le logiciel qui va rapatrier les mails des serveurs vers votre ordinateur. Sa configuration se trouve dans ~/.fetchmailrc. La configuration de fetchmail n'est pas la partie la plus compliquée. Je vous présente la méthode pour le pop et pour l'imap :
# imap
poll imap.mail.com proto imap:
user "votreadresse@mail.com", with password "votremotdepasse", is "nomutilisateur" here options ssl
Je suppose que votreadresse@mail.com et votremotdepasse ne vous poserons pas de problème. nomutilisateur est le nom d'utilisateur que vous avez sur votre machine.
#pop
poll pop3.live.com proto POP3:
user "votreadresse@mail.com", with password "votremotdepasse", is "nomutilisateur" here options ssl
On ne change pas grand-chose, on passe juste le protocole à pop au lieu d'imap.
Vous pouvez maintenant vérifier que ça fonctionne avec la commande "fetchmail -vka" avec le -v pour verbose, utile en phase de test, -k pour keep, il vaut mieux laisser les mails sur le serveur pour le moment, et -a pour all. Pas non plus la peine de relever vos 5000 mails si vous en avez 5000, il s'agit juste ici de vérifier que la configuration est correcte.
Seconde étape : procmail
Procmail est le logiciel qui va trier vos mails. Si vous voulez une boite pour vos mails venant d'une adresse, une autre boite pour les mails venant d'une autre adresse, d'une troisième boite pour stocker vos mails des mailing list et d'une quatrième pour vos spam, c'est ici que ça se passe (je ne sais pas utiliser spamassassin donc je ne traiterais pas des spam ici).
Pour que votre configuration fonctionne, vous devez créer un dossier par boite mail désirée dans le dossier ~/Mail. Si vous voulez avoir adresse1, adresse2 et spam, vous devez créer les dossier correspondants. Dans chacun de ces dossiers, vous devez maintenant créer un dossier cur, un dossier new et un dossier temp. Une fois que c'est fait, nous pouvons attaquer la configuration de procmail. À la manière de fetchmail, le fichier de configuration est ~/.procmailrc.
Vous devez placer ces lignes au début de votre fichier :
PATH=/bin:/usr/bin
MAILDIR=$HOME/Mail
LOGFILE=$HOME/.procmaillog
VERBOSE=yes
Les lignes de logfile et verbose ne sont pas indispensables, mais peuvent servir. La ligne de maildir définie le dossier dans lequel sont nos boites mail. Comme nous avons créé nos boites dans ~/Mail, on définie ce dossier.
Viens ensuite un gros morceaux. Pour moi j'ai fait simple, je n'ai pas utilisé beaucoup d'options, mais je ne connais pas assez procmail pour faire mieux. Si vous voulez faire quelque chose de plus poussé, vous pouvez chercher la documentation ou une page comme linux-france.
Toutes vos règles doivent être composées d'au moins trois lignes. Je vous donne des exemples basiques que vous pourrez adapter.
:0
* ^To:.*adresse@mail.com
$HOME/Mail/boite1/new
:0
* ^From:.*adresse@mail.com
$HOME/Mail/boite2/new
Dans ces deux cas, on va trier les mails en fonction de son destinataire (To) et de son expéditeur (From).
:0 H
* ^X-Mailing-List:.*[<].*lists.debian.org[>]
* ^X-Mailing-List:.*[<] */[^ ][^@]*
$MATCH/new
J'utilise cette regle pour mes mailing list debian. Plutôt que faire une reprise maladroite je vais vous donner l'explication originale que vous pouvez trouver sur linux-france
"Cette règle à l'apparence barbare s'appuie sur le fait que les courriers des listes Debian contiennent l'en-tête X-Mailing-List: debian-nom-liste@debian.org, et que la variable $MATCH contient ce qui a été trouvé dans l'expression rationnelle précédente à partir de /. Pour clarifier, l'expression /[^ ][^@]* « correspondra » à un début d'adresse électronique (sans la partie domaine) et sera affecté à la variable $MATCH. Pour la liste debian-french@lists.debian.org par exemple, le courrier sera donc placé dans le dossier debian-french.
Cette méthode fonctionne pour toutes les listes Debian, si vous êtes comme moi abonné à plusieurs d'entre elles.
Attention : Alain Thivillon4 m'a signalé un problème de sécurité sur cette règle. Celle-ci écrit en effet dans des fichiers en fonction d'un champ qu'on ne maîtrise pas ; n'importe qui peut alors utiliser le champ X-Mailing-List: pour permettre d'écrire dans un fichier arbitraire. L'exemple qui suit devrait suffire à vous convaincre.
X-Mailing-List: <../.profile@lists.debian.org>
Procmail enverra le courrier reçu dans le fichier ../.profile, imaginez les dégâts possibles..."
Enfin les dernières lignes indispensables au cas ou certain mails ne soient pas passés par les règles précédentes
:0
$HOME/Mail/nontrie/new
J'envoie ces mails dans une boite que j'ai appellé nontrie mais vous pouvez donner un nom différent. Il faut juste penser à créer le dossier correspondant avec les sous dossier cur, temp et new dans ~/Mail.
Vos mails devraient maintenant être triés après réception. On a déjà bien avancé la configuration.
Voici un exemple de fichier .procmailrc qui sera surement plus lisible que sur le blog.
On peut maintenant lancer la réception des mails avec la commande fetchmail -vka -m "/usr/bin/procmail -d %T".
Par la suite on lancera soit la commande fetchmail -kv -m "/usr/bin/procmail -d %T" en cron soit en daemon avec l'option -d.
Troisième étape : msmtp
On configure maintenant msmtp qui s'occupera d'envoyer nos mails. Pas de surprise, c'est le fichier .msmtprc qui est utilisé. Pas très compliqué à remplir :
account mail host smtp.mail.com
protocol smtp
from adresse@mail.com
tls on
tls_certcheck off
tls_starttls off
auth on
user adresse@mail.com
password motdepasse
La ligne account détermine le nom que vous voulez donner à ce compte. Les trois lignes sur tls sont utiles si vous avez besoin du tls ou du SSL. À noter que ce sont les mêmes options dans les deux cas. Vous pouvez passer en on ou off selon les besoins.
Vous réutilisez ces 12 lignes pour chaque compte que vous voulez utiliser en envoie.
Quatrième étape : Mutt
La dernière partie de la configuration est aussi une des plus chargées. On configure le client face auquel on va se retrouver et qui interagit avec fetchmail, procmail et msmtp. Ça se passe dans le fichier ~/.muttrc
On va configurer les couleurs, les hook, les boites mails, la disposition, les listes et le header.
# ~/.muttrc
set spoolfile = "+boite1"
set postponed="+postponed"
On règle notre boite par défaut.
# envoie
set record="+envoye"
set envelope_from=yes
set sendmail="/usr/bin/msmtp"
set imap_check_subscribed
réglages pour envoyer les mails.
# Heures/dates fr
set locale="fr_FR.UTF-8"
set charset="utf-8"
set assumed_charset="utf-8"
set send_charset="utf-8:iso-8859-15:us-ascii"
Pour utiliser le français.
# cache
set header_cache=~/.mutt/cache/headers
set message_cachedir=~/.mutt/cache/bodies
set certificate_file=~/.mutt/certificates
on utilise le cache
# editeur
set editor='vim + -c "set textwidth=72" -c "set wrap" -c "set nocp" -c "?^$"'
On choisi notre éditeur de texte. Moi pour le moment c'est vim, mais ca pourrait être emacs ou nano.
# multicompte
set reverse_name=yes
set reverse_realname=yes
# mails html
set implicit_autoview
auto_view text/html application/x-pgp-message
set mailcap_path="~/.mutt/mailcap"
Pour pouvoir lire en html
# mailboxes
alternates ^adresse1@mail\.com$ ^adresse2@mail\.com$
set folder = ~/Mail
mailboxes +boite1
mailboxes +boite2
Avec à la place de boite1 et boite2 le nom de vos boites mail.
# Couleurs
color attachment magenta default # attachments
color body brightred default "(ftp|http)://[^ ]+" # point out URLs
color body brightcyan default [-a-z_0-9.]+@[-a-z_0-9.]+ # e-mail addresses
color bold brightblue default # boldface text
color error brightwhite red # error messages
color hdrdefault magenta default # default color of message header
color header brightmagenta default ^(From): # From and Subject header
color header brightwhite default ^(Subject): # From and Subject header
color header brightwhite default ^(Date): # Date header
color header white default ^(In-Reply-To):
color indicator brightred default # indicator bar
color markers brightblue default # wrapped line markers (+)
color message brightblack green # status messages
color normal default default # default
color quoted yellow default # quoted text, 1st quote level
color quoted1 green default # quoted text, 2nd quote level
color quoted2 brightblue default # quoted text, 3rd quote level
color quoted3 blue default # quoted text, 4th quoet level
color search black yellow # matched search patterns in pager
color signature red default # the signature (after sigdashes)
color status default blue # status lines
color tilde brightblue default # « ~ » used to pad blank lines
color tree green default # thread tree in the index menu
color underline brightgreen default # underlined text
# disposition
set attribution="* %n <%a> [%{%Y-%m-%d %H:%M:%S %Z}]:
"
set folder_format="%N %f %F %s %t"
set index_format="%4C %Z Exp: %-30.30f Suj: %-30.30s %d %-15.15L (%?l?%4l&%4c?)"
set pager_context=3
set nostrict_threads
set date_format="%A %d %b %Y à %H:%M:%S (%Z)"
# liste mails pdt lecture
set pager_index_lines=9
# triage des mails
set sort=threads
set sort_aux =last-date-received
# citations
set attribution="Le %d, %n a écrit :"
set forward_format="[Re: %s]"
set forward_quote
# signature
set signature="~/.mutt/.signature"
# header
ignore *
unignore From:
unignore To:
unignore Reply-To:
unignore Mail-Followup-To:
unignore Subject:
unignore Date:
unignore CC:
unignore BCC:
hdr_order Date: From: Subject: To: Cc: Reply-To: Mail-Followup-To:
# send-hook
send-hook . 'set sendmail="/usr/bin/msmtp"'
send-hook "~f ^adresse@mail.com$" 'set sendmail="/usr/bin/msmtp -a nomcomptedamsmsmtp"'
# folder-hook
folder-hook . 'my_hdr From: nom a afficher en expéditeur
folder-hook mail 'my_hdr From: nom a afficher en expéditeur
Les hook permettent de configurer un comportement en fonction du dossier dans lequel vous êtes. Le . Correspond au dossier de base, définie au début du dossier. On règle ensuite pour les autres dossiers.
# listes
subscribe debian-user-french
Vos mailing list, permet d'utiliser les fonctions de liste de mutt.
Pour gerer mes contacts, j'utilise abook au lieu des aliases de mutt. Il vous faut donc rajouter le logiciel abook et ces lignes au .muttrc
# abook
set query_command = "abook --mutt-query '%s'"
macro generic,index,pager a "
macro index,pager A "
Fichiers :
Je vous donne ici des exemples complets de fichiers. Ce sera surement plus lisibles que sur le blog. Vous pourrez vous en servir de base pour votre propre configuration.
Bien sûr cet article n'est pas exhaustif, vous pouvez faire quelque chose de beaucoup plus poussé, qui corresponde exactement à ce que vous voulez. Tout n'est pas détaillé, tout n'est pas expliqué et toutes les options ne sont pas données. Mais ce n'est pas le but, je ne veux pas remplacer la doc. Vous avez ici une base pour une configuration multi-compte.
Si jamais vous utilisez une unique adresse mail, une configuration de mutt et uniquement de mutt sera peut-être suffisante. Dans ce cas là je vous redirige vers l'article de addikt1ve.
Merci à Christophe pour la partie de .procmailrc sur les mailing list.