niezależnie od tego, czy jesteś programistą pracującym non-stop w wierszu poleceń Linuksa, czy administratorem serwera, który chce logi lub inne dane pobrane z administrowanych systemów, wiedza, jak wysyłać wiadomości e-mail z wiersza poleceń jest bardzo przydatna.
w tym poście znajdziesz przykłady wysyłania wiadomości e-mail z terminala. Przyjrzymy się niestandardowym konfiguracjom i omówimy, jak skonfigurować połączenia SMTP z kontami e-mail lub dostawcami usług e-mail., Pokażę Ci jak zainstalować niezbędne pakiety konsoli Mailera i udostępnić tło dla opcji wiersza poleceń opartych na podręcznikach pakietu.
Konfigurowanie pakietów Mailerów z wiersza poleceń
wszystkie pakiety mailerów w całym tutorialu są dostępne za pośrednictwem Zaawansowanego menedżera pakietów Debiana, więc kroki instalacji przedstawione w poniższym przykładzie mogą być użyte dla wszystkich prezentowanych pakietów.,
należy pamiętać, że te elementy oprogramowania mogą być instalowane przez inne domyślne Menedżery pakietów, takie jakyum
lub dnf
w zależności od dystrybucji systemu Linux.
w większości przypadkówsendmail
lubpostfix
jest dostępny w każdej dystrybucji Linuksa od ręki lub przynajmniej tak mówią podobne posty na blogu. Albo mam pecha, albo inni się mylili, ale musiałem zainstalować jeden ręcznie. Jednak na pewno potrzebujesz jednego z nich do wysyłki e-mail.,
Konfigurowanie Sendmaila z pakietem SSMTP
będę kontynuowałsendmail
I pakiet SSMTP. SSMTP zawiera sendmail
pakiet pod maską, jak zobaczysz i ułatwia konfigurację, co jest dość trudne dla sendmail
w przeciwnym razie.
Krok 1., Sprawdź, czy pakiet Mailera z linii poleceń jest zainstalowany
wpisz nazwę pakietu Mailera tak, jak chcesz uruchomić polecenie, aby sprawdzić, czy jest dostępne:
-
Jeśli Pakiet jest zainstalowany, polecenie zostanie uruchomione, a znak zachęty zmieni się — podczas próby wykonania polecenia — i zobaczysz migający kursor, a następnie wiadomość
Recipient names must be specified
w przypadkusendmail
. Wniosek: Pakiet jest zainstalowany., -
jeśli pakiet nie jest zainstalowany, otrzymasz komunikat ostrzegawczy i sugestię, jak go zainstalować:
w tym przykładzie próbowałem, czy poleceniesendmail
działa. Po dodaniu pakietu SSMTP to polecenie i polecenie ssmtp
będą działać i zmienią wiersz polecenia w terminalu. Spójrzmy na to!
Krok 2., Instalowanie pakietu Mailera z linii poleceń Sendmail
tak jak sugerowało to wyjście terminala, musimy uruchomić polecenie install Advanced Package Manager-zwykle z uprawnieniami roota – aby zainstalować potrzebny pakiet. Jak wspomniano wcześniej, konfiguracje są znacznie prostsze dla sendmail
, gdy usuniesz złożoność konfiguracji. Można to zrobić za pomocą SSMTP:
sudo apt install ssmtp
Krok 3. Sprawdź instalację
Po zakończeniu instalacji możesz sprawdzić, czy sendmail
jest w stanie przekazywać wiadomości., Wpisz poniższy kod w terminalu:
echo "Subject: hello" | sendmail [email protected]
powinien wysłać e-mail, jeśli wszystko działa poprawnie. Tutaj"hello"
ciąg przesłany do poleceniasendmail
będzie tematem wysłanej wiadomości, podczas gdy zdefiniowany adres e-mail jest oczywiście odbiorcą wiadomości.
uruchamiasz komendę… i, oops: sendmail: Cannot open mailhub:25
. Powodem tego jest to, że w ogóle nie zapewniliśmy ustawień mailhub. Aby przesłać wiadomości, potrzebujesz skonfigurowanego serwera SMTP., W tym miejscu SSMTP działa naprawdę dobrze: wystarczy raz edytować jego plik konfiguracyjny i gotowe.
Krok 4. Konfiguracja SSMTP
zlokalizujmy plik konfiguracyjny pod adresem /etc/ssmtp/ssmtp.conf
. W tym miejscu powinieneś umieścić poniższy kod, aby skonfigurować przekaźnik SMTP:
oznacza to, że skonfigurowałeś zewnętrzną usługę, która faktycznie będzie przesyłać
twoje e-maile. Na przykład, gdy podasz dane uwierzytelniające do Gmaila, zobaczysz wiadomości wysłane z terminala w katalogu „wysłana poczta” swojej skrzynki pocztowej. Konfiguracje wyglądają podobnie z innymi usługami.,
była to podstawowa konfiguracja dla sendmail
oraz kroki instalacji dla każdego często używanego pakietu Mailera wiersza poleceń. Następnie przejdziemy do instalacji i wypróbowania różnych innych pakietów.
wysyłanie wiadomości e-mail za pomocą polecenia SSMTP
jest to ładne małe narzędzie, które właśnie skonfigurowaliśmy do dostarczania poczty. Jak sugeruje strona man
, jest to minimalistyczny emulator sendmail
. Jako taki, SSMTP pozwala użytkownikom na przesyłanie wiadomości e-mail za pośrednictwem serwera SMTP z linii poleceń systemu Linux., Zapewnia środki do łączenia się z mailhub za pomocą odpowiedniego pliku konfiguracyjnego. Jeśli Twój plik konfiguracyjny został skonfigurowany poprawnie, wszystkie twoje obawy dotyczące wysyłania wiadomości e-mail z linii poleceń mogą zniknąć.
Podstawowa implementacja polecenia SSTMP:
Jeśli używasz tylko SSMTP, polecenie powinno wyglądać następująco:
ssmtp [email protected] < mail.txt
Po wykonaniu poleceniassmtp
powinieneś podać adres odbiorcy, a następnie możesz dołączyć plik, który pojawi się w treści wiadomości e-mail. Tutaj możesz zdefiniować nagłówki wiadomości, wymienić kolejnych odbiorców i ustawić typ treści., W ten sposób możesz wysyłać e-maile HTML. SSMTP zinterpretuje Twoją wiadomość i poprawnie użyje podanych wartości. Oto przykład HTML, który możesz wysłać:
tak naprawdę nie możesz podać dalszych opcji z SSMTP, ponieważ nie są one respektowane przez jego minimalistyczny design.
Rozwiązywanie problemów:
w przypadku wystąpienia następującego błędu w wierszu poleceń:
jest to prawdopodobne, ponieważ Gmail nie traktuje SSMTP jako bezpiecznej aplikacji. Aby pozbyć się tego błędu, musisz zmienić ustawienia na koncie Gmail – możesz tam również znaleźć więcej informacji na temat potencjalnych zagrożeń.,
wysyłanie wiadomości e-mail za pomocą polecenia Sendmail
od dłuższego czasu sendmail jest klasycznym agentem pocztowym ze świata Uniksa. Został po raz pierwszy wprowadzony w 1979 roku, a jego wysoce konfigurowalny charakter i skalowalność uczyniły go domyślnym go-to dla administratorów serwerów.,
widzieliśmy już, jak wysyłać podstawowe wiadomości e-mail za pomocą polecenia ssmtp
, więc zobaczmy różnicę za pomocą sendmail
:
echo "Subject: hello" | sendmail -v [email protected] < mail.txt
wrzuciłem -v
argument, który sprawi, że komunikacja między serwerem pocztowym a twoim agentem pocztowym będzie widoczna.
istnieje wiele konfiguracji, których możesz użyć, jeśli skonfigurujesz własny serwer pocztowy i zaimplementujesz na nim sendmaila. Nie wchodzi to jednak w zakres niniejszego artykułu. Powrócimy do tematu w nadchodzącym. Zostańcie z nami.,
wysyłanie wiadomości e-mail za pomocą polecenia CURL
To narzędzie jest również niezwykle powszechne do przesyłania danych z serwera. Obsługuje wiele protokołów, takich jak HTTP, FTP, POP3 lub SMTP. Pakiet CURL jest szeroko stosowany na całym świecie, jednym z głównych powodów jest to, że ma natywną implementację PHP i PHP był przez długi czas domyślnym językiem skryptowym po stronie serwera.
Instalacja:
sprawdź, czy pakiet jest już zainstalowany., Jeśli nie uruchomić poniżej:
sudo apt install curl
Kiedy skończysz, możesz uzyskać dostęp do ściągawki dla dostępnych opcji CURL, uruchamiająccurl -h
. Bardziej szczegółowa wersja jest dostępna przez man curl
lubcurl --manual
. Jeśli chcesz zdobyć dogłębną wiedzę za pomocą cURL, jest ten poręczny Ebook, który zawiera wszystko, co chciałbyś wiedzieć.
podstawowa implementacja do wysyłania wiadomości e-mail z CURL:
aby wysłać wiadomość e-mail z CURL, musisz skonfigurować połączenie SMTP., Najczęściej serwery poczty wychodzącej Google lub Yahoo są używane do testowania wysyłania wiadomości e-mail za pomocą SMTP. Należy pamiętać, że należy włączyć Dostęp dla mniej bezpiecznych aplikacji w ustawieniach Gmaila, a podobne dodatkowe ustawienia zabezpieczeń mogą mieć zastosowanie również do Yahoo.
w powyższym fragmencie polecenia terminal parametry--url
I--user
definiują ustawienia połączenia SMTP. Sekcja hasło dla parametru--user
jest hasłem Twojego konta dla podanego adresu e-mail. Oczywiście możesz również skorzystać z dostawców usług poczty e-mail w chmurze., Pokażę to za pomocą Mailgun w poniższej sekcji.
zaawansowana implementacja do wysyłania wiadomości e-mail za pomocą CURL:
pracując z platformami dostarczania wiadomości e-mail, najpierw musisz uzyskać klucz API. W tym samouczku pokażę curl e-mail wysyłanie przykład za pomocą Mailgun, więc jeśli utkniesz podczas procesu rejestracji postępuj zgodnie z tym przewodnikiem konfiguracji, aby dostać się na właściwą ścieżkę.
składnia jest dość prosta. Być może zauważyłeś wcześniej, ale musisz zakończyć każdą linię polecenia znakami \
., Jest to znak kontynuacji linii, polecenie może być uruchamiane bez nich wszystkich w jednej linii, jak również. Inną rzeczą do zapamiętania jest opcja -F
. Fragment strony podręcznika:
-F, --form <name=content> (HTTP) This lets curl emulate a filled-in form in which a user has pressed the submit button. This causes curl to POST data using the Content-Type multipart/form-data according to RFC 2388. This enables uploading of binary files etc. To force the 'content' part to be a file, prefix the file name with an @sign.
jak zachęcałem wcześniej, dobrą praktyką jest zanurzenie się w podręcznikach podczas korzystania z tych poleceń Mailera z linii poleceń. Jak mówi instrukcja CURL, zasadniczo tworzysz formularz do wysłania. Każda linia jest wpisem podanym jako para name=content
. Gdy załączasz pliki z lokalnego komputera, potrzebujesz @
przed nazwą pliku.,
tak będzie wyglądać dostarczona wiadomość e-mail:
Możesz zrobić to samo za pomocą większości innych platform dostarczania wiadomości e-mail, takich jak na przykład Sendgrid.
wysyłanie wiadomości HTML z wiersza poleceń za pomocą CURL:
Możesz zastosować tę samą logikę budowania formularza w pliku tekstowym, co umożliwia łatwe wysyłanie wiadomości HTML:
jeśli uruchomisz proste polecenie z pierwszego przykładu…
Rozwiązywanie problemów:
możesz potrzebować przełącznika--insecure
, który pozwala CURLOWI wykonywać „niebezpieczne” połączenia SSL i transfery., Program CURL zwróci komunikat o błędzie, jeśli serwer zdalny używa certyfikatu z podpisem własnym lub jeśli certyfikat serwera zdalnego nie jest podpisany przez urząd certyfikacji wymieniony w pliku CA cert.
wysyłanie wiadomości e-mail za pomocą polecenia Swaks
zgodnie z dokumentacją Swaks jest elastycznym, skryptowym, zorientowanym na transakcje narzędziem testowym SMTP. Jest w stanie obsługiwać funkcje i rozszerzenia SMTP, takie jak TLS, uwierzytelnianie i pipelining oraz wiele wersji protokołów SMTP. Obsługuje również wiele metod transportu, w tym gniazda domeny UNIX, gniazda domeny internetowej i rury do procesów spawanych.,
Instalacja:
sudo apt install swaks
podstawowa implementacja do wysyłania wiadomości e-mail za pomocą Swaks:
aby połączyć się z kontem SMTP, musisz podać serwer -s
, użytkownik -au
, hasło -au
=”4bbc7696fd”> I ADRES-t
(gdzie chcesz wysłać pocztę) flagi. Flaga -tls
jest również ważna, jeśli łączysz się na porcie 587
.,
swaks --to [email protected] -s smtp.gmail.com:587 -tls -au <user-account> -ap <account-password>
poświadczenia mogą być również dostarczane za pomocą monitów wiersza poleceń, jeśli tylko określisz uwierzytelnienie-a
, Nie wypełniając użytkownika i hasła za pomocą opcji wiersza poleceń.
zaawansowana implementacja do wysyłania wiadomości e-mail za pomocą Swaks:
swaks --to [email protected] -s smtp.gmail.com:587 -tls -au <user-account> -ap <account-password> --attach -d ./mail.txt
są inne opcje, których nie będziemy teraz dotykać. Przejdźmy do następnego pakietu Mailera!
wysyłanie wiadomości e-mail za pomocą polecenia Mutt
Mutt różni się od poprzednich klientów poczty e-mail, ponieważ jest bogatym w funkcje klientem poczty e-mail z wierszem poleceń., Można go używać do odczytu wiadomości e-mail z terminala Linuksa, łączenia się z lokalnymi skrzynkami pocztowymi użytkowników lub z serwerami POP/IMAP. Mutt obsługuje kilka formatów skrzynek pocztowych, takich jak mbox, MH, maildir, MMDF, pełną kontrolę nad nagłówkami wiadomości podczas kompozycji wiadomości e-mail oraz wiele tagów i kolorów Wiadomości do obsługi wiadomości.
Instalacja:
sudo apt install mutt
Podstawowa implementacja do wysyłania wiadomości e-mail z mutt:
do tego czasu nie będziesz zaskoczony strukturą polecenia., Możesz podać pustą treść wiadomości za pomocą< /dev/null
:
# mutt -s "Test Email" [email protected] < /dev/null
zaawansowana implementacja do wysyłania wiadomości e-mail z mutt:
aby wysyłać wiadomości e-mail z załącznikami, potrzebujesz flagi-a
. W ten sposób możesz wysyłać przydatne pliki, takie jak logi systemowe, pod wskazany adres.
# mutt -s "System logs" -a /opt/backup.sql [email protected] < /dev/null
Możesz również wysłać wiadomość HTML, jeśli rozszerzenie pliku, które dodajesz do treści wiadomości, jest w formacie HTML., Mutt rozpoznaje typ pliku i rozwiązuje go, aby nie wysyłał kodu HTML jako zwykłego tekstu:
mutt -s "Email subject" [email protected] < email.html
To jest to do wysyłania wiadomości e-mail z mutt. Jeśli masz go na swoim komputerze, proponuję wypróbować, jak możesz pracować z przychodzącymi konfiguracją skrzynki pocztowej i obsługą przychodzących wiadomości. Jeśli to zrobisz, podziel się swoimi przemyśleniami w sekcji komentarzy poniżej. Mile widziane są wszelkie opinie na temat pakietów pokazanych w tutorialu.
wysyłanie wiadomości e-mail za pomocą polecenia Mailx
Mailutils jest pakietem złożonym do wielu zastosowań., Został zaprojektowany, aby służyć zwykłym użytkownikom, administratorom systemu i programistom. Poruszymy tylko jego podstawowe funkcje dotyczące przekazywania wiadomości e-mail. Jeśli jesteś zainteresowany więcej funkcji, sprawdź jegoman
strona.
Instalacja:
sudo apt install mailutils
Podstawowa implementacja do wysyłania wiadomości e-mail za pomocą mailx:
pakiet mailx ma 2 równe składnie poleceń (mail
I mailx
oba działają dokładnie w ten sam sposób)., Najbardziej uproszczone polecenie składa się z polecenia mail/mailx
I adresu, na który ma być wysłana wiadomość, ale prawdopodobnie zawiera temat i przynajmniej treść wiadomości tekstowej. Takie polecenie powinno wyglądać tak:
echo "message body" | mail -s "subject" [email protected]
używając polecenia echo
I przesyłając wyjście do polecenia mail
możesz uniknąć dodatkowych monitów mailx dotyczących adresów Cc i treści wiadomości.,
zaawansowana implementacja do wysyłania wiadomości e-mail za pomocą mailx:
w przypadku zaawansowanego przykładu ponownie wyślemy pełnoprawny e-mail HTML. Musimy podać wybrany przez nas plik HTML e-mail ze znakiem <
I dodać „append flag” z typem zawartości. Pełny kod wygląda następująco:
mailx -a 'Content-Type: text/html' -s "This is advanced mailx indeed!" < email.html "[email protected], [email protected]"
Możesz również ustawić adres zwrotny za pomocą --return-address=<EMAIL-ADDRESS>
, co może być przydatne., Inną użyteczną opcją, której nie mogłem rozwiązać, aby pracować równolegle z pocztą HTML, jest dostarczenie załączników w tej samej wiadomości: -A "mail.txt"
. Chociaż można wymienić wielu odbiorców, można dołączyć tylko jeden załącznik. Możesz skonfigurować zewnętrzny serwer SMTP, jeśli tak ci się podoba.
używanie alternatywnego polecenia OpenSSL Telnet
Telnet jest interaktywnym protokołem komunikacyjnym do komunikacji z innym hostem. Może być używany do otwierania połączenia SMTP z innym serwerem i przesyłania wiadomości e-mail., Ponieważ jednak protokół nie jest zabezpieczony, większość serwerów odrzuci ten typ komunikacji. To właśnie tutaj pojawia się Openssl, ponieważ jest zbudowany z zabezpieczeniami SSL/TLS. Jest wywoływany podobnie jak telnet z argumentem host i wykonuje polecenie open domyślnie:
wciąłem wejścia, które musisz podać, gdy kanał komunikacyjny jest otwarty. Te dane wejściowe są oczywiste, ale jedną rzeczą, którą muszę szczegółowo opisać, jest hash hasła. Może to być zakodowany hash base64, który można uzyskać za pomocą następującego polecenia: echo -en '\[email protected]\000gmailpassword' | base64
., Znaków specjalnych z łańcucha nie można pominąć. Jeśli nie masz zainstalowanego pakietu base64, jest on dostępny za pośrednictwem menedżerów pakietów.
jak widać powyżej, ten sposób wysyłania wiadomości e-mail zapewnia tylko interfejs dla wiadomości tekstowych, dlatego ma swoje ograniczenia w przypadkach użycia. Z drugiej strony, pokazuje wszystkie informacje wymieniane z serwerem pocztowym, co sprawia, że debugowanie jest naprawdę łatwe.
Rozwiązywanie problemów z pocztą
sprawdź dzienniki poczty
musisz zlokalizować plik dziennika, przechodząc do odpowiedniego folderu. Wolę używać mojego edytora kodu (np., Sublime Text) w tym celu mogę mieć logi z podświetlaniem składni:
$ sudo subl /var/log
w zależności od bieżącej dystrybucji Linuksa może być konieczne zajrzenie do innego źródła.
dziennik może zawierać przydatne informacje o problemach z dostarczaniem. W tym momencie, po przewinięciu do dołu tej pozycji:
Możesz sprawdzić, czy dostawa powiodła się lub zrozumieć, dlaczego proces się nie powiódł.,
może się zdarzyć, że konsola nie wyświetla żadnych błędów, ale w dzienniku poczty widać, że wiadomość była w kolejce do dostarczenia, więc proces nie zatrzymał się na twoim komputerze, ale prawdopodobnie został odrzucony przez serwer pocztowy, do którego próbowałeś dotrzeć.
uruchamianie wszystkich poleceń w sekwencji
więc wszystko jest gotowe do końcowego testu. Wszystkie polecenia terminala Mailera są tutaj zebrane w pliku skryptu. Po pobraniu folderu roboczego z plikiem skryptu, przejdź do folderu zawierającego i Utwórz skrypt wykonywalny: chmod u+x mail.sh
., Jeśli masz gotowe wszystkie podane przeze mnie pliki, możesz rozpocząć testowanie poleceń Mailera pokazanych w samouczku. Wystarczy wymienić "<RECIPIENT ADDRESS>"
na swój testowy adres e-mail w kodzie i uruchomić ./mail.sh
w wierszu poleceń.
Po uruchomieniu skryptu Twoja skrzynka odbiorcza zostanie wypełniona testowymi e-mailami.
Brawo!
podsumowanie
w tym artykule pokazałem ci wiele sposobów wysyłania wiadomości e-mail z linii poleceń Linuksa. Mam nadzieję, że na podstawie tego, co widziałeś, możesz zainstalować i skonfigurować te usługi również na swoim komputerze.,
w poście pokazano najczęściej używane Pakiety mailerów z linii poleceń oraz sposób wysyłania z nimi maili, a na koniec stworzyłem skrypt powłoki, który zbiera wszystkie polecenia użyte w artykule. Możesz pobrać pliki robocze projektów tutaj, a jeśli zainstalujesz Pakiety wprowadzone w samouczku, a także wypełnisz swoje poświadczenia i dane odbiorcy, możesz uruchomić skrypt w wolnym czasie.