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?
Co tutaj oznacza „mta”, czy jest tam imię i nazwisko lub link? Jako początkujący chcę to wiedzieć. Ponieważ brakuje mi doświadczenia.
Zen
5
@Zen MTA to skrót od Mail transport agent. postfix, sendmail, qmail itp.
Francesco Laurita,
@Zen w przeważającej części można uznać, że MTA oznacza serwer SMTP lub IMAP.
user151841
1
Jeśli nie masz pewności, jak zainstalować / skonfigurować i korzystasz z systemu Ubuntu: sudo apt-get install mailutilsi wybierz witrynę internetową: Poczta jest wysyłana i odbierana bezpośrednio przy użyciu protokołu SMTP. .
user1717828
86
Jeśli chcesz czysty i proste podejście w bash, a ty nie chcesz używać cat, echoitp, 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.
Hej, to działało świetnie dla mnie, dzięki! Jak określić wiele adresów, na które mają być dostarczane przesyłki?
E. Owen
1
@ E.Owen Możesz użyć opcji -t, aby wysłać do wielu adresów oddzielonych spacjami
Jon
25
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).
Gdzie mogę zmienić numer portu w tym skrypcie? Na moim serwerze port smtp działa na 8181.
manix
Nie zrobiłbym tego w tej powłoce, inaczej utkniesz prędzej czy później. Możesz to zrobić w pliku konfiguracyjnym: Zobacz unix.stackexchange.com/a/132731
hornetbzz
1
Dlaczego nowe wiersze są zapisywane, jeśli wykonuję proste echo $ MAIL_TXT?
KernelPanic
1
@Marko: Pls zobacz man echo z opcją -e: włącz interpretację ucieczki z ukośnikiem odwrotnym
odrzucony, ponieważ więcej niż jeden proces może wywołać skrypt w tym samym czasie. Może to spowodować uszkodzenie / niepoprawny plik tmp. Również plik / tmp nie jest nadpisywany za każdym razem, gdy jest używany - w rzeczywistości rośnie wraz z każdą wiadomością e-mail zawierającą wszystkie poprzednie wiadomości e-mail w środku. Niedobrze.
Taterhead
1
Pierwszy zapis do / tmp / mailtest to nadpisanie, więc usunie to, co było tam wcześniej. Jednak ta metoda nie jest idealna z innych powodów, które opisałeś.
Simon
8
Ogólnie rzecz biorąc, chciałbyś użyć mailpolecenia, 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 .
ssmtpjest 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.
Zmień somehost, someporti someaccount@somedomainna rzeczywiste wartości, których użyjesz. W tym przykładzie nie jest stosowane żadne szyfrowanie ani uwierzytelnianie.
mailKomenda robi (kto by pomyślał ;-). Otwórz powłokę i wprowadź, man mailaby uzyskać stronę podręcznika dla mailpolecenia ze wszystkimi dostępnymi opcjami.
Zrobiłem to, ale nie ma opcji, aby określić serwer do użycia
appshare.co
1
Jest to część konfiguracji lokalnego agenta przesyłania poczty, np. Sendmail lub Postfix.
DarkDust
2
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 [email protected] <<< "Witaj kolego, znajdź raporty o błędach."
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 .
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=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
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%).
Czy nazwa tej odpowiedzi nie powinna brzmieć „WYŚLIJ POCZTĘ Z LINUXA NA [email protected] VIA GMAIL”?
Cameron Hudson
1
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 addressset smtp-auth-password = xxxxxxx #get from gmail, not your email account passwdset smtp-auth=login
Ponieważ jeśli nie zostanie wysłany z autoryzowanego konta, e-mail trafi na listę wiadomości-śmieci.
(2) $ echo "Proszę, pamiętajcie o usunięciu nieużywanych tematów z ons!" | mail -s "marnotrawstwo tematów" -a a.txt [email protected] # wyślij do użytkownika grupy „[email protected]”
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ć:
man mail
po więcej szczegółów.źródło
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:<<<
służy do przekierowania standardowego wejścia. To była część bash przez długi czas.źródło
cat << END
...END | mail -s "subject" [email protected]
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:
Oczywiście nie zapomnij otworzyć wyjścia firewalla na port smtp (25).
źródło
Inna opcja w skrypcie bash:
/tmp/mailtest
jest nadpisywany za każdym razem, gdy używany jest ten skrypt.źródło
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: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.
źródło
Przyznając, że chcesz używać jakiegoś serwera smtp, możesz zrobić:
Zmień
somehost
,someport
isomeaccount@somedomain
na rzeczywiste wartości, których użyjesz. W tym przykładzie nie jest stosowane żadne szyfrowanie ani uwierzytelnianie.źródło
mailx
nie jest zainstalowany?mail
Komenda robi (kto by pomyślał ;-). Otwórz powłokę i wprowadź,man mail
aby uzyskać stronę podręcznika dlamail
polecenia ze wszystkimi dostępnymi opcjami.źródło
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
źródło
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 [email protected] <<< "Witaj kolego, znajdź raporty o błędach."
źródło
WYŚLIJ POCZTĘ Z LINUXA NA GMAIL
KORZYSTANIE Z POSTFIX
1: zainstaluj oprogramowanie
Debian i Ubuntu:
OpenSUSE:
Fedora:
CentOS:
Arch Linux:
FreeBSD:
w konfiguracji wybierz obsługę SASL
2. Skonfiguruj Gmaila
/ etc / postfix. Utwórz lub edytuj plik haseł:
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
Zapisz i zamknij plik i udostępnij go tylko rootowi : ponieważ jest to poufna zawartość, która zawiera twoje hasło
> FreeBSD:
katalog / usr / local / etc / postfix.
Dodaj linię:
Zapisz i udostępnij tylko dla roota:
3. Konfiguracja Postfix
plik konfiguracyjny main.cf
6 parametrów, które musimy ustawić w Postfixie
Ubuntu, Arch Linux, Debian:
edytować
zmień następujące wartości:
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:
modyfikować
wymaga również konfiguracji pliku master.cf
modyfikować:
jak przez odkomentowanie tej linii (usuń #)
Zapisz i zamknij
Fedora, CentOS:
modyfikować
FreeBSD:
modyfikować:
zapisz i zamknij to
4. Przetwarzaj plik hasła:
Ubuntu, Fedora, CentOS, OpenSUSE, Arch Linux, Debian:
za freeBSD
4.1) Uruchom ponownie postfiks
Ubuntu, Fedora, CentOS, OpenSUSE, Arch Linux, Debian:
dla FreeBSD:
Dodaj
zapisz, a następnie uruchom, aby rozpocząć
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
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
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%).
źródło
możesz użyć polecenia „email” lub „emailx”.
(1) $ vim /etc/mail.rc # lub # vim /etc/nail.rc
Ponieważ jeśli nie zostanie wysłany z autoryzowanego konta, e-mail trafi na listę wiadomości-śmieci.
(2) $ echo "Proszę, pamiętajcie o usunięciu nieużywanych tematów z ons!" | mail -s "marnotrawstwo tematów" -a a.txt [email protected] # wyślij do użytkownika grupy „[email protected]”
źródło