Jak wysłać e-mail z terminala?

169

Wiem, że istnieją sposoby na wysyłanie wiadomości e-mail z terminala w systemie Linux / MacOS, ale nie mogę znaleźć odpowiedniej dokumentacji, jak to zrobić.

Zasadniczo potrzebuję go do mojego skryptu bash, który powiadamia mnie za każdym razem, gdy następuje zmiana w pliku.

NoobDev4iPhone
źródło
3
Należy tu prawdopodobnie zauważyć, że niektórzy hosty i dostawcy usług internetowych „wyłączają” możliwość wysyłania wiadomości e-mail. Przypuszczam, że jest to próba powstrzymania ludzi przed spamowaniem i phishingiem za ich pośrednictwem
Jim Jeffries,
@JimJeffries Które z nich? Używam serwera internetowego Amazon EC2.
ckjbgames

Odpowiedzi:

125

Wejdź do Terminala i wpisz man mailpomoc.

Musisz skonfigurować SMTP:

http://hints.macworld.com/article.php?story=20081217161612647

Zobacz też:

http://www.mactricksandtips.com/2008/09/send-mail-over-your-network.html

Na przykład:

mail -s "hello" "[email protected]" <<EOF
hello
world
EOF

Spowoduje to wysłanie wiadomości e-mail na adres [email protected]z tematem helloi wiadomością

dzień dobry

Świat

gadgetmo
źródło
Właśnie spróbowałem i zadziałało, ale z ciekawości mam dwa pytania. Co oznacza <<, w Internecie widziałem kilka przykładów ze znakami „<” lub „<<. ' Do czego jest to używane? I dlaczego podałeś End Of File tam i na końcu wiadomości?
Głęboki
„<< EOF” i „EOF” oznaczają „dokument tutaj”. Tekst pomiędzy dwoma EOF jest traktowany jako ciąg wielowierszowy. Jest to opisane w
``
134
echo "this is the body" | mail -s "this is the subject" "to@address"
earldouglas
źródło
20
Zauważ, że wszystkie te rozwiązania zakładają, że masz lokalnie zainstalowaną MTA
Miquel
11
@Miquel dobra uwaga. W Ubuntu wymagania wstępne można uzyskać za pośrednictwem sudo apt-get install mailutils.
earldouglas
3
@James, To nie działa dla mojego MAC (((Czy możesz mi pomóc?
neo
1
Samouczek krok po kroku: rianjs.net/2013/08/…
Dušan Maďar
Dziwne. W ten sposób otrzymuję komunikat „SyntaxError: invalid syntax”, chociaż jedyną zmianą, jaką wprowadziłem, była zmiana adresu.
Jewenile,
41

Jeśli potrzebujesz tylko wiersza tematu (jak w wiadomości ostrzegawczej), po prostu wykonaj:

mailx -s "This is all she wrote" < /dev/null "myself@myaddress"
JRFerguson
źródło
Może być konieczna instalacja mailutils. Można go zainstalować przez menedżera pakietów (np. apt install mailutils)
Jeevan Takhar
31

Chyba najprościej jest do tego wykorzystać curl, nie ma potrzeby instalowania żadnych dodatkowych pakietów i można to skonfigurować bezpośrednio w żądaniu.

Oto przykład użycia serwera smtp Gmaila:

curl --url 'smtps://smtp.gmail.com:465' --ssl-reqd \
  --mail-from '[email protected]' \
  --mail-rcpt '[email protected]' \
  --user '[email protected]:YourPassword' \
  -T <(echo -e 'From: [email protected]\nTo: [email protected]\nSubject: Curl Test\n\nHello')
Aliaksandr Sushkevich
źródło
To naprawdę dobra opcja. Możesz wygenerować hasło specyficzne dla aplikacji dla swojego konta Google, a to spowoduje dostarczenie wiadomości e-mail z Twojego konta. Bardzo fajny!
dakdad
2
Świetna odpowiedź, na koniec nie zapomnij włączyć mniej bezpiecznej aplikacji, aby działać myaccount.google.com/lesssecureapps
yubaraj poudel
@aliaksandr powinien dodać ten ostatni punkt do swojej odpowiedzi. Domyślnie ta opcja (daj dostęp do mniej bezpiecznych aplikacji) jest wyłączona i nie jest widoczna. Przynajmniej jeśli używasz konta Gmail jako adresu e-mail nadawcy.
EAmez
18

Jeśli chcesz załączyć plik w systemie Linux

echo 'mail content' | mailx -s 'email subject' -a attachment.txt username@stackoverflow.com
MiaeKim
źródło
4
Daje invalid headerwiadomość dla mojego załączonego pliku. Prawidłową opcją była wielka litera -A.
Stephane
3
@Stephane Według patrick-haugh, -a jest przełącznikiem załączników. -A jest dla polecenia konta. Zobacz stronę manuala
MiaeKim
10

w terminalu na swoim Mac OS lub Linux OS wpisz ten kod

mail -s (subject) (receiversEmailAddress)  <<< "how are you?"

na przykład spróbuj tego

mail -s "hi" abc@example.com <<< "how are you?"<br>
Pramodya Abeysinghe
źródło