Envoyer un message depuis un script shell linux
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.
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.
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).
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.
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.
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.
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
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."
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.