Accueil

msmtp : Envoyer des emails via un relais SMTP

System
Difficulte: Intermediate
4 min de lecture

Tutoriel pour installer et configurer msmtp, un client SMTP léger, pour envoyer des emails depuis la ligne de commande ou des scripts via un serveur SMTP externe.

Retour aux tutoriels

L'essentiel

  • msmtp n'est pas un MTA : il se contente de relayer les messages locaux vers un smarthost externe. Pas de file d'attente, pas de démon en écoute, pas de livraison locale — contrairement à Postfix ou Exim.
  • Sur Debian/Ubuntu, installez msmtp msmtp-mta ca-certificates. Le paquet msmtp-mta détourne /usr/sbin/sendmail vers msmtp, ce qui rend cron et Logwatch fonctionnels sans aucune autre configuration.
  • Toute la configuration tient dans /etc/msmtprc, qui contient le mot de passe en clair : sudo chmod 600 /etc/msmtprc est obligatoire, pas optionnel.
  • Le bloc defaults porte auth on, tls on et tls_trust_file /etc/ssl/certs/ca-certificates.crt ; chaque account déclare host, port (587 pour Gmail), from, user et password. La ligne account default : gmail désigne le profil utilisé quand aucun n'est précisé.
  • Diagnostic : msmtp --debug affiche toute la conversation SMTP, et la directive logfile /var/log/msmtp.log conserve l'historique des envois — pensez à créer ce fichier en syslog:syslog avec chmod 640.
Qu'est-ce que msmtp ?
msmtp est un client SMTP. Son rôle n'est pas d'être un serveur de messagerie complet comme Postfix ou Exim, mais de simplement transférer les emails générés localement (par des scripts, des applications comme Logwatch, etc.) vers un vrai serveur SMTP (un "smarthost" ou "relais") pour qu'il se charge de la livraison finale.

Pourquoi utiliser msmtp ?

  • Léger et simple : Sa configuration est bien plus simple que celle d'un MTA complet. Il ne fait qu'une seule chose : envoyer des emails.
  • Sécurité : Supporte parfaitement TLS, ce qui est indispensable pour se connecter aux serveurs SMTP modernes comme ceux de Gmail, Office 365, etc.
  • Flexibilité : Permet de configurer plusieurs profils de serveurs SMTP et de choisir lequel utiliser.
  • Remplacement de /usr/sbin/sendmail : Peut être configuré pour que toutes les applications qui tentent d'utiliser la commande sendmail standard utilisent en réalité msmtp, ce qui le rend compatible avec de nombreux logiciels.

Prérequis

  • Un serveur Linux (Ubuntu/Debian, CentOS/RHEL).
  • Accès root ou privilèges sudo.
  • Les identifiants d'un compte email sur un serveur SMTP (ex: Gmail, Outlook, OVH, ou votre propre serveur).

Installation

# Sur Debian / Ubuntu
sudo apt-get update
# On installe aussi ca-certificates pour la gestion des certificats TLS
sudo apt-get install -y msmtp msmtp-mta ca-certificates

# Sur CentOS / RHEL
sudo yum install -y epel-release
sudo yum install -y msmtp

Le paquet msmtp-mta sur Debian/Ubuntu configure msmtp pour qu'il remplace sendmail, ce qui est très pratique.

Configuration

La configuration se fait dans le fichier /etc/msmtprc. Ce fichier contiendra vos identifiants, il faut donc le protéger.

Étape 1 : Créer et sécuriser le fichier de configuration

sudo nano /etc/msmtprc
sudo chmod 600 /etc/msmtprc

Étape 2 : Remplir le fichier de configuration

Voici un exemple de configuration pour utiliser le serveur SMTP de Gmail :


# Paramètres par défaut pour tous les comptes
defaults
auth           on
tls            on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
logfile        /var/log/msmtp.log

# Configuration pour le compte Gmail
account        gmail
host           smtp.gmail.com
port           587
from           [email protected]
user           [email protected]
password       "VOTRE_MOT_DE_PASSE_APPLICATIF"

# Compte à utiliser par défaut
account default : gmail
Utilisez un mot de passe d'application !
Pour les services comme Gmail, n'utilisez pas votre mot de passe principal. Activez l'authentification à deux facteurs (2FA) sur votre compte Google et générez un "Mot de passe d'application" spécifique pour msmtp. C'est beaucoup plus sécurisé.

Étape 3 : Configurer la journalisation

Créez le fichier de log et donnez-lui les bonnes permissions.

sudo touch /var/log/msmtp.log
sudo chown syslog:syslog /var/log/msmtp.log
sudo chmod 640 /var/log/msmtp.log

Tester l'envoi d'email

Vous pouvez maintenant tester l'envoi d'un email depuis la ligne de commande.

# Le corps du mail est envoyé via l'entrée standard (stdin)
echo -e "Subject: Test msmtp\n\nCeci est un test depuis mon serveur." | msmtp --debug [email protected]

Vérifiez la boîte de réception de `[email protected]`. L'option `--debug` vous montrera toute la conversation SMTP, ce qui est très utile pour diagnostiquer les problèmes.

Intégration transparente
Grâce au paquet msmtp-mta, si un programme comme cron ou Logwatch essaie d'envoyer un mail via /usr/sbin/sendmail, c'est msmtp qui sera appelé. Vous n'avez rien d'autre à configurer !

Conclusion

msmtp est la solution idéale pour permettre à un serveur d'envoyer des notifications par email sans la complexité d'un serveur de messagerie complet. En quelques minutes, vous pouvez configurer un relais SMTP sécurisé et fiable pour toutes les applications de votre système, améliorant ainsi votre capacité à surveiller et à automatiser vos tâches d'administration.

MR

Écrit par

Morgann Riu

Expert en cybersécurité et administration Linux. Je partage mes connaissances à travers des tutoriels gratuits et des formations pour aider les administrateurs systèmes et développeurs à sécuriser leurs infrastructures.

Questions fréquentes

Gmail rejette mes identifiants alors que le mot de passe est correct, pourquoi ?
Google refuse le mot de passe principal du compte pour les clients SMTP tiers. Activez l'authentification à deux facteurs sur le compte, générez un mot de passe d'application dédié à msmtp, puis placez-le dans le champ password de /etc/msmtprc. Avantage secondaire : ce mot de passe se révoque indépendamment, sans toucher au compte lui-même.
Quelle différence concrète entre msmtp et Postfix ?
Postfix est un MTA complet : il écoute sur le réseau, gère une file d'attente, réessaie les envois échoués et assure la livraison locale. msmtp est un simple client : il prend un message sur l'entrée standard et le pousse immédiatement vers un relais externe qui se charge de la livraison finale. Pour un serveur qui doit seulement émettre des notifications, msmtp évite toute la complexité et la surface d'exposition d'un MTA.
msmtp marche en ligne de commande mais cron n'envoie toujours rien, que vérifier ?
Les programmes comme cron ou Logwatch n'appellent pas msmtp directement : ils appellent /usr/sbin/sendmail. Sur Debian/Ubuntu c'est le paquet msmtp-mta qui installe cette redirection ; sans lui, rien ne part. Vérifiez que /usr/sbin/sendmail existe bien et pointe vers msmtp — sur CentOS/RHEL, le paquet msmtp seul ne fournit pas cette bascule.
Mon email part mais arrive sans objet, d'où vient le problème ?
msmtp lit les en-têtes depuis l'entrée standard, il ne les fabrique pas. Il faut donc envoyer la ligne Subject: ..., puis une ligne vide, puis seulement le corps du message. C'est le rôle du double saut de ligne dans echo -e "Subject: Test msmtp..." | msmtp [email protected] : sans ce séparateur, tout est interprété comme du corps de message et l'objet disparaît.
Comment diagnostiquer un envoi qui échoue ?
Relancez la commande avec msmtp --debug : la totalité de la conversation SMTP s'affiche, du handshake TLS jusqu'aux codes de réponse du serveur. Un échec d'authentification, un certificat non validé ou un port filtré se repèrent immédiatement. En complément, /var/log/msmtp.log garde la trace de chaque envoi dès lors que logfile est défini dans la section defaults.

Partager ce tutoriel

Cet article vous a plu ?

Cet article vous a-t-il été utile ?

Merci pour votre retour !

Commentaires

Recommandé pour vous

Article de fond sur le sujet

Checklist Sécurité Linux

30 points essentiels pour sécuriser un serveur Linux. Recevez aussi les nouveaux tutoriels par email.

Pas de spam. Désabonnement en 1 clic.