smtplib – klient protokołu SMTPś

Obiekty SMTPś

An SMTP instancja posiada następujące metody:

SMTP.set_debuglevel(level)Ś

Ustawienie poziomu wyjścia debugowania. Wartość 1 lub True dla level powoduje wyświetlanie komunikatów debug dla połączenia i dla wszystkich wiadomości wysyłanych do i odbieranych z serwera. Wartość 2 dla poziomu powoduje, że komunikaty te są znakowane czasem.

Zmienione w wersji 3.5: Dodano debuglevel 2.

SMTP.docmd(cmd, args=”)¶

Wysyłanie polecenia cmd do serwera. Opcjonalny argument args jest po prostu konkatenowany do polecenia, oddzielony spacją.

Wraca to 2-tuple składające się z numerycznego kodu odpowiedzi i rzeczywistej linii odpowiedzi (odpowiedzi wielowierszowe są łączone w jedną długą linię.)

W normalnym działaniu nie powinno być konieczne jawne wywoływanie tej metody.Jest ona używana do implementacji innych metod i może być przydatna do testowania prywatnych rozszerzeń.

Jeśli połączenie z serwerem zostanie utracone podczas oczekiwania na odpowiedź,SMTPServerDisconnected zostanie podniesiona.

SMTP.connect(host=’localhost', port=0)Ś

Połącz się z hostem na podanym porcie. Domyślnym ustawieniem jest połączenie z localhost na standardowym porcie SMTP (25). Jeśli nazwa hosta kończy się dwukropkiem (':'), po którym następuje liczba, przyrostek ten zostanie usunięty, a liczba zinterpretowana jako numer portu, którego należy użyć. Metoda ta jest automatycznie wywoływana przez konstruktor, jeśli host jest określony podczas inicjalizacji. Returns a2-tuple of the response code and message sent by the server in itsconnection response.

Raises an auditing event smtplib.connect with arguments selfhostport.

SMTP.helo(name=”)Ś

Zidentyfikuj się do serwera SMTP za pomocą HELO. Argument hostname domyślnie przyjmuje w pełni kwalifikowaną nazwę domeny lokalnego hosta.Wiadomość zwrócona przez serwer jest przechowywana jako atrybut obiektu helo_resp.

W normalnej pracy nie powinno być konieczne jawne wywoływanie tej metody.Zostanie ona niejawnie wywołana przez sendmail() gdy będzie to konieczne.

SMTP.ehlo(name=”)Ś

Identyfikuj się do serwera ESMTP używając EHLO. Argument hostname domyślnie przyjmuje w pełni kwalifikowaną nazwę domeny lokalnego hosta. Sprawdza odpowiedź pod kątem opcji ESMTP i przechowuje je do wykorzystania przez has_extn().Ponadto ustawia kilka atrybutów informacyjnych: wiadomość zwracana przez serwer jest przechowywana jako atrybut ehlo_respdoes_esmtp jest ustawiany na true lub false w zależności od tego, czy serwer obsługuje ESMTP, aesmtp_features będzie słownikiem zawierającym nazwy rozszerzeń usługiSMTP obsługiwanych przez ten serwer oraz ich parametry (jeśli istnieją).

Jeśli nie chcesz używać has_extn() przed wysłaniem poczty, nie powinno być konieczne jawne wywoływanie tej metody. Będzie ona domyślnie wywoływana przezsendmail() gdy będzie to konieczne.

SMTP.ehlo_or_helo_if_needed()¶

Ta metoda wywołuje ehlo() i/lub helo() jeśli w tej sesji nie było poprzedniego EHLO lub HELO polecenia. It tries ESMTP EHLOfirst.

SMTPHeloError

Serwer nie odpowiedział prawidłowo na HELO pozdrowienie.

SMTP.has_extn(nazwa)¶

Zwróć True jeżeli nazwa znajduje się w zbiorze rozszerzeń usług SMTP zwracanych przez serwer, False w przeciwnym przypadku. Case jest ignorowany.

SMTP.verify(adres)¶

Sprawdza poprawność adresu na tym serwerze za pomocą SMTP VRFY. Zwraca atuple składający się z kodu 250 i pełnego adresu RFC 822 (w tym humanname), jeśli adres użytkownika jest poprawny. W przeciwnym razie zwraca kod błędu SMTP 400 lub większy oraz łańcuch błędu.

Uwaga

Wiele witryn wyłącza SMTP VRFY w celu udaremnienia spamerów.

SMTP.login(user, password, *, initial_response_ok=True)Ś

Zaloguj się na serwer SMTP, który wymaga uwierzytelnienia. Argumenty to nazwa użytkownika i hasło do uwierzytelnienia. Jeśli nie było wcześniejszychEHLO lub HELO komend w tej sesji, ta metoda próbuje najpierw ESMTP EHLO. Ta metoda zwróci normalny wynik, jeśli uwierzytelnienie się powiodło, lub może podnieść następujące wyjątki:

SMTPHeloError

Serwer nie odpowiedział poprawnie na HELO powitanie.

SMTPAuthenticationError

Serwer nie zaakceptował kombinacji nazwy użytkownika i hasła.

SMTPNotSupportedError

Komenda AUTH nie jest obsługiwana przez serwer.

SMTPException

Nie znaleziono odpowiedniej metody uwierzytelniania.

Każda z metod uwierzytelniania obsługiwanych przez smtplib jest próbowana kolejno, jeśli są one reklamowane jako obsługiwane przez serwer. Zobacz auth() aby zapoznać się z listą obsługiwanych metod uwierzytelniania. initial_response_ok ispassed through to auth().

Opcjonalny argument słowa kluczowego initial_response_ok określa, czy dla metod uwierzytelniania, które to obsługują, można wysłać „wstępną odpowiedź”, jak określono w RFC 4954, wraz z poleceniem AUTH, zamiast wymagać wyzwania/odpowiedzi.

Zmienione w wersji 3.5: SMTPNotSupportedError może być podnoszony, oraz dodano parametrinitial_response_ok.

SMTP.auth(mechanism, authobject, *, initial_response_ok=True)¶

Wystawienie polecenia SMTPAUTH dla podanego authenticationmechanism, oraz obsługa odpowiedzi na wyzwanie poprzez authobject.

Mechanizm określa mechanizm uwierzytelniania, który ma być użyty jako argument polecenia AUTH; poprawne wartości to te wymienione w elemencie auth elementu esmtp_features.

authobject musi być obiektem wywoływalnym, przyjmującym opcjonalny pojedynczy argument:

data = authobject(challenge=None)

Jeśli opcjonalny argument słowa kluczowego initial_response_ok ma wartość true,authobject() zostanie wywołany jako pierwszy bez argumentu. Może on zwrócić „początkową odpowiedź” ASCII RFC 4954 str, która zostanie zakodowana i wysłana za pomocą polecenia AUTH jak poniżej. Jeśli authobject() nie obsługuje odpowiedzi początkowej (np. dlatego, że wymaga wyzwania), powinien zwrócićNone po wywołaniu z challenge=None. Jeśli initial_response_ok isfalse, to authobject() nie zostanie wywołany jako pierwszy z None.

Jeśli sprawdzenie początkowej odpowiedzi zwróci None, lub jeśli initial_response_ok isfalse, to authobject() zostanie wywołany, aby przetworzyć odpowiedź serwera typu challenger; argumentem wyzwania, który zostanie mu przekazany, będzie bytes. Powinien on zwrócić dane ASCII str, które zostaną zakodowane base64 i wysłane do serwera.

Klasa SMTP dostarcza authobjects dla mechanizmów CRAM-MD5PLAIN,i LOGIN; noszą one nazwy odpowiednio SMTP.auth_cram_md5SMTP.auth_plain, oraz SMTP.auth_login. Wszystkie one wymagają, aby właściwości user i password instancji SMTP były ustawione na odpowiednie wartości.

Kod użytkownika zazwyczaj nie musi bezpośrednio wywoływać auth, ale może zamiast tego wywołać metodę login(), która wypróbuje każdy z powyższych mechanizmów po kolei, w podanej kolejności. auth jest wyeksponowany w celu ułatwienia implementacji metod uwierzytelniania nie wspieranych (lub jeszcze nie) bezpośrednio przez smtplib.

Nowość w wersji 3.5.

SMTP.starttls(keyfile=None, certfile=None, context=None)Ś

Przełącza połączenie SMTP w tryb TLS (Transport Layer Security). Wszystkie polecenia SMTP, które nastąpią będą szyfrowane. Następnie należy ponownie wywołać ehlo().

Jeśli podano keyfile i certfile, są one używane do utworzenia plikussl.SSLContext.

Opcjonalnym parametrem kontekstu jest obiekt ssl.SSLContext; Jest to alternatywa dla użycia keyfile i certfile, a jeśli podano zarównokeyfile jak i certfile powinny być None.

Jeśli nie było wcześniejszego EHLO lub HELO polecenia w tej sesji, ta metoda próbuje najpierw ESMTP EHLO.

Deprecated od wersji 3.6: keyfile i certfile są zdeprecjonowane na rzecz context.Please use ssl.SSLContext.load_cert_chain() instead, or letssl.create_default_context() select the system’s trusted CAcertificates for you.

SMTPHeloError

Serwer nie odpowiedział poprawnie na HELO powitanie.

SMTPNotSupportedError

Serwer nie obsługuje rozszerzenia STARTTLS.

RuntimeError

ObsługaSSL/TLS nie jest dostępna dla Twojego interpretera Pythona.

Zmienione w wersji 3.3: dodano kontekst.

Zmienione w wersji 3.4: Metoda obsługuje teraz sprawdzanie nazwy hosta za pomocąSSLContext.check_hostname i Server Name Indicator (patrzHAS_SNI).

Zmienione w wersji 3.5: Błąd podnoszony za brak obsługi STARTTLS jest teraz podklasąSMTPNotSupportedError zamiast bazowąSMTPException.

SMTP.sendmail(from_addr, to_addrs, msg, mail_options=(), rcpt_options=())Ś

Wysyłanie poczty. Wymaganymi argumentami są: łańcuch adresów RFC 822 from, lista łańcuchów adresów RFC 822 to (goły łańcuch będzie traktowany jako lista z 1 adresem) oraz łańcuch wiadomości. Osoba dzwoniąca może przekazać listę opcji ESMTP (takich jak 8bitmime), które mają być użyte w poleceniach MAIL FROM jako mail_options.Opcje ESMTP (takie jak DSN polecenia), które powinny być używane ze wszystkimi RCPT poleceniami mogą być przekazywane jako rcpt_options. (Jeśli potrzebujesz użyć różnych opcji ESMTP do różnych odbiorców, musisz użyć metod niskiego poziomu, takich jakmail()rcpt() i data(), aby wysłać wiadomość.)

Uwaga

Parametry from_addr i to_addrs są używane do konstruowania koperty komunikatu używanej przez agentów transportowych. sendmail nie modyfikuje w żaden sposób nagłówków wiadomości.

msg może być łańcuchem zawierającym znaki z zakresu ASCII lub ciągiem bajtów. Łańcuch jest kodowany na bajty przy użyciu kodeka ascii, a samotne znaki \r i \n są konwertowane na znaki \r\n. Łańcuch bajtowy nie jest modyfikowany.

Jeśli w tej sesji nie było wcześniejszego polecenia EHLO lub HELO, ta metoda próbuje najpierw wykonać ESMTP EHLO. Jeśli serwer wykona ESMTP, zostanie mu przekazany rozmiar wiadomości i każda z podanych opcji (jeśli opcja jest w zestawie funkcji, które serwer reklamuje). Jeśli EHLO nie powiedzie się, HELO zostanie wypróbowany i opcje ESMTP zostaną wyłączone.

Ta metoda zwróci normalną wartość, jeśli poczta zostanie zaakceptowana dla co najmniej jednego odbiorcy. W przeciwnym razie podniesie wyjątek. To znaczy, jeśli ta metoda nie podniesie wyjątku, to ktoś powinien dostać twoją pocztę. Jeśli ta metoda nie podniesie wyjątku, zwróci słownik, z jednym wpisem dla każdego odbiorcy, który został odrzucony. Każdy wpis zawiera tuple kodu błędu SMTP i towarzyszącego mu komunikatu o błędzie wysłanego przez serwer.

Jeśli SMTPUTF8 jest zawarte w mail_options, a serwer je obsługuje, from_addr i to_addrs mogą zawierać znaki inne niż ASCII.

Ta metoda może powodować następujące wyjątki:

SMTPRecipientsRefused

Wszyscy odbiorcy zostali odrzuceni. Nikt nie otrzymał poczty. Atrybutem recipients obiektu wyjątku jest słownik z informacjami o odrzuconych odbiorcach (jak ten zwrócony, gdy przynajmniej jeden odbiorca został zaakceptowany).

SMTPHeloError

Serwer nie odpowiedział poprawnie na pozdrowienie HELO

SMTPSenderRefused

Serwer nie zaakceptował adresu from_addr.

SMTPDataError

Serwer odpowiedział z nieoczekiwanym kodem błędu (innym niż odmowa przyjęcia arecipient).

SMTPNotSupportedError

SMTPUTF8 został podany w mail_options, ale nie jest obsługiwany przez serwer.

Jeśli nie zaznaczono inaczej, połączenie będzie otwarte nawet po zgłoszeniu wyjątku.

Zmienione w wersji 3.2: msg może być ciągiem bajtów.

Zmienione w wersji 3.5: Dodano obsługę SMTPUTF8, a SMTPNotSupportedError może być beraizowany, jeśli SMTPUTF8 jest określony, ale serwer go nie obsługuje.

SMTP.send_message(msg, from_addr=None, to_addrs=None, mail_options=(), rcpt_options=())Ś

To jest wygodna metoda do wywołania sendmail() z komunikatem reprezentowanym przez obiekt email.message.Message. Argumenty mają takie samo znaczenie jak w przypadku sendmail(), z wyjątkiem tego, że msg jest obiektem Message.

Jeśli from_addr jest None lub to_addrs jest Nonesend_message wypełnia te argumenty adresami wyodrębnionymi z nagłówków msg zgodnie z RFC 5322: from_addr jest ustawiany na pole Sender, jeśli jest obecne, a w przeciwnym razie na pole From.to_addrs łączy wartości (jeśli istnieją) pól To,Cc, i Bcc z msg. Jeśli w wiadomości znajduje się dokładnie jeden zestaw nagłówków Resent-*, zwykłe nagłówki są ignorowane, a zamiast nich używane są nagłówki Resent-*. Jeśli wiadomość zawiera więcej niż jeden zestaw nagłówków Resent-*, podnoszony jest komunikat ValueError, ponieważ nie ma sposobu na jednoznaczne wykrycie najnowszego zestawu nagłówków Resent-*.

send_message serializuje msg używającBytesGenerator z \r\n jako linesep, andcalls sendmail() to transmit the resulting message. Niezależnie od wartości from_addr i to_addrs, send_message nie przekazuje żadnych nagłówków Bcc lub Resent-Bcc, które mogą pojawić się w msg. Jeśli którykolwiek z adresów w from_addr i to_addrs zawiera znaki inne niż ASCII, a serwer nie reklamuje obsługi SMTPUTF8, zgłaszany jest błąd SMTPNotSupported. W przeciwnym razie Message jest serializowany z klonem swojego policy z atrybutemutf8 ustawionym na True, orazSMTPUTF8 i BODY=8BITMIME są dodane do mail_options.

Nowość w wersji 3.2.

Nowość w wersji 3.5: Obsługa internacjonalizacji adresów (SMTPUTF8).

SMTP.quit

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *