| Fiche express | |
|---|---|
| Domaine | Envoi de mail en ligne de commande |
| Paquets | mailx (RHEL/CentOS) · mailutils (Debian/Ubuntu)
|
| Voir aussi | Sendmail |
Envoyer un courriel depuis la ligne de commande ou un script est une opération courante
d'administration (notifications de job, alertes de supervision, envoi de rapports). Cette
page couvre les commandes clientes (mail/mailx, mutt,
swaks) qui s'appuient sur un agent de transport (MTA) local ou distant — voir
Sendmail pour la configuration du MTA lui-même.
Installation
yum install mailx # RHEL/CentOS (depuis CentOS 6u3, le paquet mail n'inclut plus la commande par défaut)
apt install mailutils # Debian/Ubuntu
Usage de base
echo "texte" | mail -s "mon objet" destinataire@example.com
# envoyer le contenu d'un fichier comme corps du message
mail -s "message envoyé depuis un fichier" destinataire@example.com < /chemin/vers/fichier
# avec une pièce jointe (option -a, disponible sur mailx)
echo "Corps du message avec pièce jointe" | mail -a archive.tar.gz -s "fichier joint" destinataire@example.com
Envoi depuis PHP (utilise le MTA local configuré, voir Sendmail) :
<?php mail('destinataire@example.com', 'Sujet de test', 'Contenu du message'); ?>
Pièces jointes en base64 avec uuencode
uuencode encode des données binaires en base64 pour les inclure dans un flux
texte — pratique pour joindre un fichier à un mail envoyé via un pipe. Premier argument :
chemin du fichier local ; second argument : nom donné à la pièce jointe dans le message
reçu.
yum install sharutils # fournit uuencode/uudecode
uuencode monfichier.tar.gz fichier.tar.gz | mailx -s "sujet du mail" destinataire@example.com
( echo "corps du message" ; uuencode photo.jpg photo.jpg ) | mailx -s "sujet" destinataire@example.com
( cat corps_message.txt ; uuencode donnees.dat donnees.dat ) | mailx -s "sujet" destinataire@example.com
Construction manuelle d'en-têtes avant passage à sendmail directement (plutôt
que mail/mailx), avec plusieurs pièces jointes :
( echo "From: expediteur@example.com"
echo "Subject: sujet du message"
echo "To: destinataire@example.com"
cat corps_message.txt
uuencode -m fichier1.dat piece-jointe-1
uuencode -m fichier2.dat piece-jointe-2
) | sendmail destinataire@example.com
Client mutt
echo "corps du message" | mutt -a "/root/install.log" -s "sujet du message" -- destinataire@example.com
Client swaks (test SMTP)
swaks (Swiss Army Knife for SMTP) est surtout utile pour tester un relais SMTP
indépendamment d'un MUA — vérifier l'authentification, le TLS, ou simplement qu'un service
accepte bien les connexions sur le port 25/587 :
swaks -t "destinataire@example.com" --header "Subject: sujet" --body "corps du message" --attach archive.tar.gz
Exemples de scripts
Notification avec pièce jointe encodée, dans un script de traitement batch :
mail -s "Traitement commandes" "$DEST" <<-FINMAIL
Bonjour,
$(uuencode ./fichier1.$V_DATE.data fichier2.$V_DATE.txt)
FINMAIL
Envoi d'un fichier ZIP en pièce jointe :
cat <<EOF | mail -s "mail ZIP" destinataire@example.com
Bonjour
Vous trouverez ci-joint un fichier zip.
Cordialement,
$(uuencode /root/archive.zip archive.zip)
EOF
Envoi de tous les fichiers d'un répertoire courant en pièces jointes :
cat <<EOF | mail -s "plusieurs pièces jointes" destinataire@example.com
Bonjour
Vous trouverez ci-joints les fichiers du répertoire.
Cordialement,
$(for i in $(ls); do uuencode "$i" "$i"; done)
EOF
⚠️ Cette boucle sur ls casse sur les noms de fichiers contenant espaces ou
caractères spéciaux — préférer for i in *; do ... done pour un usage robuste.
Constitution d'un message avec une archive jointe, étape par étape :
cat "${BASE}/contenu.txt" > courrier.txt
zip -T "${BASE}/fichier.zip" "${BASE}/joint.txt"
uuencode "${BASE}/fichier.zip" "fichier.zip" >> courrier.txt
mailx -s "Nouveau test avec zip" destinataire@example.com < courrier.txt
Purger les boîtes mail locales
Vider le spool de tous les utilisateurs système (attention, action destructrice et irréversible) :
for i in $(ls /var/spool/mail); do > "/var/spool/mail/${i}"; done
Voir aussi
- Sendmail — configuration du MTA utilisé pour l'envoi effectif des messages