Envoyer un message depuis un script shell linux

je veux envoyer un email à partir d'un script Shell Linux. Quelle est la commande standard pour faire cela et dois-je configurer des noms de serveurs Spéciaux?

94
demandé sur Zubair 2011-03-01 17:36:46

9 réponses

si le serveur est bien configuré, par exemple s'il dispose d'un MTA fonctionnel, vous pouvez utiliser la commande mail.

par exemple, Pour envoyer le contenu d'un fichier, vous pouvez le faire:

$ cat /path/to/file | mail -s "your subject" your@email.com

man mail pour plus de détails.

103
répondu Francesco Laurita 2015-05-13 22:40:33

si vous voulez une approche propre et simple à bash, et vous ne voulez pas utiliser cat , echo , etc. le plus simple serait:

mail -s "subject here" email@address.com <<< "message"

<<< est utilisé pour rediriger l'entrée standard. Ça fait longtemps que ça fait partie de bash.

76
répondu Peter O. 2014-07-31 15:24:11

si exim et ssmtp fonctionnent tous les deux, vous pouvez avoir des problèmes. Donc, si vous voulez juste exécuter un MTA simple, juste pour avoir un client smtp simple pour envoyer des notifications par e-mail pour l'insistance, vous devez purger le MTA éventuellement préinstallé comme exim ou postfix d'abord et réinstaller ssmtp.

alors c'est assez simple, ne configurant que 2 fichiers (revaliases et ssmtp.conf) - voir ssmtp doc -, et utilisation dans votre script bourne ou bash est comme:

#!/bin/sh  
SUBJECT=  
RECEIVER=  
TEXT=  

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

[[ -z  ]] && SUBJECT="Notification from $SENDER on server $SERVER_NAME"  
[[ -z  ]] && RECEIVER="another_configured_email_address"   
[[ -z  ]] && 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 votre sortie pare-feu sur le port smtp (25).

20
répondu hornetbzz 2014-11-23 18:15:21

une autre option pour dans un script bash:

mailbody="Testmail via bash script"
echo "From: info@myserver.test" >> /tmp/mailtest
echo "To: john@mywebsite.test" >> /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 varier d'un système.
  • lorsque vous utilisez ceci dans un script cron, vous devez utiliser le chemin absolu pour la commande sendmail.
7
répondu SPRBRN 2016-05-06 15:13:53

généralement, vous voulez utiliser la commande mail pour envoyer votre message en utilisant MTA local (qui le livrera en utilisant SMTP à la destination ou tout simplement le transmettre dans un serveur SMTP plus puissant, par exemple, à votre ISP). Si vous n'avez pas de MTA local (bien qu'il soit un peu inhabituel pour un système de type UNIX d'en omettre un), vous pouvez utiliser un MTA minimaliste comme ssmtp .

ssmtp est assez facile à configurer. Fondamentalement, vous aurez juste besoin de préciser où se trouve le 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 scripts myriads qui se connectent directement au serveur SMTP et essayent d'y poster un message, tel que Smtp-Auth-Email-Script , smtp-cli , SendEmail , etc.

6
répondu GreyCat 2011-03-01 16:04:23

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"

Changement somehost , someport , et someaccount@somedomain à valeurs réelles que vous pouvez utiliser. Aucun chiffrement et aucune authentification n'est effectué dans cet exemple.

3
répondu Germano 2012-10-11 16:43:58

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 sur SSL / TLS si vous avez le paquet OpenSSL installé. Vérifier ce message: https://33hops.com/send-email-from-bash-shell.html

ce qui précède est un exemple sur la façon d'envoyer des e-mails texte/html qui fonctionneront à partir de la boîte. Si vous voulez ajouter des pièces jointes la chose peut devenir un peu plus compliqué, vous aurez besoin de base64 encodent les fichiers binaires et les intègrent entre les limites. C'est un bon endroit pour commencer l'enquête: http://forums.codeguru.com/showthread.php?418377-Send-Email-w-attachments-using-SMTP

1
répondu Daniel J. 2016-07-12 19:03:02

Sur linux, mail utilitaire peut être utilisé pour envoyer de pièce jointe avec l'option "-a". Parcourez les pages de manuel pour en savoir plus sur l'option. Pour eg, le code suivant sera envoyé en pièce jointe:

mail-s "C'EST l'OBJET" -une pièce jointe.txt name@domain.com < < < < "Salut Buddy, s'il vous plaît trouver des rapports d'échec."

1
répondu krish___na 2018-02-21 11:22:47

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.

0
répondu DarkDust 2011-03-01 14:40:11