web-dev-qa-db-fra.com

Envoi d'un mail à partir d'un script shell Linux

Je souhaite envoyer un courrier électronique à partir d'un script Linux Shell. Quelle est la commande standard pour ce faire et dois-je configurer des noms de serveur spéciaux?

107
Zubair

Si le serveur est bien configuré, par exemple s'il a un MTA actif, vous pouvez simplement utiliser la commande mail.

Par exemple, pour envoyer le contenu d'un fichier, vous pouvez faire ceci:

$ cat /path/to/file | mail -s "your subject" [email protected]

man mail pour plus de détails.

112

Si vous voulez une approche simple et propre dans bash, et que vous ne voulez pas utiliser cat, echo, etc., le moyen le plus simple serait:

mail -s "subject here" [email protected] <<< "message"

<<< est utilisé pour rediriger l'entrée standard. Cela fait partie de bash depuis longtemps.

84
user767124

Si exim et ssmtp sont en cours d'exécution, vous pouvez créer des problèmes. Donc si vous voulez juste exécuter un simple MTA, juste pour avoir un simple client smtp pour envoyer des notifications par courrier électronique pour insistance, vous devez purger le MTA éventuellement préinstallé comme exim ou postfix d'abord et réinstallez ssmtp.

Ensuite, il est assez simple de configurer seulement 2 fichiers (revaliases et ssmtp.conf) - Voir la documentation ssmtp -, et l’utilisation dans votre script bash ou bourne est similaire à:

#!/bin/sh  
SUBJECT=$1  
RECEIVER=$2  
TEXT=$3  

SERVER_NAME=$HOSTNAME  
SENDER=$(whoami)  
USER="noreply"

[[ -z $1 ]] && SUBJECT="Notification from $SENDER on server $SERVER_NAME"  
[[ -z $2 ]] && RECEIVER="another_configured_email_address"   
[[ -z $3 ]] && TEXT="no text content"  

MAIL_TXT="Subject: $SUBJECT\nFrom: $SENDER\nTo: $RECEIVER\n\n$TEXT"  
echo -e $MAIL_TXT | sendmail -t  
exit $?  

Évidemment, n'oubliez pas d'ouvrir la sortie de votre pare-feu sur le port smtp (25).

24
hornetbzz

Une autre option pour un script bash:

mailbody="Testmail via bash script"
echo "From: [email protected]" > /tmp/mailtest
echo "To: [email protected]" >> /tmp/mailtest
echo "Subject: Mailtest subject" >> /tmp/mailtest
echo "" >> /tmp/mailtest
echo $mailbody >> /tmp/mailtest
cat /tmp/mailtest | /usr/sbin/sendmail -t
  • Le fichier /tmp/mailtest est écrasé chaque fois que ce script est utilisé.
  • L'emplacement de sendmail peut différer d'un système à l'autre.
  • Lorsque vous utilisez ceci dans un script cron, vous devez utiliser le chemin absolu pour la commande sendmail.
9
SPRBRN

Généralement, vous voudriez utiliser la commande mail pour envoyer votre message en utilisant un MTA local (qui le transmettra via SMTP à la destination ou le transférera simplement vers un serveur SMTP plus puissant, par exemple chez votre FAI). . Si vous n'avez pas de MTA local (bien qu'il soit un peu inhabituel qu'un système de type UNIX en omette un), vous pouvez utiliser un MTA minimaliste tel que ssmtp .

ssmtp est assez facile à configurer. Fondamentalement, il vous suffit de spécifier l'emplacement du serveur SMTP de votre fournisseur:

# The place where the mail goes. The actual machine name is required
# no MX records are consulted. Commonly mailhosts are named mail.domain.com
# The example will fit if you are in domain.com and you mailhub is so named.
mailhub=mail

Une autre option consiste à utiliser l'un des nombreux scripts qui se connectent directement au serveur SMTP et essaient d'y envoyer un message, tel que Smtp-Auth-Email-Script , smtp-cli =, SendEmail , etc.

8
GreyCat

En admettant que vous voulez utiliser un serveur smtp, vous pouvez faire:

export SUBJECT=some_subject
export smtp=somehost:someport
export EMAIL=someaccount@somedomain
echo "some message" | mailx -s "$SUBJECT" "$EMAIL"

Remplacez somehost, someport et someaccount@somedomain par les valeurs réelles que vous utiliseriez. Aucun cryptage et aucune authentification n'est effectuée dans cet exemple.

4
Germano

Sur linux, l’utilitaire mail peut être utilisé pour envoyer une pièce jointe avec l’option "-a". Parcourez les pages de manuel pour en savoir plus sur cette option. Par exemple, le code suivant enverra une pièce jointe:

mail -s "CE IS SUJET" -a pièce jointe.txt [email protected] <<< "Bonjour mon ami, retrouvez les rapports d'échec."

2
krish___na

Vous n'avez même pas besoin d'un MTA. Le protocole SMTP est assez simple pour l'écrire directement sur votre serveur SMTP. Vous pouvez même communiquer via SSL/TLS si le package OpenSSL est installé. Vérifiez ce post: https://33Hops.com/send-email-from-bash-Shell.html

Ce qui précède est un exemple d’envoi d’e-mails text/html qui fonctionnent immédiatement. Si vous souhaitez ajouter des pièces jointes, la chose peut devenir un peu plus compliquée, vous devrez coder en base64 les fichiers binaires et les incorporer entre les limites. C’est un bon point de départ pour enquêter: http://forums.codeguru.com/showthread.php?418377-Send-Email-w-attachments-using-SMTP

2
Daniel J.

vous pouvez utiliser la commande 'email' ou 'emailx'.

(1) $ vim /etc/mail.rc # ou # vim /etc/nail.rc

set from = [email protected] #
set smtp = smtp.exmail.gmail.com #gmail's smtp server 
set smtp-auth-user = [email protected] #sender's email address
set smtp-auth-password = xxxxxxx #get from gmail, not your email account passwd
set smtp-auth=login

Parce que s'il n'est pas envoyé à partir d'un compte autorisé, l'email sera envoyé à la liste de courrier indésirable.

(2) $ echo "N'oubliez pas de supprimer les sujets non utilisés!" | mail -s "déchets sujets" -a a.txt [email protected] #envoyer à l'utilisateur du groupe '[email protected]'

1
TINGTING WANG

La commande mail fait cela (qui l'aurait deviné ;-). Ouvrez votre shell et entrez man mail pour obtenir la page de manuel de la commande mail pour toutes les options disponibles.

1
DarkDust