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