Je souhaite envoyer un e-mail à partir d'un script Linux Shell. Quelle est la commande standard pour ce faire et dois-je configurer des noms de serveur spéciaux?
Je souhaite envoyer un e-mail à partir d'un script Linux Shell. Quelle est la commande standard pour ce faire et dois-je configurer des noms de serveur spéciaux?
Réponses:
Si le serveur est bien configuré, par exemple s'il a un MTA opérationnel, 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" your@email.com
man mail
pour plus de détails.
sudo apt-get install mailutils
et sélectionnez Site Internet: le courrier est envoyé et reçu directement via SMTP. .
Si vous voulez une approche propre et simple bash, et vous ne voulez pas utiliser cat
, echo
etc., la façon la plus simple serait:
mail -s "subject here" email@address.com <<< "message"
<<<
est utilisé pour rediriger l'entrée standard. Cela fait longtemps partie de bash.
cat << END
...END | mail -s "subject" test@example.com
Si exim et ssmtp sont en cours d'exécution, vous pouvez rencontrer 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 e-mail pour insistance, vous devez d'abord purger le MTA éventuellement préinstallé comme exim ou postfix et réinstaller ssmtp.
Ensuite, c'est assez simple, configurer seulement 2 fichiers (revaliases et ssmtp.conf) - Voir la documentation ssmtp -, et l'utilisation dans votre script bash ou bourne est comme:
#!/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 $?
N'oubliez évidemment pas d'ouvrir la sortie de votre 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
/tmp/mailtest
est écrasé à chaque fois que ce script est utilisé.En général, vous voudrez utiliser la mail
commande pour envoyer votre message en utilisant le MTA local (qui le livrera en utilisant 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 pour un système de type UNIX d'en omettre un), vous pouvez soit utiliser un MTA minimaliste comme ssmtp .
ssmtp
est assez simple à configurer. En gros, il vous suffira de spécifier 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 myriades de scripts qui se connectent simplement au serveur SMTP directement et essaient d'y publier un message, tels que Smtp-Auth-Email-Script , smtp-cli , SendEmail , etc.
En admettant que vous souhaitez 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"
Modifiez somehost
, someport
et someaccount@somedomain
aux valeurs réelles que vous utiliseriez. Aucun cryptage ni authentification n'est effectué dans cet exemple.
mailx
n'est pas installé?
La mail
commande fait cela (qui l'aurait deviné ;-). Ouvrez votre shell et entrez man mail
pour obtenir la page de manuel de la mail
commande pour toutes les options disponibles.
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é. Consultez cet article: 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 immédiatement. Si vous souhaitez ajouter des pièces jointes, la chose peut devenir un peu plus compliquée, vous devrez encoder en base64 les fichiers binaires et les intégrer entre les limites. C'est un bon endroit pour commencer à enquêter: http://forums.codeguru.com/showthread.php?418377-Send-Email-w-attachments-using-SMTP
Sous Linux, courrier utilitaire de peut être utilisé pour envoyer des pièces jointes avec l'option "-a". Parcourez les pages de manuel pour en savoir plus sur l'option. Par exemple, le code suivant enverra une pièce jointe:
mail -s "CECI EST OBJET" -a pièce jointe.txt nom@domaine.com <<< "Bonjour mon pote, veuillez trouver les rapports d'échec."
UTILISATION DE POSTFIX
1: installer le logiciel
Debian et Ubuntu:
apt-get update && apt-get install postfix mailutils
OpenSUSE:
zypper update && zypper install postfix mailx cyrus-sasl
Feutre:
dnf update && dnf install postfix mailx
CentOS:
yum update && yum install postfix mailx cyrus-sasl cyrus-sasl-plain
Arch Linux:
pacman -Sy postfix mailutils
FreeBSD:
portsnap fetch extract update
cd /usr/ports/mail/postfix
make config
dans la configuration, sélectionnez le support SASL
make install clean
pkg install mailx
2. Configurer Gmail
/ etc / postfix. Créez ou modifiez le fichier de mot de passe:
vim /etc/postfix/sasl_passwd
im en utilisant vim vous pouvez utiliser n'importe quel éditeur de fichier comme nano, cat .....
> Ubuntu, Fedora, CentOS, Debian, OpenSUSE, Arch Linux:
Ajoute ça
où l'utilisateur remplace par votre nom de messagerie et le mot de passe est votre mot de passe gmail
[smtp.gmail.com]:587 user@gmail.com:password
Enregistrez et fermez le fichier et rendez-le accessible uniquement par root: car c'est un contenu sensible qui contient votre mot de passe
chmod 600 /usr/local/etc/postfix/sasl_passwd
> FreeBSD:
répertoire / usr / local / etc / postfix.
vim /usr/local/etc/postfix/sasl_passwd
Ajoutez la ligne:
[smtp.gmail.com]:587 user@gmail.com:password
Enregistrez et rendez-le accessible uniquement par root:
chmod 600 /usr/local/etc/postfix/sasl_passwd
3. Configuration de Postfix
fichier de configuration main.cf
6 paramètres que nous devons définir dans le Postfix
Ubuntu, Arch Linux, Debian:
Éditer
vim /etc/postfix/main.cf
modifiez les valeurs suivantes:
relayhost = [smtp.gmail.com]:587
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_security_options =
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
smtp_sasl_security_options qui dans la configuration sera défini sur vide , pour garantir qu'aucune option de sécurité incompatible avec Gmail n'est utilisée.
sauver et fermer
comme comme pour
OpenSUSE:
vim /etc/postfix/main.cf
modifier
relayhost = [smtp.gmail.com]:587
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_security_options =
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_tls_CAfile = /etc/ssl/ca-bundle.pem
il nécessite également la configuration du fichier master.cf
modifier:
vim /etc/postfix/master.cf
comme en décommentant cette ligne (supprimer #)
#tlsmgr unix - - n 1000? 1 tlsmg
sauver et fermer
Fedora, CentOS:
vim /etc/postfix/main.cf
modifier
relayhost = [smtp.gmail.com]:587
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_security_options =
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_tls_CAfile = /etc/ssl/certs/ca-bundle.crt
FreeBSD:
vim /usr/local/etc/postfix/main.cf
modifier:
relayhost = [smtp.gmail.com]:587
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_security_options =
smtp_sasl_password_maps = hash:/usr/local/etc/postfix/sasl_passwd
smtp_tls_CAfile = /etc/mail/certs/cacert.pem
enregistrez et fermez ceci
4. Traiter le fichier de mot de passe:
Ubuntu, Fedora, CentOS, OpenSUSE, Arch Linux, Debian:
postmap /etc/postfix/sasl_passwd
pour freeBSD
postmap /usr/local/etc/postfix/sasl_passwd
4.1) Redémarrez postfix
Ubuntu, Fedora, CentOS, OpenSUSE, Arch Linux, Debian:
systemctl restart postfix.service
pour FreeBSD:
service postfix onestart
nano /etc/rc.conf
ajouter
postfix_enable=YES
enregistrer puis exécuter pour démarrer
service postfix start
5. Activez les "Applications moins sécurisées" dans Gmail à l'aide du lien ci-dessous
https://support.google.com/accounts/answer/6010255
6. Envoyer un e-mail de test
mail -s "subject" recever@domain.com
appuyez sur Entrée
ajouter le corps du courrier comme vous le souhaitez appuyez sur entrée puis appuyez sur ctrl + d pour une terminaison correcte
si cela ne fonctionne pas, vérifiez à nouveau toutes les étapes et vérifiez si vous activez " l'application moins sécurisée" dans votre Gmail
puis redémarrez postfix si vous modifiez quelque chose dans ce
pour le script shell, créez le fichier .sh et ajoutez la commande en 6 étapes comme exigence
par exemple juste pour un échantillon
#!/bin/bash
REALVALUE=$(df / | grep / | awk '{ print $5}' | sed 's/%//g')
THRESHOLD=80
if [ "$REALVALUE" -gt "$THRESHOLD" ] ; then
mail -s 'Disk Space Alert' mailid@domainname.com << EOF
Your root partition remaining free space is critically low. Used: $REALVALUE%
EOF
fi
Le script envoie un e-mail lorsque l'utilisation du disque dépasse le pourcentage spécifié par la variable THRESHOLD (80% ici).
vous pouvez utiliser la commande 'email' ou 'emailx'.
(1) $ vim /etc/mail.rc # ou # vim /etc/nail.rc
set from = xxx@xxx.com #
set smtp = smtp.exmail.gmail.com #gmail's smtp server
set smtp-auth-user = xxx@xxx.com #sender's email address
set smtp-auth-password = xxxxxxx #get from gmail, not your email account passwd
set smtp-auth=login
(2) $ echo "Merci de ne pas oublier de supprimer les sujets ons inutilisés!" | mail -s "sujets de déchets" -a a.txt developer@xxx.com #send to group user 'developer@xxxx.com'