Wysyłanie wiadomości ze skryptu powłoki Linuksa

Chcę wysłać e-mail ze skryptu powłoki Linuksa. Jakie jest standardowe polecenie, aby to zrobić i czy muszę skonfigurować jakieś specjalne nazwy serwerów?

Author: Zubair, 2011-03-01

9 answers

Jeśli serwer jest dobrze skonfigurowany, np. ma uruchomiony MTA, możesz po prostu użyć polecenia mail.

Na przykład, aby wysłać zawartość pliku, możesz to zrobić:

$ cat /path/to/file | mail -s "your subject" [email protected]

man mail Po Więcej Szczegółów.

 103
Author: Francesco Laurita,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-13 22:40:33

Jeśli chcesz mieć czyste i proste podejście w bash, a nie chcesz używać cat, echo, itd., najprostszym sposobem byłoby:

mail -s "subject here" [email protected] <<< "message"

<<< służy do przekierowania standardowego wejścia. Od dawna jest częścią Basha.

 76
Author: Peter O.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-31 15:24:11

Jeśli zarówno exim, jak i ssmtp są uruchomione, możesz wpaść w kłopoty. Więc jeśli chcesz po prostu uruchomić prosty MTA, po prostu mieć prostego klienta smtp do wysyłania powiadomień e-mail dla uporu, należy oczyścić ostatecznie preinstalowany MTA jak exim lub postfix pierwszy i ponownie zainstalować ssmtp.

Potem jest całkiem prosto, konfigurując tylko 2 pliki (revaliases i ssmtp.conf) - Patrz ssmtp doc -, a użycie w skrypcie bash lub bourne ' a jest jak :

#!/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 $?  

Oczywiście nie zapomnij otworzyć wyjścia Firewalla na port smtp (25).

 20
Author: hornetbzz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-23 18:15:21

Inna opcja dla w skrypcie 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
  • plik /tmp/mailtest jest nadpisywany za każdym razem, gdy używany jest ten skrypt.
  • lokalizacja sendmaila może się różnić w zależności od systemu.
  • używając tego w skrypcie cron, musisz użyć bezwzględnej ścieżki dla polecenia sendmail.
 7
Author: SPRBRN,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-06 15:13:53

Ogólnie rzecz biorąc, powinieneś użyć polecenia mail, Aby wysłać wiadomość za pomocą lokalnego MTA(który dostarczy ją za pomocą SMTP do miejsca docelowego lub po prostu przekaże ją na jakiś bardziej wydajny serwer SMTP, na przykład u Twojego dostawcy usług internetowych). Jeśli nie masz lokalnego MTA (chociaż jest to trochę nietypowe dla systemu UNIKSOPODOBNEGO, aby pominąć jeden), możesz użyć jakiegoś minimalistycznego MTA jak ssmtp .

ssmtp jest dość łatwy w konfiguracji. Zasadniczo musisz tylko określić, gdzie jest SMTP Twojego dostawcy serwer to:

# 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

Inną opcją jest użycie jednego ze skryptów, które po prostu łączą się bezpośrednio z serwerem SMTP i próbują tam wysłać wiadomość, np. Smtp-Auth-Email-Script, smtp-cli, SendEmail , itd.

 6
Author: GreyCat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-03-01 16:04:23

Przyznając, że chcesz użyć jakiegoś serwera smtp, możesz zrobić:

export SUBJECT=some_subject
export smtp=somehost:someport
export EMAIL=someaccount@somedomain
echo "some message" | mailx -s "$SUBJECT" "$EMAIL"

Zmień somehost, someport, i someaccount@somedomain do rzeczywistych wartości, których byś użył. W tym przykładzie nie przeprowadza się szyfrowania ani uwierzytelniania.

 3
Author: Germano,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-11 16:43:58

Nawet nie potrzebujesz MTA. Protokół SMTP jest wystarczająco prosty, aby zapisać go bezpośrednio na serwerze SMTP. Możesz nawet komunikować się przez SSL / TLS, jeśli masz zainstalowany pakiet OpenSSL. Sprawdź ten post: https://33hops.com/send-email-from-bash-shell.html

Powyższy przykład pokazuje, jak wysyłać wiadomości tekstowe / html, które będą działać po wyjęciu z pudełka. Jeśli chcesz dodawać załączniki, sprawa może być nieco bardziej skomplikowana, będziesz musiał Base64 zakodować pliki binarne i osadzić je między granicami. To jest dobre miejsce, aby rozpocząć dochodzenie: http://forums.codeguru.com/showthread.php?418377-Send-Email-w-attachments-using-SMTP

 1
Author: Daniel J.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-12 19:03:02

W Linuksie, narzędzie mail może być użyte do wysłania załącznika z opcją "-a". Przejdź przez strony podręcznika ekranowego, aby przeczytać o tej opcji. Na przykład poniższy kod wyśle Załącznik:

mail-s "THIS IS SUBJECT" - załącznik.txt [email protected]

 1
Author: krish___na,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-21 11:22:47

Robi to komenda mail (kto by się domyślił; -). Otwórz powłokę i wprowadź man mail, Aby uzyskać stronę podręcznika dla polecenia mail dla wszystkich dostępnych opcji.

 0
Author: DarkDust,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-03-01 14:40:11