Post

Debian - Relayer les e-mails vers un compte (msmtp, MailX, Sendmail)

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

Cet article est sous licence CC BY 4.0 par l'auteur.