Serwisanci dostępni teraz · czynne całą dobę, także w weekendy i świętaWarszawa i okolice · dojazd bezpłatny
Darmowa diagnoza laptopa
Darmowa diagnoza laptopa
Dojazd do klienta bezpłatnie
Dojazd do klienta bezpłatnie
Laptopy zastępcze bezpłatnie
Laptopy zastępcze bezpłatnie
Odbiór i zwrot sprzętu bezpłatnie
Odbiór i zwrot sprzętu bezpłatnie

Python + smtplib + Scheduler

Termin Definicja
Python + smtplib + Scheduler

Python z smtplib i harmonogramem pozwala automatyzować cykliczną wysyłkę wiadomości bez zewnętrznej platformy.

Rola biblioteki smtplib w wysyłaniu wiadomości

smtplib jest standardowym modułem biblioteki Pythona przeznaczonym do komunikacji z serwerem SMTP, czyli usługą obsługującą przekazywanie poczty elektronicznej. Moduł nie jest samodzielnym systemem pocztowym i nie dostarcza wiadomości bez połączenia z serwerem wskazanym przez operatora skrzynki lub usługę pocztową. Program nawiązuje połączenie TCP z określonym hostem i portem, przedstawia się serwerowi oraz przekazuje wiadomość zgodnie z przebiegiem sesji SMTP.

W praktyce można użyć klas SMTP albo SMTP_SSL. Pierwsza obsługuje zwykłe połączenie SMTP, które może zostać zabezpieczone poleceniem starttls(), natomiast druga służy do połączenia szyfrowanego od początku sesji. Po ustanowieniu połączenia program zwykle wywołuje ehlo(), następnie opcjonalnie starttls(), ponownie ehlo(), a później login() i send_message(). Obiekt wiadomości można przygotować za pomocą klasy EmailMessage z modułu email.message, ustawiając między innymi pola From, To, Subject oraz treść.

Budowa cyklicznego zadania w Pythonie

Do prostego harmonogramowania dostępny jest standardowy moduł sched. Jego obiekt scheduler przechowuje zdarzenia uporządkowane według czasu wykonania i priorytetu. Zdarzenie można zaplanować metodą enter(), podając opóźnienie w sekundach, priorytet, funkcję oraz jej argumenty. Po dodaniu zdarzeń metoda run() oczekuje na właściwy moment i wywołuje funkcje w zaplanowanej kolejności.

Jeżeli zadanie ma powtarzać się co określony czas, funkcja wykonywana przez harmonogram może po zakończeniu ponownie zarejestrować własne wywołanie przez enter(). W takim rozwiązaniu należy świadomie obliczać następny termin, ponieważ samo sched nie jest rozbudowanym kalendarzem z regułami dni roboczych, stref czasowych czy wyjątków świątecznych. Opóźnienie przekazane do enter() jest względne, a niekoniecznie oznacza konkretną godzinę zegarową. Do prostych odstępów czasowych można wykorzystać zegar monotoniczny, natomiast do terminów kalendarzowych trzeba dodatkowo użyć modułu datetime i poprawnie wyznaczać kolejną datę.

Kontrola sesji SMTP, błędów i powtórzeń

Automatyczna wysyłka wymaga obsługi sytuacji, w których połączenie z serwerem nie zostanie nawiązane, uwierzytelnienie się nie powiedzie albo serwer odrzuci adres odbiorcy. smtplib udostępnia między innymi wyjątki SMTPConnectError, SMTPAuthenticationError, SMTPRecipientsRefused i SMTPException. Program powinien rozróżniać błąd całej sesji od odrzucenia pojedynczego adresu, zapisywać wynik operacji i nie traktować samego wywołania funkcji jako dowodu dostarczenia wiadomości do skrzynki odbiorcy.

Warto ustawić limit czasu połączenia za pomocą parametru timeout, aby niedostępny serwer nie zablokował harmonogramu na nieokreślony czas. Powtórzenia powinny mieć ograniczoną liczbę prób oraz rosnące odstępy, na przykład przez ponowne zaplanowanie zadania z większym opóźnieniem. Trzeba również zapobiec nakładaniu się kolejnych uruchomień. Jeżeli wysyłka trwa dłużej niż odstęp między terminami, prosty mechanizm rejestrujący następne zdarzenie po zakończeniu może być bezpieczniejszy niż uruchamianie wielu równoległych sesji SMTP.

Uruchamianie skryptu i diagnostyka na komputerze

Sam skrypt może działać w procesie uruchomionym przez użytkownika, ale po zamknięciu tego procesu przestaje wykonywać zaplanowane zdarzenia. Dlatego w środowisku biurowym harmonogram trzeba powiązać z mechanizmem uruchamiania systemu, takim jak Harmonogram zadań Windows albo usługa systemowa dostępna w danym środowisku. Python odpowiada wtedy za przygotowanie wiadomości i sesję SMTP, a system operacyjny za rozpoczęcie procesu o określonej porze. Należy sprawdzić ścieżkę do interpretera, katalog roboczy, dostęp do sieci, kodowanie treści oraz sposób zapisywania logów.

Problemy z takim rozwiązaniem mogą wynikać zarówno z konfiguracji programu, jak i z komputera: błędnego zegara systemowego, braku połączenia z siecią, blokady portu przez zaporę, nieprawidłowego certyfikatu albo niedostępnego interpretera Pythona. Warszawskie Pogotowie Komputerowe wykonuje profesjonalną naprawę laptopów i komputerów PC, w tym diagnostykę usterek systemowych oraz problemów z oprogramowaniem wpływających na działanie takich skryptów.

+48 22 100 48 29Zadzwoń teraz · serwisant w 1 godzinę