Chcę wysłać wiadomość e-mail ze skryptu powłoki Linux. Jakie jest standardowe polecenie, aby to zrobić i czy muszę ustawić jakieś specjalne nazwy serwerów?
Chcę wysłać wiadomość e-mail ze skryptu powłoki Linux. Jakie jest standardowe polecenie, aby to zrobić i czy muszę ustawić jakieś specjalne nazwy serwerów?
Odpowiedzi:
Jeśli serwer jest dobrze skonfigurowany, np. Ma uruchomione 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" your@email.com
man mail
po więcej szczegółów.
sudo apt-get install mailutils
i wybierz witrynę internetową: Poczta jest wysyłana i odbierana bezpośrednio przy użyciu protokołu SMTP. .
Jeśli chcesz czysty i proste podejście w bash, a ty nie chcesz używać cat
, echo
itp, najprostszym sposobem byłoby:
mail -s "subject here" email@address.com <<< "message"
<<<
służy do przekierowania standardowego wejścia. To była część bash przez długi czas.
cat << END
...END | mail -s "subject" test@example.com
Jeśli działają zarówno exim, jak i ssmtp, możesz wpaść w kłopoty. Więc jeśli chcesz po prostu uruchomić proste MTA, aby mieć prostego klienta smtp do wysyłania powiadomień e-mail w celu wezwania pomocy, musisz najpierw wyczyścić wstępnie zainstalowane MTA, takie jak exim lub postfix, i ponownie zainstalować ssmtp.
Wtedy jest to całkiem proste, konfigurowanie tylko 2 plików (revaliases i ssmtp.conf) - patrz dokument ssmtp -, a użycie w skrypcie bash lub bourne jest takie:
#!/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).
Inna opcja w skrypcie 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
jest nadpisywany za każdym razem, gdy używany jest ten skrypt.Ogólnie rzecz biorąc, chciałbyś użyć mail
polecenia, aby wysłać wiadomość za pomocą lokalnego MTA (który dostarczy ją za pomocą SMTP do miejsca docelowego lub po prostu przekieruje ją na jakiś mocniejszy serwer SMTP, na przykład u twojego ISP). Jeśli nie masz lokalnego MTA (chociaż pomijanie go w systemie podobnym do UNIX jest trochę nietypowe), możesz użyć minimalistycznego MTA, takiego jak ssmtp .
ssmtp
jest dość łatwy w konfiguracji. Zasadniczo wystarczy określić, gdzie znajduje się serwer SMTP Twojego dostawcy:
# 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 z niezliczonych skryptów, które po prostu łączą się bezpośrednio z serwerem SMTP i próbują wysłać tam wiadomość, na przykład Smtp-Auth-Email-Script , smtp-cli , SendEmail itp.
Przyznając, że chcesz używać 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
na rzeczywiste wartości, których użyjesz. W tym przykładzie nie jest stosowane żadne szyfrowanie ani uwierzytelnianie.
mailx
nie jest zainstalowany?
mail
Komenda robi (kto by pomyślał ;-). Otwórz powłokę i wprowadź, man mail
aby uzyskać stronę podręcznika dla mail
polecenia ze wszystkimi dostępnymi opcjami.
Nie potrzebujesz nawet MTA. Protokół SMTP jest na tyle prosty, że można go bezpośrednio zapisać 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ższe jest przykładem wysyłania wiadomości tekstowych / html, które będą działać po wyjęciu z pudełka. Jeśli chcesz dodać załączniki, sprawa może być nieco bardziej skomplikowana, będziesz musiał zakodować pliki binarne base64 i osadzić je między granicami. To dobre miejsce do rozpoczęcia badania: http://forums.codeguru.com/showthread.php?418377-Send-Email-w-attachments-using-SMTP
W Linuksie do wysyłania załączników można użyć programu pocztowego z opcją „-a”. Przejrzyj strony podręcznika, aby przeczytać o tej opcji. Na przykład poniższy kod wyśle załącznik:
mail -s "TO JEST TEMAT" -a załącznik.txt nazwa@domena.com <<< "Witaj kolego, znajdź raporty o błędach."
KORZYSTANIE Z POSTFIX
1: zainstaluj oprogramowanie
Debian i Ubuntu:
apt-get update && apt-get install postfix mailutils
OpenSUSE:
zypper update && zypper install postfix mailx cyrus-sasl
Fedora:
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
w konfiguracji wybierz obsługę SASL
make install clean
pkg install mailx
2. Skonfiguruj Gmaila
/ etc / postfix. Utwórz lub edytuj plik haseł:
vim /etc/postfix/sasl_passwd
Używam vim, możesz używać dowolnego edytora plików, takiego jak nano, cat .....
> Ubuntu, Fedora, CentOS, Debian, OpenSUSE, Arch Linux:
Dodaj
gdzie użytkownik zastąpić swojej nazwie pocztowej i hasło to gmail hasło
[smtp.gmail.com]:587 user@gmail.com:password
Zapisz i zamknij plik i udostępnij go tylko rootowi : ponieważ jest to poufna zawartość, która zawiera twoje hasło
chmod 600 /usr/local/etc/postfix/sasl_passwd
> FreeBSD:
katalog / usr / local / etc / postfix.
vim /usr/local/etc/postfix/sasl_passwd
Dodaj linię:
[smtp.gmail.com]:587 user@gmail.com:password
Zapisz i udostępnij tylko dla roota:
chmod 600 /usr/local/etc/postfix/sasl_passwd
3. Konfiguracja Postfix
plik konfiguracyjny main.cf
6 parametrów, które musimy ustawić w Postfixie
Ubuntu, Arch Linux, Debian:
edytować
vim /etc/postfix/main.cf
zmień następujące wartości:
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, które w konfiguracji zostaną ustawione jako puste , aby zapewnić, że nie są używane żadne opcje zabezpieczeń niezgodne z Gmailem .
Zapisz i zamknij
jak dla
OpenSUSE:
vim /etc/postfix/main.cf
modyfikować
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
wymaga również konfiguracji pliku master.cf
modyfikować:
vim /etc/postfix/master.cf
jak przez odkomentowanie tej linii (usuń #)
#tlsmgr unix - - n 1000? 1 tlsmg
Zapisz i zamknij
Fedora, CentOS:
vim /etc/postfix/main.cf
modyfikować
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
modyfikować:
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
zapisz i zamknij to
4. Przetwarzaj plik hasła:
Ubuntu, Fedora, CentOS, OpenSUSE, Arch Linux, Debian:
postmap /etc/postfix/sasl_passwd
za freeBSD
postmap /usr/local/etc/postfix/sasl_passwd
4.1) Uruchom ponownie postfiks
Ubuntu, Fedora, CentOS, OpenSUSE, Arch Linux, Debian:
systemctl restart postfix.service
dla FreeBSD:
service postfix onestart
nano /etc/rc.conf
Dodaj
postfix_enable=YES
zapisz, a następnie uruchom, aby rozpocząć
service postfix start
5. Włącz „Mniej bezpieczne aplikacje” w Gmailu, korzystając z pomocy poniższego linku
https://support.google.com/accounts/answer/6010255
6. Wyślij testową wiadomość e-mail
mail -s "subject" recever@domain.com
naciśnij enter
dodaj treść wiadomości, jak chcesz, naciśnij Enter, a następnie naciśnij ctrl + d, aby zakończyć
jeśli nie działa, sprawdź ponownie wszystkie kroki i sprawdź, czy włączasz „ mniej bezpieczną aplikację” w swoim Gmailu
następnie zrestartuj Postfix, jeśli zmodyfikujesz cokolwiek w tym
dla skryptu powłoki utwórz plik .sh i dodaj polecenie 6-krokowe jako wymaganie
na przykład tylko dla próbki
#!/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
Skrypt wysyła wiadomość e-mail, gdy użycie dysku wzrośnie powyżej wartości procentowej określonej przez wartość THRESHOLD varialbe (tutaj 80%).
możesz użyć polecenia „email” lub „emailx”.
(1) $ vim /etc/mail.rc # lub # 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 "Proszę, pamiętajcie o usunięciu nieużywanych tematów z ons!" | mail -s "marnotrawstwo tematów" -a a.txt developer@xxx.com # wyślij do użytkownika grupy „developer@xxxx.com”