Mail

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
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