Gérer ses mails en local : étape 2, envoi d'e-mails avec msmtp et msmtpq.
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.
- Étape 0 : Introduction
- Étape 1 : Synchronisation IMAP avec OfflineIMAP
- Étape 2 : Envoi d'e-mails avec msmtp et msmtpq ← vous êtes ici !
- Étape 3 : Configuration de mutt
- Étape 3 bis : Dose supplémentaire de mutt
- Étape 4 : Chiffrement et signature avec PGP
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.