Debian - Relayer les e-mails vers un compte (msmtp, MailX, Sendmail)
msmtp est un client SMTP pour l’envoi de courriels. Son mode de fonctionnement par défaut consiste à transférer les courriels au serveur SMTP que vous aurez indiqué dans sa configuration. Ce dernier se chargera de distribuer les courriels à leurs destinataires.
Il est entièrement compatible avec sendmail, prend en charge le transport sécurisé TLS, les comptes multiples, diverses méthodes d’authentification et les notifications de distribution.
msmtp + mailx
Installer les paquets msmtp
1
2
sudo apt update
sudo apt install -y msmtp msmtp-mta
Pour envoyer des mails depuis les outils système (sendmail, mailx) sur Debian 13 en utilisant msmtp comme MTA compatible avec sendmail
Si un autre MTA est installé (postfix/exim), retirez-le ou reconfigurez-le pour éviter les conflits :
1
sudo apt remove --purge postfix exim4 -y # only if you intend to use msmtp as sendmail
Installer les paquets mailx
1
sudo apt install bsd-mailx
Vérifier l’enveloppe sendmail msmtp-mta fournit /usr/sbin/sendmail.
1
ls -l /usr/sbin/sendmail
1
lrwxrwxrwx 1 root root 12 16 avril 2025 /usr/sbin/sendmail -> ../bin/msmtp
Identifiants sécurisés
Créez un script qui lit en toute sécurité les identifiants et mot de passe SMTP
1
2
3
4
5
6
sudo tee /usr/local/bin/msmtp-get-pass.sh > /dev/null <<'EOF'
#!/bin/sh
printf '%s\n' 'Mot_de_passe_smtp_en_clair'
exit 0
EOF
sudo chmod 700 /usr/local/bin/msmtp-get-pass.sh
Configuration système (/etc/msmtprc)
Créez /etc/msmtprc avec la propriété root et des autorisations strictes, adaptée à la configuration (TLS implicite sur le port 465) — elle force explicitement l’adresse d’enveloppe et utilise passwordeval :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
sudo tee /etc/msmtprc > /dev/null <<'EOF'
# /etc/msmtprc — implicit TLS (port 465) example
defaults
auth on
tls on
tls_starttls off
tls_trust_file /etc/ssl/certs/ca-certificates.crt
logfile /var/log/msmtp.log
timeout 30
# account definition
account default
host yannig.net
port 465
protocol smtp
user yann@yannig.net
from yann@yannig.net
# If your SMTP server requires the "MAIL FROM" to match the authenticated user,
# ensure 'user' is the full email address (as set above).
# Prefer passwordeval to avoid plaintext passwords:
passwordeval /usr/local/bin/msmtp-get-pass.sh
# Optional: do not override the From header unless explicitly requested
allow_from_override off
set_from_header on
auto_from off
# Optional: stricter TLS checks (uncomment if needed)
# tls_certcheck on
# If you need a specific HELO/EHLO domain (avoid 'localhost' if the server rejects it)
# maildomain yannig.net
# Default account to use
# account default
EOF
# /etc/msmtprc : 600 root:root
sudo chmod 600 /etc/msmtprc
Remarques rapides
- J’ai mis user = yann@yannig.net pour éviter que le serveur exige une correspondance entre auth et MAIL FROM.
- from est explicitement l’adresse complète.
- allow_from_override est désactivé pour éviter qu’un en-tête From fourni par un client ne remplace l’enveloppe.
- Si votre script passwordeval retourne la commande ou le mot de passe correctement, laissez-le tel quel ; sinon remplacez par password “votre_mot_de_passe” (moins sûr).
Alternative port 587
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# /etc/msmtprc — port 587 system-wide msmtp config
defaults
auth on
tls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
logfile /var/log/msmtp.log
timeout 30
# Default account (adjust for your SMTP provider)
account default
host smtp.example.com
port 587
from noreply@example.com
user smtp-user@example.com
# Use passwordeval to avoid plaintext in this file:
passwordeval /usr/local/bin/msmtp-get-pass.sh
# Set default account
account default : default
Journalisation
Créez un fichier journal et logrotate :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
sudo touch /var/log/msmtp.log
sudo chown root:adm /var/log/msmtp.log
sudo chmod 640 /var/log/msmtp.log
# Rotate logs by creating /etc/logrotate.d/msmtp
sudo tee /etc/logrotate.d/msmtp > /dev/null <<'EOF'
/var/log/msmtp.log {
daily
rotate 14
compress
missingok
notifempty
create 0640 root adm
}
EOF
Test envoi
Test rapide (détaillé) :
1
2
3
4
# smtp port 587
echo -e "Subject: msmtp test\n\nThis is a test" | msmtp --debug --from=default recipient@example.com
# smtp port 465
echo -e "Subject: msmtp port 465 test\n\nThis is a test" | msmtp --debug --from=default recipient@example.com
Tester envoi message depuis root (sudo -s), pour les droits de lecture du mot de passe
1
2
3
4
# mail
echo "Test envoi via mailx `date`" | mail -s "Debian trixie cwwk" desti@email.fr
# msmtp debug
echo -e "Subject: Test\n\nThis is a test" | msmtp --debug desti@email.fr
Vérifiez /var/log/msmtp.log