logo rss

GNU/Linux - sendmail pour envoyer des courriels en CLI ou en scripts

Logo sendmail Logo Debian

Je mettrai ici quelques astuces que j'utilise pour envoyer des courriels avec la commande sendmail.

La commande sendmail est très utile lorsque l'on souhaite envoyer des e-mails dans des scripts bash.

Installer et Configurer SSMTP

J'utilise personnelement un serveur de mails privé mais il est également possible d'utiliser un compte gmail.

Note : pour se faire il faudra au préalable activer le mode applications moins sécurisées depuis le compte gmail (https://support.google.com/).

  • Installer ssmtp :
root@host:~# apt update && apt install ssmtp
  • Éditer le fichier /etc/ssmtp/ssmtp.conf :
# # Config file for sSMTP sendmail # # The person who gets all mail for userids < 1000 # Make this empty to disable rewriting. #root=postmaster # The place where the mail goes. The actual machine name is required no # MX records are consulted. Commonly mailhosts are named mail.domain.com mailhub=std.rocks:465 # Where will the mail seem to come from? rewriteDomain=std.rocks # The full hostname hostname=server.std.rocks # Are users allowed to set their own From: address? # YES - Allow the user to specify their own From: address # NO - Use the system generated From: address FromLineOverride=YES root=rapport@std.rocks TLS_CA_FILE=/etc/ssl/certs/ca-certificates.crt UseTLS=Yes UseSTARTTLS=No # users which is allowed to send mail AuthUser=john@std.rocks AuthPass=MyP@ssW0rd AuthMethod=LOGIN

Envoyer des courriels

Simple

  • Créer un fichier /tmp/mail.header et configurer l'en-tête et le corp du message :
To: user@shebangthedolphins.net From: john@std.rocks Subject: test mail Hello human world! This message has been sent with sendmail!
  • Envoyer le message :
user@host:~$ cat /tmp/mail.header | sendmail -f john@std.rocks user@shebangthedolphins.net

Envoyer des mails depuis une liste d'adresses

  • Créer le fichier /tmp/mail.list et insérer les mails des destinataires :
user01@shebangthedolphins.net user02@shebangthedolphins.net user03@shebangthedolphins.net
  • Créer un fichier /tmp/mail.header.origin avec temp@address qui sera remplacé lors de l'envoi (avec sed -i) :
To: temp@address From: john@std.rocks Date: Thu, 17 Jun 2021 08:45:25 +0200 Subject: test mail
  • Créer un fichier /tmp/body qui contiendra le corps du message :
Hi, this message has been sent with sendmail!
  • Envoyer les mails :
user@host:~$ for i in $(cat /tmp/mail.list | sort -R | head -n 1); do sleep 20; cp /tmp/mail.header.origin /tmp/mail.header; echo "sending mail to $i"; sed -i "s/temp@address/$i/" /tmp/mail.header; sed -i "s/Date:.*/Date: $(date -R)/" mail.header; cat /tmp/mail.header /tmp/body | /usr/sbin/sendmail -f john@std.rocks "$i"; done
  • Same but easier to read :
for i in $(cat /tmp/mail.list | sort -R | head -n 1); do sleep 20s #wait 20 second beetween each mail cp /tmp/mail.header.origin /tmp/mail.header #copy template header to current header echo "sending mail to $i" #echo current recipient sed -i "s/temp@address/$i/" /tmp/mail.header #replace temp@shebangthedolphins.net by current recipient mail address in /tmp/mail.header sed -i "s/Date:.*/Date: $(date -R)/" /tmp/mail.header #replace Date field by current date in /tmp/mail.header cat /tmp/mail.header /tmp/body | /usr/sbin/sendmail -f john@std.rocks "$i" #send email to current recipient done

Autres en-têtes

Si nécessaire on peut ajouter d'autres en-têtes :

  • Définir le content type et le charset :
Content-type: text/plain; charset=utf-8
  • Définir le Mime-Version (Normalement automatiquement ajouté) :
Mime-Version: 1.0
  • Définir le highest priority :
X-Priority: 1 (Highest)
  • Activer la notification, pour infomer l'expéditeur de la destination finale du message :
Disposition-Notification-To: <sender@shebangthedolphins.net>

Envoyer un courriel avec une pièce jointe

  • Convertir le fichier à envoyer en base64 :
user@host:~$ base64 secret.svg PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI5MDAiIGhlaWdo dD0iNjAwIj48cGF0aCBmaWxsPSIjRUQyOTM5IiBkPSJNMCAwaDkwMHY2MDBIMHoiLz48cGF0aCBm aWxsPSIjZmZmIiBkPSJNMCAwaDYwMHY2MDBIMHoiLz48cGF0aCBmaWxsPSIjMDAyMzk1IiBkPSJN CAwaDMwMHY2MDBIMHoiLz48L3N2Zz4=
  • Éditer le fichier /tmp/body :
--19032019ABCDE Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Hi, this message has been sent with sendmail! --19032019ABCDE Content-Type: application/svg; name="secret.svg" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="secret.svg" PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI5MDAiIGhlaWdo dD0iNjAwIj48cGF0aCBmaWxsPSIjRUQyOTM5IiBkPSJNMCAwaDkwMHY2MDBIMHoiLz48cGF0aCBm aWxsPSIjZmZmIiBkPSJNMCAwaDYwMHY2MDBIMHoiLz48cGF0aCBmaWxsPSIjMDAyMzk1IiBkPSJN CAwaDMwMHY2MDBIMHoiLz48L3N2Zz4= --19032019ABCDE
  • Éditer le fichier /tmp/header :
To: user@shebangthedolphins.net From: john@std.rocks Date: Thu, 17 Jun 2021 08:45:25 +0200 Subject: test mail Content-type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit IME-Version: 1.0 Content-Type: multipart/mixed; boundary="19032019ABCDE"
  • Envoyer le mail :
user@host:~$ cat /tmp/mail /tmp/mail | sendmail -f john@std.rocks user@shebangthedolphins.net
Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.

Contact :

adresse mail de contact