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:

  1. Konfigurowanie serwera do testowania (czy wiesz, dlaczego jest to ważne?,)
    • lokalny serwer SMTP
    • Mailtrap fałszywy serwer SMTP
  2. różne rodzaje wiadomości e-mail: HTML, z obrazami i załącznikami
  3. wysyłanie wielu spersonalizowanych wiadomości e-mail (Python jest po prostu nieoceniony dla automatyzacji poczty e-mail)
  4. 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:

  1. 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.
  2. nie zalejesz własnej skrzynki odbiorczej testowymi e-mailami.
  3. 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:

  1. 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.
  2. 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:

  1. Flask, który oferuje prosty interfejs do wysyłania e— maili-Flask Mail.
  2. 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).
  3. Zope przydaje się przy tworzeniu stron internetowych.,
  4. Marrow Mailer to dedykowany framework dostarczania poczty, dodając różne pomocne konfiguracje.
  5. Plotly i jego Dash mogą pomóc w wysyłaniu wykresów i raportów.