Ted écrit des trucs

Sur des sujets en lien avec la vie privée, ou parfois pas.

Gérer ses mails en local : étape 2, envoi d'e-mails avec msmtp et msmtpq.

— modifié le

Ce billet fait partie d'une série d'articles présentant la façon dont je gère mes mails en local. Si vous êtes arrivés là sans lire l'introduction, c'est probablement une bonne idée de commencer par le début.


Donc, maintenant qu'on est arrivés à récupérer nos e-mails, on aimerait bien en envoyer. Mutt, le client mail, ne sait pas faire ça - ou pour être précis, depuis la dernière version, il sait faire ça, mais l'implémentation est récente et ne permet pas de faire une file d'attente de messages à envoyer lorsqu'on est hors ligne (on y reviendra). J'utilise donc msmtp qui fait bien son travail, qui est simple à configurer et qui vient avec une solution de queuing.

Configuration de base

Sans surprise, on installe msmtp :

aptitude install msmtp

et on ouvre le fichier ~/.msmtprc pour modifier la configuration.

Tout en haut du fichier, on trouve la configuration qui dit qu'on veut utiliser ssl (toujours pour ne pas envoyer son mot de passe en clair), qui précise qu'on veut avoir la méthode d'authentification la plus sûre disponible, qui choisit le fichier dans lequel msmtp va écrire des logs, et qui désactive les autres méthodes d'enregistrement de logs.

defaults
tls on
tls_starttls on
auth on
logfile /.msmtp.log
syslog off

Puis, pour chaque compte SMTP auquel on veut se connecter, on ajoute un bloc de configuration qui ressemble à ça :

account dam
host smtp.desfontain.es
port 465
user damien
password gungjbhyqunirorraorggre
from damien@desfontai.nes
tls_trust_file /etc/ssl/certs/ca-certificates.crt

en remplaçant smtp.desfontain.es et 465 par l'adresse de votre serveur SMTP et le port sur lequel il écoute (encore une fois, c'est trouvable par ici pour les principaux fournisseurs de mails), damien par ce qu'il y a à gauche du @ dans votre adresse mail, et en changeant le mot de passe et l'adresse mail. À partir de là, pour envoyer un mail écrit dans un fichier f, la commande à exécuter sera msmtp -a dam < f pour utiliser le bloc de configuration qui commence par account dam. Ne le faites pas, il faudrait que vous écriviez les headers à la main et ça serait un peu pénible =)

On peut rajouter autant de blocs de ce type que l'on veut dans le .msmtprc, pour pouvoir appeller msmtp avec différents arguments (et ainsi pouvoir se connecter à différents serveurs SMTP, ou au même serveur avec plusieurs comptes différents). Ah oui, dernière chose importante : le fichier .msmtprc doit avoir des permissions fixes pour que msmtp accepte de le lire, donc vous aurez peut-être besoin de lancer un chmod 600 ~/.msmtprc pour que ça fonctionne.

Faire du queuing avec msmtpq

Donc, on a un système d'envoi de mails qui fonctionne. Maintenant, si on veut répondre à un mail alors qu'on n'est pas connecté à Internet (dans un train, un avion, une salle de cours au wifi pourri de Paris 7…), la seule solution est de rédiger le mail, de l'enregistrer en brouillon dans le client mail, et de penser à l'envoyer plus tard lorsqu'on sera connecté. C'est pénible et ça a l'air automatisable… Ce qui me fait une excellente introduction pour msmtpq, un script qui permet de mettre tous les mails envoyés dans un dossier (qui agit comme une queue, ou file d'attente en bon français), et de les envoyer sur Internet dès que c'est possible.

Si vous avez installé msmtp par votre gestionnaire de paquets, vous avez déjà msmtpq qui traîne sur votre machine à un endroit obscur : /usr/share/doc/msmtp/examples/msmtpq. On va donc se connecter en root, mettre le script dans un endroit accessible pour l'utilisateur et changer trois lignes pour le configurer correctement.

su -
cd /usr/share/doc/msmtp/examples/msmtpq
cp msmtp* /usr/local/bin/
chmod +x /usr/local/bin/msmtpq /usr/local/bin/msmtp-queue

On ouvre le fichier /usr/local/bin/msmtpq, toujours en root, avec son éditeur préféré, et il y a deux lignes à modifier : celle qui commence par Q= et celle qui commence par LOG=. Dans les deux cas, il faut remplacer la valeur par défaut par (respectivement) le dossier dans lequel on a envie de stocker les mails de la file d'attente, et le fichier dans lequel on veut logger l'activité de msmtpq. Par exemple, chez moi :

Q=~/.msmtp.queue
LOG=~/.msmtp.queue.log

il faut créer le dossier et le fichier en question et leur donner les bonnes permissions, en utilisateur normal cette fois-ci :

mkdir ~/.msmtp.queue
chmod 700 ~/.msmtp.queue
chmod 600 .msmtp.log

et c'est tout ! Les derniers bouts de config' nécessaires pour utiliser msmtpq en pratique concernent mutt, donc on y reviendra.

Automatisation du processus

De la même façon que pour OfflineIMAP, on a envie de faire régulièrement des appels à msmtpq pour lui dire « si la file d'attente n'est pas vide, réessaie d'envoyer les mails qu'il y a dedans ». Ça se fait à la main avec la commande msmtp-queue -r, donc la ligne à rajouter dans le fichier qui s'ouvre en tapant crontab -e est :

*/2 * * * * /usr/local/bin/msmtp-queue -r > /dev/null 2> /dev/null

et voilà le travail.

Tout ce que je raconte ici sont mes opinions personnelles, pas celles de mon employeur.
Je suis toujours ravi de recevoir des réactions, critiques, questions, ou autres commentaires sur ce que j'écris. Envoyez-moi ce qui vous chante à se.niatnofsed@neimad.