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?
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.
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.
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).
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
/tmp/mailtest
est écrasé chaque fois que ce script est utilisé.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.
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.
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."
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
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
(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]'
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.