Jak wysłać wiadomość e-mail z wiersza polecenia?

29

Jak wysłać wiadomość e-mail z wiersza polecenia lub skryptu? Chcę móc programowo uruchomić skrypt, przekazując odbiornik i komunikat.

michelemarcon
źródło
Jeśli piszesz program, wiele języków ma biblioteki
obsługujące

Odpowiedzi:

22

mail -s subject [email protected] wpisz swoją wiadomość, naciśnij, Ctrl+Daby zakończyć

vartec
źródło
11
Jeśli nie skonfigurowałeś systemu tak, aby informował go, gdzie ma wysłać wiadomość e-mail, prawdopodobnie tak naprawdę nie wyśle ​​wiadomości e-mail, po prostu położy się na moim komputerze Mac.
TJ Luoma,
15
-1: Ta odpowiedź jest niepełna. O ile system nie został skonfigurowany przed wykonaniem tego polecenia, jak zauważył @TJLuoma, to polecenie nie będzie działać.
melvynkim
1
TJ Luoma i melvkim są niepoprawne: standardowy system OS X od razu wyśle ​​wiadomość e-mail bez potrzeby konfiguracji. Maszyna OS X będzie działać jako własny serwer SMTP, wyszukując DNS MX dla domeny docelowej i wysyłając tam pocztę.
JohnEDee
2
@patrix, poprawnie, używa długiej nazwy użytkownika zalogowanego konta i samodzielnie wygenerowanego adresu „.local” komputera Mac, aby utworzyć „From”. Cały czas używam go do wysyłania powiadomień e-mailom do mnie i moich pracowników z procesów skryptowych. TJ Luoma i melvkim mówili, że „nie zadziała” i „nie wyśle ​​e-maila”, jednak oba są niepoprawne.
JohnEDee
1
@RamarajT, tak, możesz przesłać dane wyjściowe polecenia echo do poczty, a wtedy nie będzie wymagało Cmd-D. Na przykład: echo This will be the body of the email | mail -s "This is the Subject" [email protected]
JohnEDee
26

Są dwa programy, o których wiem, że z łatwością pozwolą Ci skonfigurować komputer Mac do wysyłania wiadomości e-mail z wiersza polecenia.

Dla obu z nich napisałem HOWTO:

Z tych dwóch proponuję msmtp.

Konfiguracja jest na tyle skomplikowana, że ​​nie jestem pewien, czy powinienem zreplikować wszystkie kroki tutaj, ale wspomnę, że jeśli używasz Homebrew , możesz zainstalować msmtp za pomocą

brew install msmtp --with-macosx-keyring

Reszta to tylko kwestia skonfigurowania powiązanych plików konfiguracyjnych

Pierwszy to /usr/local/etc/msmtprc

# Begin msmtprc
# Set default values for all following accounts.
defaults
tls on
logfile ~/.msmtp.log

# A first gmail address
account example@gmail.com
host smtp.gmail.com
port 587
protocol smtp
auth on
from example@gmail.com
user example@gmail.com
tls on
tls_starttls on

# this next line is crucial: you have to point to the correct security certificate for GMail.
# If this doesn't work, check the mstmp documentation
# at http://msmtp.sourceforge.net/documentation.html for help
#
# This next line should all be on one long line:
tls_trust_file /path/to/Thawte Roots/Thawte SSLWeb Server Roots/thawte Premium Server CA/Thawte Premium Server CA.pem

# Set a default account
# You need to set a default account for Mail
account default : example@gmail.com

# end msmtprc

Zauważ, że tls_trust_filewiersz powinien wskazywać, gdziekolwiek pobrałeś i zainstalowałeś certyfikaty z https://www.thawte.com/roots/index.html .

Wstawiam mój, ~/Dropbox/Thawte Rootsaby móc go mieć na wszystkich moich komputerach Mac.

Następnie potrzebujesz ~/.mailrcpliku, aby powiedzieć, gdzie znajduje się plik binarny msmtp. Jeśli brewgo użyjesz , /usr/local/bin/msmtpplik będzie wyglądał następująco:

set sendmail="/usr/local/bin/msmtp"

Ostatnim, ale kluczowym krokiem jest upewnienie się, że Twój pęku kluczy ma informacje dokładnie w formacie, którego oczekuje od msmtp:

Myślę, że dotyczy to większości szczegółów. Zobacz http://www.tuaw.com/2010/05/04/msmtp-a-free-tool-to-send-email-from-terminal/, jeśli chcesz uzyskać więcej informacji.

TJ Luoma
źródło
Oczywiście moje przykłady w powyższym skrypcie zakładają, że używasz Gmaila, ale można go również używać na innych serwerach. Zmień [email protected]na adres e-mail Gmaila lub Google Apps.
TJ Luoma,
W końcu udało mi się to uruchomić, korzystając z Google Roots dostępnych tutaj: pki.google.com/roots.pem . Jeśli utkniesz w problemach z plikiem zaufania i Gmailem, może Cię odblokować.
kodem
Jeśli masz problemy z lokalizacją pliku config (msmtprc), po instalacji z Homebrew na macOS 10.13.3, msmtp szukał go w moim katalogu domowym: ~/.msmtprc
codewise
15

Najbardziej podstawowym sposobem wysyłania poczty jest sesja telnet z serwerem smtp twojego dostawcy / sieci. Po skontaktowaniu się z serwerem i po każdym poleceniu serwer odpowie, jeśli przyjmie polecenie, np. „250 OK” lub komunikat o błędzie nie.

Wszystkie szczegóły można znaleźć w RFC2821 - Simple Mail Transfer Protocol, Google dla niego. Ten podstawowy sposób jest świetny do testowania, dlaczego coś idzie nie tak podczas wysyłania poczty, ale myślę, że dość skomplikowane jest napisanie pełnego dowodu.

Najpierw uzyskaj interfejs wiersza polecenia na swoim komputerze, uruchamiając Terminal. Następnie wykonaj następujące polecenia, jeden po drugim.

Otwórz sesję telnet do portu 25 serwera smtp twojego dostawcy / sieci

telnet name_or_ip_of_smtp_server 25

przywitaj się i nazwa internetowa Twojego dostawcy / sieci, np. abc.com

EHLO name_of_your_network

potrzebny jest adres zwrotny od =, <i> są częścią polecenia

MAIL FROM:<your_email_adress>

podaj jedno lub więcej miejsc docelowych, <i> są częścią polecenia

RCPT TO:<destination_email_address>
RCPT TO:<second_destination_email_address>
RCPT TO:<etc_destination_email_address>

powiedz serwerowi, że chcesz rozpocząć wysyłanie danych

DATA

teraz serwer powinien odpowiedzieć, możesz rozpocząć wysyłanie poczty i przejść do trybu danych

your data
more data
etc

teraz zakończ dane kropką jako znakiem tylko na linii

.

serwer wraca do trybu poleceń, więc możesz wyjść

QUIT
Henry vM
źródło
13

To działało dla mnie, zostało napisane z myślą o Lionie, ale działa dla Mountain Lion. Przy okazji używa Gmaila, więc jeśli nie jesteś ...

Nie musisz niczego pobierać! (wystarczy skonfigurować konto Gmail)

http://www.anujgakhar.com/2011/12/09/using-macosx-lion-command-line-mail-with-gmail-as-smtp/

Skonfiguruj Postfix dla Gmaila SMTP Edytuj plik /etc/postfix/main.cf

sudo vim /etc/postfix/main.cf

i dodaj poniżej poniższe komentarzehosthosts: -

relayhost = [smtp.gmail.com]:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_use_tls = yes
smtp_sasl_mechanism_filter = plain

Wygeneruj hasło sasl, jeśli jeszcze nie istnieje

sudo vim /etc/postfix/sasl_passwd

i wprowadź następujące dane:

[smtp.gmail.com]:587 username@gmail.com:password

Uruchom następujące polecenia

sudo chmod 600 /etc/postfix/sasl_passwd
sudo postmap /etc/postfix/sasl_passwd
sudo launchctl stop org.postfix.master
sudo launchctl start org.postfix.master

I skończysz…
Teraz powinieneś być w stanie wysyłać wiadomości e-mail z poziomu wiersza poleceń, np. Aby wysłać zawartość katalogu jako drzewa na adres e-mail

tree /var/www/somefolder | mail -s "contents" your@yourdomain.com
Jonny
źródło
PS: Mam to świetnie działające, gdy uruchamiam to ręcznie z terminala lub w skryptach. Jednak w tym momencie mam problem z tym, że wiadomości e-mail nigdy nie są wysyłane po uruchomieniu skryptu. Myślę, że to problem z uruchomioną konfiguracją zadania.
Jonny
Mam to działa. Zobacz apple.stackexchange.com/questions/92406/…
Jonny
+1 Dziękujemy za dodanie tego. Naprawdę mi pomógł. Jedyne, czego naprawdę potrzebowałem, to wpis przekaźnika hosta w main.conf (to mój własny serwer SMTP w mojej sieci LAN).
boot13
3
Powyższe może być nieaktualne. Musiałem dodać „smtp_sasl_mechanism_filter = plain” zgodnie z stackoverflow.com/a/26451135/197789, aby go uruchomić. W przeciwnym razie dostaję błąd „ogólnej awarii”.
Von
0

Możesz sprawdzić postfixconf, który włącza i konfiguruje OS X do wysyłania wiadomości e-mail z wiersza poleceń (przy użyciu danych wejściowych).

Opiera się na konfiguracji Postfiksa, która jest dobrze udokumentowana w Internecie tutaj , tutaj i tutaj .

rubel
źródło
-3

Ponieważ jest oparty na Uniksie, możesz użyć polecenia sendmail .

Pierre Watelet
źródło
-1: sendmail to polecenie serwera SMTP
vartec