Le setup de mail que j'utilise

Publié le 4 mars 2022 par Eddie Barraco | emails

Cet article est publié sous licence CC BY-NC-SA

C’est sans doute la partie dans toute ma stack technique qui a le plus évolué avec le temps. Depuis quelques années, elle s’est pourtant bien stabilisée. C’est de cela dont j’ai envie de parler aujourd’hui.

Quelques contraintes que j’ai pour mes solutions :

  • Dois me permettre d’utiliser n’importe quel éditeur de texte
  • Gère une grande liste de boites mail, de manière unifiée
  • Les outils doivent être interchangeables et avoir des alternatives (ou être simple pour que je les maintienne)
  • Permet de chercher des mails
  • Peut se brancher à d’autres outils
  • Dois me permettre de faire le ménage

Isync

J’utilise donc un ensemble d’outils qui œuvrent de concert. Pour synchroniser les mails du serveur IMAP de mon fournisseur jusqu’à mon stockage local, j’ai deux possibilités équivalentes :

J’ai choisi mbsync. Nous le configurons ainsi :

# ~/.mbsyncrc
IMAPAccount synbioz
Host imap.gmail.com
User ebarraco@synbioz.com
PassCmd "pass Web/accounts.google.com/ebarraco@synbioz.com"
CertificateFile /etc/ssl/certs/ca-certificates.crt
SSLType IMAPS

IMAPStore synbioz-remote
Account synbioz

MaildirStore synbioz-local
Path ~/.mail/synbioz/
Inbox ~/.mail/synbioz/INBOX

Channel synbioz
Far :synbioz-remote:
Near :synbioz-local:
Patterns *
Create Both
SyncState *

On lance la commande mbsync pour synchroniser cette boite mail dans le dossier ~/.Mail/synbioz. Ce dossier ressemble à ça :

$ ls ~/.mail/synbioz/
Archive  Brouillons  Drafts  INBOX  Sent  Spam  Trash
$ ls ~/.mail/synbioz/INBOX/
cur  new  tmp

Chacun des dossiers contient un cur, new et tmp. C’est le format Maildir

Pour rendre la synchronisation plus rapide lorsqu’on a plusieurs fournisseurs :

#!/bin/sh
# ~/bin/email_sync

grep Channel ~/.mbsyncrc \
	| cut -d' ' -f2 \
	| xargs -n1 -P 0 mbsync -qX

Lancer email_sync vas synchroniser en parallèle toutes les boites mails.

Mblaze

Maintenant que les mails sont en local, nous voulons les lister, les afficher, y répondre, etc.

J’utilise pour cela Mblaze. Ce projet s’inspire de MH appliqué au format Maildir (et non mbox).

Mblaze fournit un ensemble de commandes qui permettent d’utiliser les fichiers mails stockés au format Maildir. L’idée est de chaîner plusieurs commandes pour faire ce qu’on souhaite. Les taches les plus courantes peuvent être simplifiées dans un script. Quelques exemples :

# Liste les mails d'un dossier
$ mlist ~/.mail/synbioz/INBOX/
/home/stacy/.mail/synbioz/Archive/cur/1642849468.15544_227.yellow-orcess,U=227:2,RS
/home/stacy/.mail/synbioz/Archive/cur/1642849502.15544_720.yellow-orcess,U=720:2,
/home/stacy/.mail/synbioz/Archive/cur/1642849496.15544_592.yellow-orcess,U=592:2,
/home/stacy/.mail/synbioz/Archive/cur/1642849485.15544_435.yellow-orcess,U=435:2,
/home/stacy/.mail/synbioz/Archive/cur/1644068637.3764_3.yellow-orcess,U=818:2,
/home/stacy/.mail/synbioz/Archive/cur/1642849491.15544_525.yellow-orcess,U=525:2,
/home/stacy/.mail/synbioz/Archive/cur/1642849445.15544_14.yellow-orcess,U=14:2,S
/home/stacy/.mail/synbioz/Archive/cur/1642849481.15544_365.yellow-orcess,U=365:2,
/home/stacy/.mail/synbioz/Archive/cur/1642849455.15544_107.yellow-orcess,U=107:2,RS
/home/stacy/.mail/synbioz/Archive/cur/1642849493.15544_541.yellow-orcess,U=541:2,
# Permet d'en tirer des informations
$ mlist ~/.mail/synbioz/INBOX/ | mscan
 .      2021-07-02 David Dubois      > Re: Infos pour création de factures Odoo
 .      Tue Jan 18 Suivi de projet I   [G-OXY - Développement #11886] (Validation) REQ_GES_0048 Gestion des avoirs sur une facture d
 .      2020-11-26 Martin Catty      > Invitation mise à jour: Suivi - jeu. 26 nov. 2020 11am - 11:30am (CET) (ebarraco@synbioz.com)
 .      2021-01-18 mducrocq@synbioz.   Entretiens de suivis
 .      2020-12-17 Notion            > 1 update in Synbioz
        2020-07-28 Martin Catty        Préparation des entretiens
# msort permet de trier, ici par date
$ mlist ~/.mail/synbioz/INBOX/ | msort -rd | mscan
 .      Tue Jan 18 Suivi de projet I   [G-OXY - Développement #11886] (Validation) REQ_GES_0048 Gestion des avoirs sur une facture d
 .      2021-07-02 David Dubois      > Re: Infos pour création de factures Odoo
 .      2021-01-18 mducrocq@synbioz.   Entretiens de suivis
 .      2020-12-17 Notion            > 1 update in Synbioz
 .      2020-11-26 Martin Catty      > Invitation mise à jour: Suivi - jeu. 26 nov. 2020 11am - 11:30am (CET) (ebarraco@synbioz.com)
        2020-07-28 Martin Catty        Préparation des entretiens

Les nouveaux mails synchronisés ont le statut « nouveau » et sont stockés dans le dossier new du format Maildir. Mblaze nous permets de les lister et de les marquer comme vu avec la commande minc.

La commande suivante attrape les nouveaux mails, leur retire leur caractère nouveau et passe la main à mscan qui en affiche un résumé :

$ minc ~/.mail/synbioz/INBOX | mscan
>.  1   Mon  15:12 Peter John Hartma   [PATCH sxmo-utils v2 00/22] Pinenote Patches

Nous avons plusieurs boites mail, donc nous souhaitons rendre cela plus rapide :

#!/bin/sh
# ~/bin/mnew

# mdirs liste tous les dossiers d'une boite (INBOX, Sent, etc.)
mdirs "$HOME"/.mail | \
	xargs minc | \
	mthread -r

Nous n’avons plus qu’à utiliser email_sync && mnew | mless pour synchroniser et afficher tous les nouveaux mails de toutes nos boites.

mless est généralement l’outil principal pour parcourir les mails. Il ouvre les mails listés dans un page less :

$ mlist ~/.mail/synbioz/INBOX/ | msort -rd | mless
 .  14  Tue Feb  1 Suivi de projet [Développement #11906] (To be released in prod) REQ_BUR_0050 Demande
 .  15  Tue Feb  1 Andréa Dupont      + Kick off refonte Bureau des consultants
>.  16  Tue Feb  1 Nicolas Cavigneau > Re: XXXXXXXX | Description des XXXX (#306)
 .  17  Tue Feb  1 Nicolas Cavigneau > Re: XXXXXXXX | feat: add descriptions to product XXXXXXXXX (!280)

From: "Nicolas Cavigneaux (@ncavigneaux)" <bot@synbioz.com>
Subject: Re: XXXXXXXX | Description des XXXX (#306)
To: ebarraco@synbioz.com
Date: Tue, 01 Feb 2022 15:01:25 +0100 (6 days, 21 minutes, 4 seconds ago)

--- 1: multipart/alternative size=2003 ---
--- --- 2: text/plain size=250 ---



Nicolas Cavigneaux commented:


Back validé et mergé

En haut de cette page, on voit le mail courant indiqué par un > en début de ligne. On tape la commande :n et :p pour naviguer vers le mail suivant et précédent. On ferme less avec q.

On affiche le mail courant avec mshow. On peut rouvrir la liste de mails avec mless directement.

mblaze utilise deux fichiers pour conserver le contexte actuel ~/.mblaze/seq et ~/.mblaze/cur.

Quelques scripts additionnels qui me simplifient la vie :

#!/bin/sh
# ~/bin/mls

mdirs "$HOME"/.mail | \
	grep "$1$" | \
	xargs mlist | \
	mthread -r

Me permet de lister tous les mails du dossier INBOX de toutes les boites avec mls INBOX | mless. Les mails sont triés par thread du plus récent au plus ancien.

#!/bin/sh
# ~/bin/mmv

REGEX="$(printf 's|[^/]\+/[^/]\+/[^/]\+$|%s|' "$1")"

mshow -t . | \
	head -n 1 | \
	sed "$REGEX" | \
	xargs mrefile .

Me permet de déplacer le mail courant dans le dossier « Archive » de sa boite mail avec mmv Archive. Je peux donc archiver facilement les mails sans me soucier de sa boite d’origine et sans avoir besoin de changer de contexte.

Pour composer un mail ou pour y répondre on peut utiliser respectivement mcom et mrep. Mblaze vas nous préparer le modèle du mail avec les en-têtes correspondants et ouvrir l’éditeur de texte.

To: XXX / XXXXXXXX <XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX>
Cc:
Bcc:
Subject: Re: XXXXXXXX | feat: add descriptions to product XXXXXXXXX (!280)
From: Eddie Barraco <ebarraco@synbioz.com>
In-Reply-To: <69c406662334a6e2f24c36cf8557c381@git.synbioz.com>
Message-Id: <20DCRCY035H7Z.26F60R3KQ1ZW1@yellow-orcess.my.domain>

> Merge request URL: https://git.synbioz.com/XXXXXX/XXXXXX/-/merge_requests/280
>
>
> Merge request !280 was merged
> Merge request URL: https://git.synbioz.com/XXXXXX/XXXXXX/-/merge_requests/280
> Branches: feat/XXXXXXXX-desc to develop
> Author: Eddie Barraco
> Assignee: Martin Catty
> Reviewers:

Merci cher bot !

Une fois le fichier sauvegardé et l’éditeur clos, Mblaze demande via un menu interactif s’il doit envoyer ou si nous souhaitons encore le modifier.

[ebarraco@ebarraco.synbioz ~]$ mrep
What now? ([s]end, [c]ancel, [d]elete, [e]dit, [m]ime, [p]review, sign, encrypt)

Mblaze n’est pas capable d’envoyer le mail par lui-même. Pour cela il va passer la main au programme que nous verrons juste après.

Mes routines deviennent donc :

  • Pour voir les nouveaux mails : email_sync && mnew | mless
  • Pour lister tous les mails à traiter : mls INBOX | mless
  • Pour appliquer le patch du mail courant : mshow -r | git am -3
  • Pour archiver le mail courant : mmv Archive && mless

Le pager mless a aussi quelques raccourcis qu’on peut étendre. Vous trouverez ici la version que j’utilise actuellement mless

En l’état, je ne quitte quasiment jamais mless. J’appuie sur a pour archiver le mail, t pour le mettre dans la corbeille, r pour répondre, et w pour récupérer les nouveaux mails (ou synchroniser). Je peux revenir à ma liste INBOX avec i, je quitte à tout moment le pager avec q et le rouvre avec mless.

Plutôt simple finalement ? Non ? Bon…

msmtp

Pour gérer l’envoi des mails, j’utilise msmtp. C’est un programme très simple qui lit une configuration, attrape le contenu du mail qu’on lui donne et envois ledit mail. Son fichier de configuration est :

# ~/.msmtprc
# Set default values for all following accounts.
defaults
auth           on
tls            on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
logfile        ~/.msmtp.log

account        synbioz
host           smtp.synbioz.com
port           587
from           ebarraco@synbioz.com
user           ebarraco@synbioz.com
passwordeval   "pass Web/accounts.synbioz.com/ebarraco@synbioz.com"

On doit également configurer Mblaze pour l’utiliser.

# ~/.mblaze/profile
Sendmail: msmtp
Sendmail-Args: --read-envelope-from --read-recipients
Local-Mailbox: Eddie Barraco <ebarraco@synbioz.com>

C’est avec msmtp que mblaze enverra le mail lorsqu’on utilise mcom, mrem, mfwd. Notez au passage qu’avec --read-envelope-from msmtp utilise la configuration correspondante au From.

Notmuch

J’ai mes mails en local, pleins d’outils pour les lister, les déplacer. Je peux en composer de nouveau ou répondre à certains. Maintenant comment est-ce que je fais une recherche ?

Mblaze offre un moyen simple de le faire :

$ mlist ~/.mail/synbioz/Archive/ | \
	magrep -a "/:project synbioz" | \
	mless

Cependant, il est peu performant et peu pratique. Je ne le recommande pas si vous chercher dans une grande liste de mail.

J’utilise un outil appelé Notmuch pour indexer et rechercher dans mes mails.

~/.notmuch-config

[database]
path=.mail

[user]
name=Eddie Barraco
primary_email=ebarraco@synbioz.com

[new]
tags=inbox
ignore=

[search]
exclude_tags=deleted;spam;

[maildir]
synchronize_flags=false

[crypto]
gpg_path=gpg2

On indique à Notmuch de ne pas toucher lui-même aux fichiers.

On lance l’indexation avec notmuch sync. Cette action prend du temps la première fois et sera plus rapide par la suite. Nous allons d’ailleurs abstraire cette tache grâce à notre script email_sync.

#!/bin/sh
# ~/bin/email_sync

grep Channel ~/.mbsyncrc \
	| cut -d' ' -f2 \
	| xargs -n1 -P 0 mbsync -qX

mnew

notmuch sync 2>/dev/null >&2

On simplifie encore une fois notre routine. On lance email_sync | mless pour synchroniser le mail, les indexer et afficher les nouveaux.

Ce petit raccourci va nous simplifier les recherches :

#!/bin/sh
# ~/bin/msearch

exec notmuch search --output=files "$@"

On l’utilise ainsi :

$ msearch "Martin Catty" and "subject:/fiche de paie/" | \
	msort -rd | \
	mless
… # une liste de mail
$ msearch body:"Proposition commerciale" and folder:/Trash/ | \
	msort -rd | \
	mless
… # une plus grande liste de mail

Je me sers de Notmuch pour lister les mails automatiques et ainsi les nettoyer. Vous trouverez mon script ici mcleanup.

Enfin

J’ai choisi d’utiliser un ensemble de petits outils plutôt qu’un programme qui cherche à tout faire. Cela me donne une plus grande flexibilité, mais également de meilleures performances. Je peux travailler sur ma machine fixe actuelle ou sur un microordinateur sans même m’en rendre compte.


L’équipe Synbioz.
Libres d’être ensemble.