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 self
host
port
.
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_resp
does_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 EHLO
first.
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 SMTP
AUTH
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-MD5
PLAIN
,i LOGIN
; noszą one nazwy odpowiednio SMTP.auth_cram_md5
SMTP.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 None
send_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