smtplib – SMTP-Protokoll-Client¶

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 selfhostport.

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_respAttribut 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 EHLOversucht.

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 HELOBegrüßung nicht richtig beantwortet.

SMTPAuthenticationError

Der Server hat die Kombination aus Benutzername und Passwort nicht akzeptiert.

SMTPNotSupportedError

Der AUTHBefehl 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 SMTPAUTHBefehl 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-MD5PLAIN,und LOGIN zur Verfügung; sie heißen SMTP.auth_cram_md5SMTP.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 \rund \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 recipientsAttribut 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 HELOGruß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 MessageObjekt 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

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.