Envoi d'email SMTP en CLI sous Linux
Mis à jour le 28/09/2023
Sous Windows, il y a l’excellente cmdlet Send-MailMessage
Sous Linux, j’installe et utilise swaks
Pour des choses plus complexes (connexion à gmail avec authentification stockée dans le gestionnaire de mot de passe par exemple) et pour obtenir des commandes plus courtes, j’utilise msmtp
qui a un fichier de configuration
swaks --to bdubois@gd.lan --from test@toto.lan --server 10.10.10.1 --header 'Subject: test'
Ceci va afficher tous les messages échangés entre le client et le serveur comme si on le faisait avec netcat ou telnet
Bien sûr, le man explique comment faire tout le reste: authentification, TLS, body, attachments …
Par exemple:
source: https://backreference.org/2013/05/22/send-email-with-attachments-from-script-or-command-line/index.html
get_mimetype(){
# warning: assumes that the passed file exists
file --mime-type "$1" | sed 's/.*: //'
}
# ---------------------------------------------------------------------------------------------------
# if MIME type application/octet-stream is fine
$ swaks -s "${smtpserver}" -p "${smtpport}" -t "$to" -f "$from" --header "Subject: $subject" -S \
--protocol ESMTP -a -au "$user" -ap "$password" --body "$body" \
--attach foo.pdf --attach bar.jpg
# ---------------------------------------------------------------------------------------------------
# to manually specifiy MIME types
$ swaks -s "${smtpserver}" -p "${smtpport}" -t "$to" -f "$from" --header "Subject: $subject" -S \
--protocol ESMTP -a -au "$user" -ap "$password" --body "$body" \
--attach-type "$(get_mimetype foo.pdf)" --attach foo.pdf \
--attach-type "$(get_mimetype bar.jpg)" --attach bar.jpg
# yes, MIME type has to go before the file name.
# To do SSL/TLS, see the various --tls* options