[Raspbian][Python][CLI] - Wysyłanie maila: tytuł + treść + załącznik - z poziomu CLI lub używając Pythona
: sobota 11 lis 2017, 00:20
Raspberry Pi z systemem Raspbian można w dość sprytny sposób wykorzystać jako narzędzie do wysyłania e-maili. Prezentuję sposób użyty przeze mnie:
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:[ENTER] i podajemy hasło do root'a i znowu [ENTER]
2.2. Instalujemy pakiety: ssmtp, mailutils i mpack.
W linii komend Raspbiana wpisujemy: i [ENTER]
i [ENTER]
i [ENTER]
3. Teraz trzeba odpowiednio skonfigurować SSMTP - edytujemy plik: ssmtp.conf
W linii komend Raspbiana wpisujemy:i [ENTER]
W pliku ssmtp dodajemy odpowiednie linie:
Zapisujemy plik i wychodzimy z niego.
Jeszcze taka drobna uwaga - w poniższych będą użyte następujące ustawienia:
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:i [ENTER]
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: i [ENTER]
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:
i [ENTER]
5.3.2. Zakładając, że dysponujemy już odpowiednim załącznikiem np. plik_graficzny.jpg w linii komend wklepujemy:
i [ENTER]
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:
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
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
su2.2. Instalujemy pakiety: ssmtp, mailutils i mpack.
W linii komend Raspbiana wpisujemy:
Kod: Zaznacz cały
apt-get install ssmtpKod: Zaznacz cały
apt-get install mailutilsKod: Zaznacz cały
apt-get install mpack3. Teraz trzeba odpowiednio skonfigurować SSMTP - edytujemy plik: ssmtp.conf
W linii komend Raspbiana wpisujemy:
Kod: Zaznacz cały
nano /etc/ssmtp/ssmtp.confW 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=pi4. 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.comNa 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.comNa 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.txt5.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.comTym 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