SMTP-Objekte¶
Eine SMTP
-Instanz hat die folgenden Methoden:
SMTP.
set_debuglevel
(level)¶
Setzen Sie den Debug-Ausgabelevel. Ein Wert von 1 oder True
für level führt zu Debug-Meldungen für die Verbindung und für alle an den Server gesendeten und vom Server empfangenen Nachrichten. Ein Wert von 2 für Level führt dazu, dass diese Meldungen mit einem Zeitstempel versehen werden.
Geändert in Version 3.5: Debuglevel 2 hinzugefügt.
SMTP.
docmd
(cmd, args=“)
Sendet einen Befehl cmd an den Server. Das optionale Argument args wird einfach an den Befehl angehängt, getrennt durch ein Leerzeichen.
Dieser gibt ein 2-Tupel zurück, das sich aus einem numerischen Antwortcode und der eigentlichen Antwortzeile zusammensetzt (mehrzeilige Antworten werden zu einer langen Zeile zusammengefasst.)
Im normalen Betrieb sollte es nicht notwendig sein, diese Methode explizit aufzurufen.Sie dient zur Implementierung anderer Methoden und kann zum Testen von Privatextensions nützlich sein.
Wenn die Verbindung zum Server während des Wartens auf die Antwort unterbrochen wird,SMTPServerDisconnected
wird ausgelöst.
SMTP.
connect
(host=’localhost‘, port=0)
Verbinden Sie sich mit einem Host an einem bestimmten Port. Standardmäßig wird eine Verbindung mit dem localhost am Standard-SMTP-Port (25) hergestellt. Wenn der Hostname mit einem Doppelpunkt (':'
) gefolgt von einer Zahl endet, wird dieses Suffix entfernt und die Zahl als die zu verwendende Portnummer interpretiert. Diese Methode wird automatisch vom Konstruktor aufgerufen, wenn bei der Instanzierung ein Host angegeben wird. Gibt ein2-Tupel des Antwortcodes und der Nachricht zurück, die der Server in seiner Verbindungsantwort gesendet hat.
Wirft ein Auditing-Ereignis smtplib.connect
mit den Argumenten self
host
port
.
SMTP.
helo
(name=“)¶
Identifizieren Sie sich gegenüber dem SMTP-Server mit HELO
. Das Argument hostname ist standardmäßig der vollqualifizierte Domänenname des lokalen Hosts.
Die vom Server zurückgegebene Nachricht wird als helo_resp
Attribut des Objekts gespeichert.
Im normalen Betrieb sollte es nicht notwendig sein, diese Methode explizit aufzurufen.Sie wird bei Bedarf implizit vom sendmail()
aufgerufen.
SMTP.
ehlo
(name=“)¶
Identifizieren Sie sich mit EHLO
bei einem ESMTP-Server. Das Argument hostname ist standardmäßig der vollqualifizierte Domänenname des lokalen Hosts. Untersucht die Antwort auf ESMTP-Optionen und speichert sie für die Verwendung durch has_extn()
.Außerdem werden mehrere Informationsattribute gesetzt: Die vom Server zurückgegebene Nachricht wird als ehlo_resp
-Attribut gespeichert, does_esmtp
wird auf true oder false gesetzt, je nachdem, ob der Server ESMTP unterstützt, und esmtp_features
wird ein Wörterbuch sein, das die Namen der von diesem Server unterstütztenSMTP-Dienst-Erweiterungen und ihre Parameter (falls vorhanden) enthält.
Wenn Sie nicht has_extn()
vor dem Versenden von Mails verwenden möchten, sollte es nicht nötig sein, diese Methode explizit aufzurufen. Sie wird bei Bedarf implizit vonsendmail()
aufgerufen.
SMTP.
ehlo_or_helo_if_needed
()¶
Diese Methode ruft ehlo()
und/oder helo()
auf, wenn es in dieser Sitzung keinen vorherigen EHLO
oder HELO
Befehl gab. Es wird zuerst ESMTP EHLO
versucht.
SMTPHeloError
Der Server hat nicht richtig auf die HELO
-Begrüßung geantwortet.
SMTP.
has_extn
(name)
Return True
if name is in the set of SMTP service extensions returnedby the server, False
otherwise. Groß-/Kleinschreibung wird ignoriert.
SMTP.
verify
(address)¶
Prüfen Sie die Gültigkeit einer Adresse auf diesem Server mittels SMTPVRFY
. Gibt ein Tupel zurück, das aus dem Code 250 und einer vollständigen RFC 822-Adresse (einschließlich humanname) besteht, wenn die Benutzeradresse gültig ist. Andernfalls wird ein SMTP-Fehlercode von 400 oder höher und eine Fehlerzeichenkette zurückgegeben.
Hinweis
Viele Sites deaktivieren SMTP VRFY
, um Spammern zuvorzukommen.
SMTP.
login
(user, password, *, initial_response_ok=True)¶
Melden Sie sich bei einem SMTP-Server an, der eine Authentifizierung verlangt. Die Argumente sind derBenutzername und das Passwort, mit denen die Authentifizierung erfolgen soll. Wenn es keinen vorherigenEHLO
oder HELO
Befehl in dieser Sitzung gab, versucht diese Methode zuerst ESMTP EHLO
. Diese Methode gibt normal zurück, wenn die Authentifizierung erfolgreich war, oder kann die folgenden Ausnahmen auslösen:
SMTPHeloError
Der Server hat die HELO
Begrüßung nicht richtig beantwortet.
SMTPAuthenticationError
Der Server hat die Kombination aus Benutzername und Passwort nicht akzeptiert.
SMTPNotSupportedError
Der AUTH
Befehl wird vom Server nicht unterstützt.
SMTPException
Es wurde keine geeignete Authentifizierungsmethode gefunden.
Jede der von smtplib
unterstützten Authentifizierungsmethoden wird nacheinander ausprobiert, wenn sie vom Server als unterstützt angekündigt werden. Siehe auth()
für eine Liste der unterstützten Authentifizierungsmethoden. initial_response_ok wird an auth()
durchgereicht.
Das optionale Schlüsselwortargument initial_response_ok gibt an, ob bei Authentifizierungsmethoden, die es unterstützen, eine „initiale Antwort“, wie in RFC 4954 spezifiziert, zusammen mit dem AUTH
-Befehl gesendet werden kann, anstatt eine Challenge/Response zu verlangen.
Geändert in Version 3.5: SMTPNotSupportedError
kann ausgelöst werden, und der Parameterinitial_response_ok wurde hinzugefügt.
SMTP.
auth
(mechanism, authobject, *, initial_response_ok=True)¶
Erteilen Sie einen SMTP
AUTH
Befehl für den angegebenen Authentifizierungsmechanismus und behandeln Sie die Challenge-Antwort über authobject.
Mechanismus gibt an, welcher Authentifizierungsmechanismus als Argument für den AUTH
-Befehl verwendet werden soll; die gültigen Werte sind die, die im auth
-Element von esmtp_features
aufgeführt sind.
authobject muss ein aufrufbares Objekt sein, das ein optionales einzelnes Argument annimmt:
data = authobject(challenge=None)
Wenn das optionale Schlüsselwort-Argument initial_response_ok wahr ist,authobject()
wird zuerst ohne Argument aufgerufen. Es kann dieRFC 4954 „initial response“ ASCII str
zurückgeben, die kodiert und mit dem AUTH
-Befehl wie unten dargestellt gesendet wird. Wenn das authobject()
keine initiale Antwort unterstützt (z.B. weil es eine Challenge benötigt), sollte es beim Aufruf mit challenge=None
einNone
zurückgeben. Wenn initial_response_ok isfalse, dann wird authobject()
nicht zuerst mit None
aufgerufen.
Wenn die Prüfung der ersten Antwort None
zurückgibt oder wenn initial_response_ok falsch ist, wird authobject()
aufgerufen, um die Challenge-Antwort des Servers zu verarbeiten; das übergebene Challenge-Argument ist ein bytes
. Es sollte ASCII-str
Daten zurückgeben, die base64-kodiert an den Server gesendet werden.
Die Klasse SMTP
stellt authobjects
für die Mechanismen CRAM-MD5
PLAIN
,und LOGIN
zur Verfügung; sie heißen SMTP.auth_cram_md5
SMTP.auth_plain
, und SMTP.auth_login
. Sie alle erfordern, dass die Eigenschaften user
und password
der Instanz SMTP
auf entsprechende Werte gesetzt werden.
Benutzercode muss normalerweise auth
nicht direkt aufrufen, sondern kann stattdessen die Methode login()
aufrufen, die jeden der oben genannten Mechanismen der Reihe nach in der aufgeführten Reihenfolge ausprobiert. auth
wird ausgesetzt, um die Implementierung von Authentifizierungsmethoden zu erleichtern, die nicht (oder noch nicht) direkt von smtplib
unterstützt werden.
Neu in Version 3.5.
SMTP.
starttls
(keyfile=None, certfile=None, context=None)¶
Setzen Sie die SMTP-Verbindung in den TLS-Modus (Transport Layer Security). Alle folgenden SMTP-Befehle werden dann verschlüsselt. Rufen Sie dann ehlo()
wieder auf.
Wenn keyfile und certfile angegeben werden, werden diese verwendet, um einssl.SSLContext
zu erstellen.
Optionaler Kontextparameter ist ein ssl.SSLContext
-Objekt; Dies ist eine Alternative zur Verwendung einer Schlüsseldatei und einer Zertifizierungsdatei und wenn angegeben, sollten sowohl Schlüsseldatei als auch Zertifizierungsdatei None
sein.
Wenn es keinen vorherigen EHLO
oder HELO
Befehl in dieser Sitzung gab, versucht diese Methode zuerst ESMTP EHLO
.
Veraltet seit Version 3.6: keyfile und certfile sind zugunsten von context veraltet. Verwenden Sie stattdessen ssl.SSLContext.load_cert_chain()
oder lassen Sie ssl.create_default_context()
die vertrauenswürdigen CA-Zertifikate des Systems für Sie auswählen.
SMTPHeloError
Der Server hat nicht richtig auf die HELO
Begrüßung geantwortet.
SMTPNotSupportedError
Der Server unterstützt die STARTTLS-Erweiterung nicht.
RuntimeError
SSL/TLS-Unterstützung ist für Ihren Python-Interpreter nicht verfügbar.
Geändert in Version 3.3: Kontext wurde hinzugefügt.
Geändert in Version 3.4: Die Methode unterstützt jetzt die Hostnamenprüfung mitSSLContext.check_hostname
und Server Name Indicator (sieheHAS_SNI
).
Geändert in Version 3.5: Der Fehler, der wegen fehlender STARTTLS-Unterstützung ausgelöst wird, ist jetzt dieSMTPNotSupportedError
Unterklasse statt der BasisSMTPException
.
SMTP.
sendmail
(from_addr, to_addrs, msg, mail_options=(), rcpt_options=())¶
Senden Sie eine Mail. Die erforderlichen Argumente sind eine RFC 822 from-address-Zeichenfolge, eine Liste von RFC 822 to-address-Zeichenfolgen (eine bloße Zeichenfolge wird als Liste mit 1address behandelt) und eine Nachrichtenzeichenfolge. Der Aufrufer kann eine Liste von ESMTP-Optionen (z. B. 8bitmime
) übergeben, die in MAIL FROM
-Befehlen als mail_options verwendet werden.ESMTP-Optionen (wie DSN
-Befehle), die bei allen RCPT
-Befehlen verwendet werden sollen, können als rcpt_options übergeben werden. (Wenn Sie verschiedene ESMTPoptions für verschiedene Empfänger verwenden möchten, müssen Sie die Low-Level-Methoden wiemail()
rcpt()
und data()
verwenden, um die Nachricht zu versenden.)
Hinweis
Die Parameter from_addr und to_addrs werden verwendet, um den von den Transportagenten verwendeten Nachrichtenumschlag zu konstruieren. sendmail
modifiziert die Nachrichtenköpfe in keiner Weise.
msg kann ein String sein, der Zeichen im ASCII-Bereich enthält, oder ein Bytestring. Ein String wird mit dem Ascii-Codec in Bytes kodiert, und einzelne \r
und \n
Zeichen werden in \r\n
Zeichen umgewandelt. Eine Byte-Zeichenkette wird nicht verändert.
Wenn es in dieser Sitzung keinen vorherigen EHLO
– oder HELO
-Befehl gegeben hat, versucht dieseMethode zuerst ESMTP EHLO
. Wenn der Server ESMTP verwendet, werden die Nachrichtengröße und jede der angegebenen Optionen an ihn übergeben (wenn die Option im Feature-Set enthalten ist, das der Server anbietet). Wenn EHLO
fehlschlägt, wird HELO
versucht und die ESMTP-Optionen werden unterdrückt.
Diese Methode gibt normal zurück, wenn die Mail für mindestens einenEmpfänger akzeptiert wird. Andernfalls löst sie eine Ausnahme aus. Das heißt, wenn diese Methode keine Exception auslöst, dann sollte jemand Ihre Mail bekommen. Wenn diese Methode keine Ausnahme auslöst, gibt sie ein Wörterbuch zurück, mit einem Eintrag für jeden abgelehnten Empfänger. Jeder Eintrag enthält ein Tupel aus dem SMTP-Fehlercode und der dazugehörigen Fehlermeldung, die vom Server gesendet wurde.
Wenn SMTPUTF8
in mail_options enthalten ist und der Server es unterstützt, können from_addr und to_addrs Nicht-ASCII-Zeichen enthalten.
Diese Methode kann die folgenden Ausnahmen auslösen:
SMTPRecipientsRefused
Alle Empfänger wurden abgelehnt. Niemand hat die Mail erhalten. Das recipients
Attribut des Ausnahmeobjekts ist ein Wörterbuch mit Informationen über die abgelehnten Empfänger (wie das, das zurückgegeben wird, wenn mindestens ein Empfänger angenommen wurde).
SMTPHeloError
Der Server hat auf die HELO
Grußbotschaft nicht richtig geantwortet.
SMTPSenderRefused
Der Server hat die from_addr nicht akzeptiert.
SMTPDataError
Der Server antwortete mit einem unerwarteten Fehlercode (anders als eine Ablehnung von arecipient).
SMTPNotSupportedError
SMTPUTF8
wurde in den mail_options angegeben, wird aber vom Server nicht unterstützt.
Wenn nicht anders angegeben, bleibt die Verbindung auch nach dem Auslösen einer Exception offen.
Geändert in Version 3.2: msg kann ein Byte-String sein.
Geändert in Version 3.5: SMTPUTF8
Unterstützung hinzugefügt, und SMTPNotSupportedError
kann beraised werden, wenn SMTPUTF8
angegeben ist, aber der Server es nicht unterstützt.
SMTP.
send_message
(msg, from_addr=None, to_addrs=None, mail_options=(), rcpt_options=())
Dies ist eine Komfortmethode für den Aufruf von sendmail()
mit der Nachricht, die durch ein email.message.Message
-Objekt repräsentiert wird. Die Argumente haben die gleiche Bedeutung wie bei sendmail()
, mit der Ausnahme, dass msg ein Message
Objekt ist.
Wenn from_addr None
oder to_addrs None
ist, füllt send_message
diese Argumente mit Adressen, die aus den Headern von msg gemäß RFC 5322 extrahiert wurden: from_addr wird auf das Absenderfeld gesetzt, wenn es vorhanden ist, und ansonsten auf das From-Feld.to_addrs kombiniert die Werte (falls vorhanden) der Felder To,Cc, und Bcc aus msg. Wenn genau ein Satz Resent-*-Header in der Nachricht vorkommt, werden die regulären Header ignoriert und stattdessen die Resent-*-Header verwendet. Enthält die Nachricht mehr als einen Satz Resent-*-Header, wird ein ValueError
ausgelöst, da es keine Möglichkeit gibt, den jüngsten Satz Resent-Header eindeutig zu erkennen.
send_message
serialisiert msg mitBytesGenerator
mit \r\n
als linesep und ruft sendmail()
auf, um die resultierende Nachricht zu übertragen. Unabhängig von den Werten von from_addr und to_addrs überträgt send_message
keineBcc- oder Resent-Bcc-Header, die in msg erscheinen können. Wenn eine der Adressen in from_addr und to_addrs Nicht-ASCII-Zeichen enthält und der Server keine SMTPUTF8
-Unterstützung anbietet, wird ein SMTPNotSupported
-Fehler ausgegeben. Andernfalls wird das Message
mit einem Klon des policy
mit dem auf utf8
gesetzten Attribut True
serialisiert, undSMTPUTF8
und BODY=8BITMIME
werden zu mail_options hinzugefügt.
Neu in Version 3.2.
Neu in Version 3.5: Unterstützung für internationalisierte Adressen (SMTPUTF8
).
SMTP.
quit