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?
Que signifie «mta» ici, y a-t-il un nom complet ou un lien? En tant que débutant, c'est ce que je veux savoir. Comme je manque d'expérience pour faire ça.
Zen
5
@Zen MTA signifie Agent de transport de courrier. postfix, sendmail, qmail etc
Francesco Laurita
@Zen pour la plupart, vous pouvez considérer MTA comme un serveur SMTP ou IMAP.
user151841
1
Si vous ne savez pas comment installer / configurer et que vous êtes sur Ubuntu: sudo apt-get install mailutilset sélectionnez Site Internet: le courrier est envoyé et reçu directement via SMTP. .
user1717828
86
Si vous voulez une approche propre et simple bash, et vous ne voulez pas utiliser cat, echoetc., 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.
Hé, cela a très bien fonctionné pour moi, merci! Comment spécifier plusieurs adresses de livraison?
E.Owen
1
@ E.Owen Vous pouvez utiliser l'option -t pour envoyer à plusieurs adresses séparées par des espaces
Jon
25
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).
Où puis-je changer le numéro de port dans ce script? Dans mon serveur, le port smtp fonctionne sur 8181.
manix
Je ne ferais pas cela dans ce shell sinon vous serez coincé tôt ou tard. Vous pouvez le faire dans le fichier de configuration: Voir unix.stackexchange.com/a/132731
hornetbzz
1
Pourquoi les nouvelles lignes sont-elles ingérées si je crée un simple echo $ MAIL_TXT?
KernelPanic
1
@Marko: Veuillez voir l'homme écho avec l'option -e: activer l'interprétation des échappements de contre-oblique
a voté contre parce que plusieurs processus peuvent appeler le script en même temps. Cela pourrait entraîner un fichier tmp corrompu / incorrect. De plus, le fichier / tmp n'est pas écrasé à chaque fois qu'il est utilisé - il augmente en fait avec chaque e-mail contenant tous les e-mails précédents à l'intérieur. Pas bon.
Taterhead
1
La première écriture dans / tmp / mailtest est un écrasement donc il supprimera tout ce qui s'y trouvait auparavant. Pourtant, cette méthode n'est pas idéale pour les autres raisons que vous avez décrites.
Simon
8
En général, vous voudrez utiliser la mailcommande 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 .
ssmtpest 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.
Modifiez somehost, someportet someaccount@somedomainaux valeurs réelles que vous utiliseriez. Aucun cryptage ni authentification n'est effectué dans cet exemple.
La mailcommande fait cela (qui l'aurait deviné ;-). Ouvrez votre shell et entrez man mailpour obtenir la page de manuel de la mailcommande pour toutes les options disponibles.
Je l'ai fait mais il n'y a pas d'option pour spécifier un serveur à utiliser
appshare.co
1
Cela fait partie de la configuration de votre agent de transfert de courrier local, par exemple Sendmail ou Postfix.
DarkDust
2
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 [email protected] <<< "Bonjour mon pote, veuillez trouver les rapports d'échec."
Bienvenue à SO. Merci d'avoir publié une réponse. Veuillez lire les informations sur la façon d'écrire une bonne réponse et modifier en conséquence. Enjoy SO ;-)
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.
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=80if["$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).
Le nom de cette réponse ne devrait-il pas être "ENVOYER UN MAIL DE LINUX À [email protected] VIA GMAIL"?
Cameron Hudson le
1
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 addressset smtp-auth-password = xxxxxxx #get from gmail, not your email account passwdset smtp-auth=login
Parce que s'il n'est pas envoyé à partir d'un compte autorisé, le courrier électronique sera envoyé dans la liste des courriers indésirables.
(2) $ echo "Merci de ne pas oublier de supprimer les sujets ons inutilisés!" | mail -s "sujets de déchets" -a a.txt [email protected] #send to group user '[email protected]'
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:
man mail
pour plus de détails.la source
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:<<<
est utilisé pour rediriger l'entrée standard. Cela fait longtemps partie de bash.la source
cat << END
...END | mail -s "subject" [email protected]
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:
N'oubliez évidemment pas d'ouvrir la sortie de votre pare-feu sur le port smtp (25).
la source
Une autre option pour dans un script bash:
/tmp/mailtest
est écrasé à chaque fois que ce script est utilisé.la source
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: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.
la source
En admettant que vous souhaitez utiliser un serveur smtp, vous pouvez faire:
Modifiez
somehost
,someport
etsomeaccount@somedomain
aux valeurs réelles que vous utiliseriez. Aucun cryptage ni authentification n'est effectué dans cet exemple.la source
mailx
n'est pas installé?La
mail
commande fait cela (qui l'aurait deviné ;-). Ouvrez votre shell et entrezman mail
pour obtenir la page de manuel de lamail
commande pour toutes les options disponibles.la source
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
la source
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 [email protected] <<< "Bonjour mon pote, veuillez trouver les rapports d'échec."
la source
ENVOYER UN MAIL DE LINUX À GMAIL
UTILISATION DE POSTFIX
1: installer le logiciel
Debian et Ubuntu:
OpenSUSE:
Feutre:
CentOS:
Arch Linux:
FreeBSD:
dans la configuration, sélectionnez le support SASL
2. Configurer Gmail
/ etc / postfix. Créez ou modifiez le fichier de mot de passe:
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
Enregistrez et fermez le fichier et rendez-le accessible uniquement par root: car c'est un contenu sensible qui contient votre mot de passe
> FreeBSD:
répertoire / usr / local / etc / postfix.
Ajoutez la ligne:
Enregistrez et rendez-le accessible uniquement par root:
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
modifiez les valeurs suivantes:
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:
modifier
il nécessite également la configuration du fichier master.cf
modifier:
comme en décommentant cette ligne (supprimer #)
sauver et fermer
Fedora, CentOS:
modifier
FreeBSD:
modifier:
enregistrez et fermez ceci
4. Traiter le fichier de mot de passe:
Ubuntu, Fedora, CentOS, OpenSUSE, Arch Linux, Debian:
pour freeBSD
4.1) Redémarrez postfix
Ubuntu, Fedora, CentOS, OpenSUSE, Arch Linux, Debian:
pour FreeBSD:
ajouter
enregistrer puis exécuter pour démarrer
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
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
Le script envoie un e-mail lorsque l'utilisation du disque dépasse le pourcentage spécifié par la variable THRESHOLD (80% ici).
la source
vous pouvez utiliser la commande 'email' ou 'emailx'.
(1) $ vim /etc/mail.rc # ou # vim /etc/nail.rc
Parce que s'il n'est pas envoyé à partir d'un compte autorisé, le courrier électronique sera envoyé dans la liste des courriers indésirables.
(2) $ echo "Merci de ne pas oublier de supprimer les sujets ons inutilisés!" | mail -s "sujets de déchets" -a a.txt [email protected] #send to group user '[email protected]'
la source