SMTP dla Pythona — poczta ze skryptu albo aplikacji Django, która dociera
Python ma SMTP wbudowane: dzięki smtplib wyślą Państwo wiadomość w kilku linijkach, a Django pakuje to we własną warstwę pocztową z ustawieniami EMAIL. Czego nie dostarcza żadne z nich, to dostarczalność — ta zależy od serwera, przez który Państwo wysyłają.
Czy mają Państwo luźny skrypt, aplikację Flask czy projekt Django: ustawienia to te same pięć danych. Kierują je Państwo na swój relay, a kod budujący wiadomości zostaje bez zmian.
Dlaczego bez relaya coś idzie nie tak
Poczta z Pythona pochodzi często z tła: nocnego raportu, zadania cron wysyłającego faktury, skryptu ostrzegającego, gdy pomiar wypada poza normę. Nikt na to nie patrzy — a więc nikt nie zauważa, że serwer odbiorcy po cichu je odrzuca. Przy Django dochodzi klasyczna niespodzianka przy uruchomieniu: w rozwoju wszystko idzie na konsolę, a w produkcji do prawdziwych dostawców, którzy <em>faktycznie</em> sprawdzają reputację.
Konfiguracja SMTP w Python
Pobranie danych
Zaloguj się na swoje konto 2mail i pobierz stamtąd serwer SMTP, nazwę użytkownika oraz hasło.
Wpisanie w Python
W projekcie Django prosimy ustawić w settings dane EMAIL: backend SMTP jako backend pocztowy, host relaya, port 587, włączoną opcję STARTTLS, nazwę użytkownika i hasło oraz domyślny adres nadawcy we własnej domenie. Jeśli pracują Państwo bezpośrednio ze smtplib, prosimy połączyć się z hostem na porcie 587, wywołać starttls, zalogować się nazwą użytkownika i hasłem, a potem wysłać wiadomość. W obu przypadkach prosimy odczytywać dane ze zmiennych środowiskowych, a nie z kodu.
Uwierzytelnienie domeny
Zadbaj o poprawne ustawienie SPF, DKIM i DMARC dla swojej domeny, aby odbiorcy mogli zweryfikować, że wiadomość pochodzi od Ciebie.
Test
Wyślij wiadomość testową na adres u dużego dostawcy i sprawdź, czy trafia do skrzynki odbiorczej, a nie do spamu.
Pola, o które prosi Python
Każda platforma nazywa je nieco inaczej, ale zawsze chodzi o te same pięć. Konkretne wartości są powiązane z kontem i znajdą je Państwo na swoim koncie 2mail — prosimy je stamtąd przepisać, aby mieć pewność, że są właściwe.
| Pole | Co wpisać |
|---|---|
| Serwer SMTP (host) | Nazwa serwera z Państwa konta 2mail. |
| Port | Port odpowiadający wybranemu szyfrowaniu; Państwa konto pokazuje, który to. |
| Szyfrowanie | TLS. Nigdy nie wysyłają Państwo bez szyfrowania — inaczej dane logowania idą przez sieć otwartym tekstem. |
| Nazwa użytkownika | Login SMTP Państwa konta 2mail. |
| Hasło | Odpowiadające mu hasło. Nigdy nie należy używać hasła do skrzynki pracownika. |
Jakie wiadomości wysyła Python
Gdy relay jest już skonfigurowany, wszystkie idą przez 2mail — nie trzeba ich konfigurować pojedynczo.
Pułapki przy Python
Opcja TLS i port muszą się zgadzać
Django zna dwa osobne ustawienia TLS: jedno dla STARTTLS i jedno dla TLS od samego początku. Prosimy włączyć wyłącznie ustawienie STARTTLS; ono pasuje do portu 587. Oba naraz dają błąd konfiguracji; żadne z nich wysyła Państwa login bez szyfrowania, a to relay słusznie odrzuca.
Jedno połączenie na serię, nie na wiadomość
Skrypt, który dla każdej z tysiąca wiadomości otwiera nowe połączenie SMTP, zachowuje się jak napastnik. Prosimy otworzyć jedno połączenie, wysłać serię i zamknąć. Django ma do tego funkcję wysyłania wielu wiadomości przez jedno połączenie.
Ciche błędy w zadaniach w tle
Wyjątek w zadaniu cron znika w pliku logu, którego nikt nie czyta. Prosimy przechwytywać błędy przy wysyłce i zgłaszać je tam, gdzie rzucają się w oczy — oraz podłączyć webhooki 2mail dla dostarczenia i odbicia, aby widzieć też, co psuje się <em>po</em> przekazaniu.
Inna platforma?
SMTP to protokół standardowy: każdy system, który mówi po SMTP — CRM, ERP, własna aplikacja albo serwer — może wysyłać przez 2mail z użyciem tych samych pięciu pól.