czego potrzebujesz, aby wysłać wiadomość e-mail w Pythonie? Trochę podstawowej wiedzy programistycznej i internetowej wraz z podstawowymi umiejętnościami Pythona. Zakładamy, że masz już aplikację internetową zbudowaną w tym języku i teraz musisz rozszerzyć jej funkcjonalność za pomocą powiadomień lub innych wiadomości e-mail. Ten samouczek poprowadzi Cię przez najważniejsze etapy wysyłania wiadomości e-mail przez serwer SMTP:
- Konfigurowanie serwera do testowania (czy wiesz, dlaczego jest to ważne?,)
- lokalny serwer SMTP
- Mailtrap fałszywy serwer SMTP
- różne rodzaje wiadomości e-mail: HTML, z obrazami i załącznikami
- wysyłanie wielu spersonalizowanych wiadomości e-mail (Python jest po prostu nieoceniony dla automatyzacji poczty e-mail)
- niektóre popularne opcje wysyłania wiadomości e-mail, takie jak Gmail i transakcyjne usługi e-mail
serwowane z licznymi przykładami kodu!
Uwaga: napisany i przetestowany na Pythonie 3.7.2.
wysyłanie wiadomości e-mail za pomocą SMTP
pierwszą dobrą wiadomością na temat Pythona jest to, że ma wbudowany moduł do wysyłania wiadomości e-mail za pośrednictwem SMTP w swojej standardowej bibliotece., Nie są wymagane żadne dodatkowe instalacje ani sztuczki. Możesz zaimportować moduł używając następującej instrukcji:
import smtplib
aby upewnić się, że moduł został zaimportowany poprawnie i uzyskać pełny opis jego klas i argumentów, wpisz w interaktywnej sesji Pythona:
help(smtplib)
w następnym kroku porozmawiamy trochę o serwerach: wybraniu odpowiedniej opcji i skonfigurowaniu jej.,
serwer SMTP do testowania wiadomości e-mail w Pythonie
podczas tworzenia nowej aplikacji lub dodawania dowolnej funkcjonalności, szczególnie podczas robienia tego po raz pierwszy, konieczne jest eksperymentowanie na serwerze testowym. Oto krótka lista powodów:
- nie trafisz do skrzynek znajomych i klientów. Ma to kluczowe znaczenie podczas testowania masowego wysyłania wiadomości e-mail lub pracy z bazą danych e-mail.
- nie zalejesz własnej skrzynki odbiorczej testowymi e-mailami.
- Twoja domena nie zostanie umieszczona na czarnej liście spamu.,
lokalny serwer SMTP
Jeśli wolisz pracować w środowisku lokalnym, lokalny serwer debugowania SMTP może być opcją. W tym celu Python oferuje moduł smtpd. Posiada funkcję DebuggingServer, która odrzuci wysyłane wiadomości i wydrukuje je na stdout. Jest kompatybilny ze wszystkimi systemami operacyjnymi.,
Ustaw serwer SMTP na localhost:1025
python -m smtpd -n -c DebuggingServer localhost:1025
aby uruchomić serwer SMTP na porcie 25, musisz mieć uprawnienia roota:
sudo python -m smtpd -n -c DebuggingServer localhost:25
pomoże Ci to zweryfikować, czy Twój kod działa i wskazać możliwe problemy, jeśli istnieją. Nie daje to jednak możliwości sprawdzenia, w jaki sposób renderowany jest szablon wiadomości HTML.,
fałszywy serwer SMTP
fałszywy serwer SMTP naśladuje pracę prawdziwego serwera stron trzecich. W dalszych przykładach w tym poście użyjemy Mailtrap. Poza testowaniem wysyłania wiadomości e-mail, pozwoli nam sprawdzić, w jaki sposób e-mail będzie renderowany i wyświetlany, przejrzeć surowe dane wiadomości, a także dostarczy nam raport spamu., Mailtrap jest bardzo łatwy w konfiguracji: wystarczy skopiować poświadczenia wygenerowane przez aplikację i wkleić je do kodu.
tak to wygląda w praktyce:
Mailtrap sprawia, że wszystko jest jeszcze łatwiejsze. Przejdź do sekcji integracje na karcie Ustawienia SMTP i pobierz gotowy do użycia szablon prostej wiadomości z poświadczeniami Mailtrap., Jest to najbardziej podstawowa opcja instruowania skryptu Pythona, kto wysyła co do kogo jest metodą instancji sendmail ():
Wypróbuj Mailtrap za darmo
kod wygląda całkiem prosto, prawda? Przyjrzyjmy się temu bliżej i dodajmy obsługę błędów (zobacz #objaśnienia pomiędzy). Aby wychwycić błędy, używamy bloków ” try ” i „except”. Lista wyjątków znajduje się w dokumentacji.,
Gdy otrzymasz wynik wysłania w powłoce, powinieneś zobaczyć swoją wiadomość w skrzynce odbiorczej Mailtrap:
wysyłanie wiadomości HTML
W w większości przypadków musisz dodać formatowanie, linki lub obrazy do powiadomień e-mail. Możemy po prostu umieścić je wszystkie z zawartością HTML. W tym celu Python posiada pakiet poczty e-mail.
zajmiemy się typem wiadomości MIME, który potrafi łączyć HTML i zwykły tekst. W Pythonie jest obsługiwany przez e-mail.moduł mime.,
lepiej jest napisać wersję tekstową i wersję HTML osobno, a następnie połączyć je z instancją mimemultipart („alternative”). Oznacza to, że taka wiadomość ma odpowiednio dwie opcje renderowania. Jeśli z jakiegoś powodu HTML nie zostanie pomyślnie renderowany, wersja tekstowa nadal będzie dostępna.
Input:
Output:
wysyłanie wiadomości e-mail z załącznikami w Pythonie
następnym krokiem w masteringu wysyłania wiadomości e-mail w Pythonie jest dołączanie plików., Załączniki są nadal obiektami MIME, ale musimy je zakodować za pomocą modułu base64. Kilka ważnych punktów dotyczących załączników:
- Python umożliwia dołączanie plików tekstowych, obrazów, plików audio, a nawet aplikacji. Wystarczy użyć odpowiedniej klasy E-mail, takiej jak e-mail.mim.audio.MIMEAudio lub e-mail.mim.obraz.MIMEImage. Pełne informacje można znaleźć w tej sekcji dokumentacji Pythona. Możesz również sprawdzić przykłady dostarczone przez Pythona dla lepszego zrozumienia.
- pamiętaj o rozmiarze pliku: wysyłanie plików powyżej 20MB to zła praktyka.,
w e-mailach transakcyjnych pliki PDF są najczęściej używane: zazwyczaj otrzymujemy paragony, bilety, karty pokładowe, potwierdzenia zamówień itp. Przyjrzyjmy się więc, jak wysłać kartę pokładową jako plik PDF.
Input:
aby załączyć kilka plików, możesz wywołać wiadomość.metoda attach () kilka razy.
Jak wysłać e-mail z obrazkami
obrazy, nawet jeśli są częścią treści wiadomości, są również załącznikami., Istnieją trzy ich typy: załączniki CID (osadzone jako obiekt MIME), obrazy base64 (osadzanie w wierszu) i obrazy połączone. Opisaliśmy ich osobliwości, wady i zalety oraz kompatybilność z większością klientów poczty e-mail w tym poście.
przejdźmy do przykładów.
aby dodać załącznik CID, utworzymy wieloczęściową wiadomość MIME z komponentem MIMEImage:
wyjście:
CID obraz jest pokazywany zarówno jako część wiadomości HTML, jak i jako załącznik., Wiadomości z tego typu obrazkami są często uważane za spam: sprawdź zakładkę Analytics w Mailtrap, aby zobaczyć wskaźnik spamu i zalecenia dotyczące jego poprawy. Wielu klientów poczty e – mail-w szczególności Gmail-w większości przypadków nie wyświetla obrazów CID. Przyjrzyjmy się więc, jak osadzić zakodowany obraz Base64.
tutaj użyjemy modułu base64 i eksperymentujemy z tym samym plikiem obrazu:
wyjście:
teraz obraz jest osadzony w wiadomości HTML i nie jest dostępny jako załączony plik., Python zakodował nasz obraz jpg, a jeśli przejdziemy do zakładki źródło HTML, zobaczymy długi ciąg danych obrazu w img src.
jak wysyłać wiele wiadomości e-mail w Pythonie
wysyłanie wielu wiadomości e-mail do różnych odbiorców i uczynienie ich osobistymi jest szczególną rzeczą w wiadomościach e-mail w Pythonie.
aby dodać jeszcze kilku odbiorców, wystarczy wpisać ich adresy oddzielone przecinkiem, dodać CC i BCC. Ale jeśli pracujesz z masowym wysyłaniem wiadomości e-mail, Python zapisze cię za pomocą pętli.
jedną z opcji jest utworzenie bazy danych w,format csv (Zakładamy, że jest zapisany w tym samym folderze co skrypt Pythona).
często widzimy nasze nazwiska w przykładach transakcyjnych lub nawet promocyjnych. Oto jak możemy to zrobić z Pythonem.
uporządkujmy listę w prostej tabeli składającej się z dwóch kolumn: imienia i adresu e-mail. Powinno to wyglądać jak w poniższym przykładzie:
#name,emailJohn Johnson,[email protected] Peterson,[email protected]
poniższy kod otworzy plik i zapętli jego wiersze linia po linii, zastępując {name} wartością z kolumny „name”.,
Input:
Po uruchomieniu skryptu otrzymujemy następującą odpowiedź:
Sent to John JohnsonSent to Peter Peterson>>>
Output
w naszej skrzynce odbiorczej Mailtrap widzimy dwa komunikaty: jeden dla Johna Johnsona i drugi dla Petera Petersona, dostarczane jednocześnie:
wysyłanie wiadomości e-mail z Pythonem za pośrednictwem Gmaila
Kiedy będziesz gotowy do wysyłania wiadomości e-mail do rzeczywistych odbiorców, możesz skonfigurować serwer produkcyjny. Zależy to również od twoich potrzeb, celów i preferencji: twojego lokalnego hosta lub dowolnego zewnętrznego SMTP.,
jedną z najpopularniejszych opcji jest Gmail, więc przyjrzyjmy się jej bliżej.
często możemy zobaczyć tytuły takie jak „Jak założyć konto Gmail do rozwoju”. W rzeczywistości oznacza to, że utworzysz nowe konto Gmail i użyjesz go do określonego celu.
aby móc wysyłać e-maile za pośrednictwem konta Gmail, musisz zapewnić dostęp do niego dla swojej aplikacji. Możesz zezwolić mniej bezpiecznym aplikacjom lub skorzystać z protokołu autoryzacji OAuth2. Jest to o wiele trudniejsze, ale zalecane ze względów bezpieczeństwa.,
Ponadto, aby korzystać z serwera Gmail, musisz wiedzieć:
- nazwa serwera = smtp.gmail.com
- port = 465 dla połączenia SSL/TLS (preferowany)
- lub port = 587 dla połączenia STARTTLS.
- nazwa użytkownika = twój adres e-mail Gmaila
- hasło = Twoje hasło.
Jeśli masz tendencję do prostoty, możesz użyć yagmail, dedykowanego Gmaila/SMTP. To sprawia, że wysyłanie e-maili jest naprawdę łatwe., Wystarczy porównać powyższe przykłady z tymi kilkoma linijkami kodu:
transakcyjne usługi e-mailowe
Gmail jest darmowy i szeroko stosowany, ale nadal ma ograniczenia dotyczące wysyłania wiadomości e-mail. Jeśli twoje potrzeby wykraczają daleko poza reguły Gmaila, wybierz jedną z opcji usług transakcyjnych lub, jak są one również nazywane, usługi API poczty e-mail.
Python jest obsługiwany przez zdecydowaną większość zaufanych interfejsów API poczty e-mail, dzięki czemu można wybierać zgodnie z preferencjami i budżetem.,
oto kilka przewodników na temat wysyłania wiadomości e-mail z Pythonem za pośrednictwem listy najpopularniejszych usług:
- Amazon SES
- Mailgun
- Mandrill
- Postmark
- SendGrid
- SocketLabs
kolejne kroki z wiadomościami w Pythonie
zademonstrowaliśmy tylko podstawowe opcje wysyłania wiadomości e-mail z Pythonem, aby opisz logikę i zakres jej możliwości. Aby uzyskać świetne wyniki, zalecamy przejrzenie dokumentacji Pythona i po prostu eksperymentowanie z własnym kodem!,
istnieje kilka różnych frameworków i bibliotek Pythona, które sprawiają, że tworzenie aplikacji jest bardziej eleganckie i dedykowane. W szczególności niektóre z nich mogą pomóc poprawić Twoje doświadczenia z budowaniem funkcji wysyłania e-maili:
najpopularniejsze frameworki to:
- Flask, który oferuje prosty interfejs do wysyłania e— maili-Flask Mail.
- Django, które może być świetną opcją do budowania szablonów HTML. (A oto nasz tutorial na temat wysyłania e-maili z Django).
- Zope przydaje się przy tworzeniu stron internetowych.,
- Marrow Mailer to dedykowany framework dostarczania poczty, dodając różne pomocne konfiguracje.
- Plotly i jego Dash mogą pomóc w wysyłaniu wykresów i raportów.