1. Założenia:
1.1. Możliwie najprostsza bezproblemowa konfiguracja.
1.2. Możliwość wykorzystania skrzynki Gmail.
1.3. Mozliwość wysyłania: tytułu, treści maila oraz/lub załącznika.
1.4. Możliwość korzystania z w/w sposobu w programowaniu w języku Python.
1.5. Chcemy wysłać email z: konta Gmail na: TO SAMO konto Gmail (można na inne, ale należy taką skrzynkę przygotować - patrz punkt 2.4.)
2. Instalacja niezbędnych składników (pakietów):
2.1. Wchodzimy na konto root'a żeby po milion razy nie wklepywać sudo.
W linii komend Raspbiana wpisujemy:
Kod: Zaznacz cały
su
2.2. Instalujemy pakiety: ssmtp, mailutils i mpack.
W linii komend Raspbiana wpisujemy:
Kod: Zaznacz cały
apt-get install ssmtp
Kod: Zaznacz cały
apt-get install mailutils
Kod: Zaznacz cały
apt-get install mpack
3. Teraz trzeba odpowiednio skonfigurować SSMTP - edytujemy plik: ssmtp.conf
W linii komend Raspbiana wpisujemy:
Kod: Zaznacz cały
nano /etc/ssmtp/ssmtp.conf
W pliku ssmtp dodajemy odpowiednie linie:
Kod: Zaznacz cały
root=postmaster
mailhub=smtp.gmail.com:587
AuthUser=<login>@gmail.com
AuthPass=<hasło>
UseSTARTTLS=YES
hostname=<login_użytkownika_w_raspbian>
FromLineOverride=YES
Zapisujemy plik i wychodzimy z niego.
Jeszcze taka drobna uwaga - w poniższych będą użyte następujące ustawienia:
Kod: Zaznacz cały
AuthUser=adres_mailowy@gmail.com"
AuthPass=haslo123supertajne
hostname=pi
4. Konfiguracja skrzynki Gmail:
Zanim puścimy maila z naszego Raspberry trzeba zrobić jeszcze jeden krok mianowicie w odpowiedni sposób przygotować skrzynkę Gmail, żeby nie stroiła fochów typu, że email został nie wysłany, bo to za bardzo niebezpieczne.
4.1. Logujemy się na konto Gmail, z którego i na które będziemy wysyłać maile.
4.2. Następnie klikamy w "trybik":
4.3. Następnie klikamy w "Ustawienia":
4.4. Następnie klikamy w "Inne ustawienia konta Google":
4.5. Następnie klikamy w "Logowanie się w Google":
4.6. Następnie klikamy w wajchę tak, żeby było "Zezwalaj na mniej bezpieczne aplikacje: WŁĄCZONE":
4.7. Na upewniamy się że protokół IMAP jest na koncie Gmail włączony:
5. Wysyłanie maila - w końcu!
Wszędzie poniżej podany jest przykład wysyłania maila z tego samego konta Google (Gmail) na to samo konto Gmail. Niemniej można wysyłać maila na inne konto/konta, ale należy upewnić się co do ustawień kont (IMAP, autoryzacja, etc).
5.1. Wysyłanie maila z linii komend (CLI) - (tytuł + tekst - bez załącznika):
W linii komend Raspbiana wklepujemy:
Kod: Zaznacz cały
echo "Tresc (zawartosc) maila, ktory nie ma zalacznika" | mail -s "Temat maila" adres_mailowy@gmail.com
Na naszym koncie powinniśmy otrzymać dopiero co wysłany email (bez załącznika jeszcze tym razem).
5.2. Wysyłanie maila z linii komend (CLI) - (tytuł + załącznik - ALE bez tekstu):
W linii komend Raspbiana wpisujemy:
Kod: Zaznacz cały
mpack -s "Tytul maila" /folder_gdzie_mamy_plik/plik_np_graficzny.jpg adres_mailowy@gmail.com
Na naszym koncie powinniśmy otrzymać dopiero co wysłany email (z załącznikiem i tytułem maila, ale bez tekstu, bo... tak działa mpack...).
5.3. Wysyłanie maila z linii komend (CLI) - (tytuł + tekst + załącznik):
5.3.1. Przygotowujemy plik tekstowy, np.
Piszemy w linii komend:
Kod: Zaznacz cały
echo "To jest treść maila, który będzie także zawierał załącznik" > tekst_tmp.txt
5.3.2. Zakładając, że dysponujemy już odpowiednim załącznikiem np. plik_graficzny.jpg w linii komend wklepujemy:
Kod: Zaznacz cały
mpack -s "Tytul maila: Mail + tekst + zalacznik" -d "tekst_tmp.txt" "plik_graficzny.jpg" adres_mailowy@gmail.com
Tym razem na naszym koncie powinniśmy otrzymać dopiero co wysłany email, ale już z tytułem, treścią i załącznikiem - czyli wszystko elegancko.
To tyle jeśli chodzi o wklepywanie z linii komend - w sumie mało przydatne, ale to miał być wstęp do tego jak wykorzystać to z poziomu języka Python, gdzie jak wiadomo wówczas różne sprawy możemy sprytnie zautomatyzować, np. wysłać maila wtedy kiedy na odpowiednim pinie GPIO Raspberry pojawi się stan wysoki lub niski.
Tymczasem pokazuję jak wysłać maila z poziomu skryptu języka Python...
5.3.3 - Wysyłanie maila z poziomu języka Python (Tytuł, treść + załącznik):
5.3.3.1. - Uruchamiamy ulubiony edytor tekstu (w moim przypadku stosuję połączenie Midnight Commander i jego wbudowany edytor, bo dość prosto można w nim operować opcjami zaznaczania, kopiowania i innych możliwości z tekstem), ale można używać oczywiście innych edytorów jak np. nano, vi, emacs.. etc.
5.3.3.2. - Tworzymy skrypt Pythona (plik) nazwany np. wyslij_email.py i następnie wewnątrz niego wklepujemy co następuje:
Kod: Zaznacz cały
import time
from subprocess import PIPE, Popen
# funkcja typu "cmd()" - czyli uruchamiajaca rozkaz tak jakby pisalo sie wprost z linii komend
def j23cmd2os(cmdline):
process = Popen(
args = cmdline,
stdout = PIPE,
shell = True
)
# tworzenie tymczasowego pliku z trescia maila (zawartoscia/content)
j23cmd2os('echo "To jest tresc maila" > tekst_tmp2.txt')
# tworzenie przykladowego, tymczasowego zalacznika - ta linia nie jest konieczna jesli taki zalacznik jest juz wczesniej przygotowany
j23cmd2os('echo "zawartosc zalacznika" > attachement_temp.txt')
# wysylanie maila
j23cmd2os('mpack -s "Tytul maila: Mail + tekst + zalacznik" -d "tekst_tmp2.txt" "attachement_temp.txt" adres_mailowy@gmail.com')
# kasowanie wczesniej utworzonych, tymczasowych plikow: tekst_tmp2.txt i attachement_temp.txt
j23cmd2os('rm -f tekst_tmp2.txt attachement_temp.txt')
Na koniec zwracam uwagę na trzy sprawy:
- w linii komend lepiej nie stosować polskich znaków diakrytycznych typu ą, ę, ł, etc.
- w języku Python lepiej nie stosować polskich znaków diakrytycznych typu ą, ę, ł, etc.
Nie wiem czemu, ale czasem taki tekst z polskimi ogonkami udaje się wysłać, a czasem Python sygnalizuje, że błąd, że nie uprzedzono o tym jaki podzbiór językowy będzie użyty w pliku etc.
- tworzone pliki np. tekst_temp.txt są tworzone w tym samym katalogu, z którego jest uruchamiany skrypt Pythona (żeby to zmienić, czyli wysyłać pliki z odpowiednich ścieżek należałoby podać te ścieżki (np. /home/pi/tekst_tmp2.txt).
Korzystałem z następujących źródeł:
http://www.raspberry-projects.com/pi/so ... end-emails
http://www.algissalys.com/network-secur ... mmand-line
Pozdrawiam! J23 Jarek