Logiciels en ligne de commande

ssmtp msmtp mail s-nail : Envoyer des emails facilement sous Linux en ligne de commande

Cet article a été mis à jour, vous consultez ici une archive de cet article!
Table des matières

envoi_courriel



Introduction



Sur ce site, j'ai réalisé des tutoriels sur postfix et comment l'installer en tant que relais SMTP.

Cependant, il existe plus simple que de mettre en place postfix pour envoyer des emails, grâce à 2 composants :
- Un Client SMTP
- Une commande qui permet d'expédier des emails

Vous allez voir, c'est facile, cela fonctionne super bien, et j'utilise ça depuis bien longtemps sur les serveurs du travail pour envoyer par mail des retours de scripts de sauvegarde.

Le client SMTP



Il existe plusieurs clients SMTP. Choisissez celui de votre choix : ssmtp, msmtp.

ssmtp (obsolète mais gardé pour archive)



ssmtp est le premier outil que j'ai utilisé pour configurer localement un client SMTP sur la machine.

Il suffit d'installer le paquet ssmtp.

CentOS :
Code BASH :
yum install ssmtp


Gentoo :
Code BASH :
emerge -av mail-mta/ssmtp


Debian :
Code BASH :
apt install ssmtp


Ensuite, on va indiquer à ssmtp les paramètres du SMTP à contacter pour envoyer des emails. Tout se passe dans le fichier /etc/ssmtp/ssmtp.conf :

Code BASH :
vi /etc/ssmtp/ssmtp.conf


Je vous mets mon fichier de configuration avec les options

Code BASH :
#
# /etc/ssmtp.conf -- a config file for sSMTP sendmail.
#
# Serveur SMTP à utiliser
mailhub=auth.smtp.1and1.fr:587
# Réécrire le domaine de l'expéditeur
rewriteDomain=linuxtricks.fr
# Nom de la machine 
hostname=serveur
## Mettre YES permet au programme qui envoie un courriel de modifier l'entête du message concernant l'émetteur.
FromLineOverride=YES
## Authentification sur le relais smtp
UseSTARTTLS=yes
UseTLS=yes
#IMPORTANT: The following line is mandatory for TLS authentication
TLS_CA_File=/etc/pki/tls/certs/ca-bundle.crt
## Nom d'utilisateur SMTP
AuthUser=XXXXXXXXXXX@linuxtricks.fr
## Mot de passe associe au compte
AuthPass=XXXXXXXXXXX



msmtp (recommandé)



msmtp est le deuxième outil que j'ai utilisé pour configurer localement un client SMTP sur la machine.

Il suffit d'installer le paquet msmtp.

Red Hat et dérivées :
Code BASH :
dnf install msmtp


Gentoo :
Code BASH :
emerge -av mail-mta/msmtp


Debian:
Code BASH :
apt install msmtp


Ensuite, on va indiquer à msmtp les paramètres du SMTP à contacter pour envoyer des emails.

Tout se passe dans le fichier /etc/msmtprc ou bien dans le fichier ~/.msmtprc pour un utilisateur :

Code BASH :
vi /etc/msmtprc


Je vous mets mon fichier de configuration avec les options (sur CentOS 8)

Code BASH :
# Valeurs par défaut pour tous les comptes.
defaults
auth           on
tls            on
tls_starttls   on
tls_trust_file /etc/pki/tls/certs/ca-bundle.crt
logfile        /var/log/msmtp.log
syslog          LOG_MAIL
account        ionos
host           smtp.ionos.fr
port           587
from           XXX@linuxtricks.fr
user           XXX@linuxtricks.fr
password       XXXXX
# Definition du compte par defaut
account default : ionos
 


Pour désactiver l'authentification ou le tls (non recommandé) :
Code TEXT :
auth           off
tls            off
tls_starttls   off


Pour le système, appliquer des droits restreints au fichier /etc/msmtprc pour éviter qu'un utilisateur ait accès aux identifiants :

Code BASH :
chmod 600 /etc/msmtprc
chown root /etc/msmtprc



La commande mail pour envoyer des emails



Il faut installer la commande mail pour envoyer des emails depuis vos scripts.
Certaines commandes n'ont pas la même syntaxe, je diffère donc les cas ici.

mailutils



Gentoo :
Code BASH :
emerge -av net-mail/mailutils


Debian :
Code BASH :
apt install mailutils


Pour envoyer un message :
Code BASH :
echo "Corps de mail" | mail -s "Sujet" destinataire@linuxtricks.fr


Le mail est envoyé avec comme expéditeur le unixusername@hostname. On peut réécrire l'expéditeur ainsi :
Code BASH :
echo "Corps de mail" | mail -s "Sujet" -a "From: [email protected]" destinataire@linuxtricks.fr


Plutôt que de faire
Code BASH :
echo "Du texte" | mail 


on peut écrire tout au long du script dans un fichier (par exemple /tmp/fichier) puis de faire
Code BASH :
cat /tmp/fichier | mail 


bsd-mailx



Debian :
Code BASH :
apt install mailutils


Pour envoyer un message :
Code BASH :
echo "Corps de mail" | mail -s "Sujet" destinataire@linuxtricks.fr


Le mail est envoyé avec comme expéditeur le unixusername@hostname. On peut réécrire l'expéditeur ainsi :
Code BASH :
echo "Corps de mail" | mail -s "Sujet" -a "From: [email protected]" destinataire@linuxtricks.fr


Plutôt que de faire
Code BASH :
echo "Du texte" | mail 


on peut écrire tout au long du script dans un fichier (par exemple /tmp/fichier) puis de faire
Code BASH :
cat /tmp/fichier | mail 


mailx



Red Hat et dérivées :
Code BASH :
yum install mailx


Pour envoyer un message :
Code BASH :
echo "Corps de mail" | mail -s "Sujet" destinataire@linuxtricks.fr


Le mail est envoyé avec comme expéditeur le unixusername@hostname. On peut réécrire l'expéditeur ainsi :
Code BASH :
echo "Corps de mail" | mail -s "Sujet" -r expediteur@linuxtricks.fr destinataire@linuxtricks.fr


On peut envoyer le contenu d'un fichier HTML dans un mail au format HTML :
Code BASH :
cat export.html |  mail -s "$(echo -e "Sujet\nContent-Type: text/html")" destinataire@linuxtricks.fr


s-nail



Red Hat 9 et dérivées (EPEL pour Red Hat 7 et 8) + Fedora :
Code BASH :
dnf install s-nail


Debian :
Code BASH :
apt install s-nail


Gentoo :
Code BASH :
emerge -av mail-client/s-nail


Pour envoyer un message :
Code BASH :
echo "Corps de mail" | mail -s "Sujet" destinataire@linuxtricks.fr


Le mail est envoyé avec comme expéditeur le unixusername@hostname. On peut réécrire l'expéditeur ainsi :
Code BASH :
echo "Corps de mail" | mail -s "Sujet" -r expediteur@linuxtricks.fr destinataire@linuxtricks.fr


On peut envoyer le contenu d'un fichier HTML dans un mail au format HTML :
Code BASH :
cat export.html |  mail -s "$(echo -e "Sujet\nContent-Type: text/html")" destinataire@linuxtricks.fr


Paramétrer PHP avec msmtp



Quand msmtp est paramétré sur le serveur, la fonction mail de PHP ne sait pas l'utiliser par défaut.

Dans un premier temps, s'assurer que apache puisse lire le fichier /etc/msmtprc

On peut autoriser la lecture du fichier par apache (ou de l'utilisateur qui exécute php) :

Code BASH :
chgrp apache /etc/msmtprc
chmod g+r  /etc/msmtprc


Ensuite éditer le fichier php.ini (l'emplacement peut différer) :

Code BASH :
vi /etc/php.ini


Modifier la ligne sendmail_path comme ceci :

Code TEXT :
sendmail_path = "/usr/bin/msmtp -C /etc/msmtprc -a ionos -t"


Le libellé de l'option -a est le nom du compte à utiliser paramétré dans le msmtprc.

Ensuite, rechargez la configuration PHP testez avec une fonction mail le bon fonctionnement :

Code PHP :
mail("[email protected]","Sujet","Email envoye avec PHP via msmtp");