smtplib — SMTP-Protokollclient

Quellcode: Lib/smtplib.py


Das Modul smtplib definiert ein SMTP-Client-Sitzungsobjekt, das verwendet werden kann, um E-Mails an jede Internetmaschine mit einem SMTP- oder ESMTP-Listener-Daemon zu senden. Details zum SMTP- und ESMTP-Betrieb finden Sie in RFC 821 (Simple Mail Transfer Protocol) und RFC 1869 (SMTP Service Extensions).

Verfügbarkeit: nicht WASI.

Dieses Modul funktioniert nicht oder ist nicht auf WebAssembly verfügbar. Weitere Informationen finden Sie unter WebAssembly-Plattformen.

class smtplib.SMTP(host='', port=0, local_hostname=None, [timeout, ]source_address=None)

Eine SMTP-Instanz kapselt eine SMTP-Verbindung. Sie verfügt über Methoden, die ein vollständiges Repertoire an SMTP- und ESMTP-Operationen unterstützen. Wenn die optionalen Parameter host und port angegeben sind, wird die SMTP-Methode connect() während der Initialisierung mit diesen Parametern aufgerufen. Wenn angegeben, wird local_hostname als FQDN des lokalen Hosts im HELO/EHLO-Befehl verwendet. Andernfalls wird der lokale Hostname mit socket.getfqdn() ermittelt. Wenn der Aufruf von connect() etwas anderes als einen Erfolgscode zurückgibt, wird ein SMTPConnectError ausgelöst. Der optionale Parameter timeout gibt eine Zeitüberschreitung in Sekunden für blockierende Operationen wie den Verbindungsversuch an (wenn nicht angegeben, wird die globale Standard-Timeout-Einstellung verwendet). Wenn die Zeitüberschreitung abläuft, wird TimeoutError ausgelöst. Der optionale Parameter source_address ermöglicht die Bindung an eine bestimmte Quelladresse auf einem Rechner mit mehreren Netzwerkschnittstellen und/oder einen bestimmten TCP-Quellport. Er nimmt ein 2-Tupel (host, port) entgegen, an das der Socket als Quelladresse vor der Verbindung gebunden wird. Wenn dies weggelassen wird (oder wenn host oder port '' bzw. 0 sind), wird das Standardverhalten des Betriebssystems verwendet.

Für den normalen Gebrauch benötigen Sie nur die Initialisierungs-/Connect-, sendmail()- und SMTP.quit()-Methoden. Ein Beispiel ist unten enthalten.

Die Klasse SMTP unterstützt die with-Anweisung. Wenn sie so verwendet wird, wird der SMTP-Befehl QUIT automatisch ausgegeben, wenn die with-Anweisung verlassen wird. Z.B.

>>> from smtplib import SMTP
>>> with SMTP("domain.org") as smtp:
...     smtp.noop()
...
(250, b'Ok')
>>>

Alle Befehle lösen ein Audit-Ereignis smtplib.SMTP.send mit den Argumenten self und data aus, wobei data die Bytes sind, die an den Remote-Host gesendet werden sollen.

Geändert in Version 3.3: Die Unterstützung für die with-Anweisung wurde hinzugefügt.

Geändert in Version 3.3: Das Argument source_address wurde hinzugefügt.

Hinzugefügt in Version 3.5: Die SMTPUTF8-Erweiterung (RFC 6531) wird nun unterstützt.

Geändert in Version 3.9: Wenn der Parameter timeout auf Null gesetzt ist, wird ein ValueError ausgelöst, um die Erstellung eines nicht-blockierenden Sockets zu verhindern.

class smtplib.SMTP_SSL(host='', port=0, local_hostname=None, *, [timeout, ]context=None, source_address=None)

Eine SMTP_SSL-Instanz verhält sich genau wie Instanzen von SMTP. SMTP_SSL sollte für Situationen verwendet werden, in denen SSL von Anfang der Verbindung an erforderlich ist und die Verwendung von starttls() nicht geeignet ist. Wenn host nicht angegeben ist, wird der lokale Host verwendet. Wenn port null ist, wird der Standard-SMTP-über-SSL-Port (465) verwendet. Die optionalen Argumente local_hostname, timeout und source_address haben die gleiche Bedeutung wie in der Klasse SMTP. context, ebenfalls optional, kann einen SSLContext enthalten und ermöglicht die Konfiguration verschiedener Aspekte der sicheren Verbindung. Bitte lesen Sie Sicherheitsaspekte für Best Practices.

Geändert in Version 3.3: context wurde hinzugefügt.

Geändert in Version 3.3: Das Argument source_address wurde hinzugefügt.

Geändert in Version 3.4: Die Klasse unterstützt nun die Hostnamenprüfung mit ssl.SSLContext.check_hostname und Server Name Indication (siehe ssl.HAS_SNI).

Geändert in Version 3.9: Wenn der Parameter timeout auf Null gesetzt ist, wird ein ValueError ausgelöst, um die Erstellung eines nicht-blockierenden Sockets zu verhindern.

Geändert in Version 3.12: Die veralteten Parameter keyfile und certfile wurden entfernt.

class smtplib.LMTP(host='', port=LMTP_PORT, local_hostname=None, source_address=None[, timeout])

Das LMTP-Protokoll, das dem ESMTP sehr ähnlich ist, basiert stark auf dem Standard-SMTP-Client. Es ist üblich, Unix-Sockets für LMTP zu verwenden, daher muss unsere Methode connect() dies sowie einen regulären Host:Port-Server unterstützen. Die optionalen Argumente local_hostname und source_address haben die gleiche Bedeutung wie in der Klasse SMTP. Um einen Unix-Socket anzugeben, müssen Sie einen absoluten Pfad für host verwenden, der mit einem '/' beginnt.

Authentifizierung wird unterstützt, unter Verwendung der regulären SMTP-Mechanismen. Bei der Verwendung eines Unix-Sockets unterstützen oder erfordern LMTP im Allgemeinen keine Authentifizierung, aber Ihre Erfahrungen können variieren.

Geändert in Version 3.9: Der optionale Parameter timeout wurde hinzugefügt.

Eine nette Auswahl an Ausnahmen wird ebenfalls definiert

exception smtplib.SMTPException

Unterklasse von OSError, die die Basisklasse für alle anderen Ausnahmen in diesem Modul ist.

Geändert in Version 3.4: SMTPException wurde zur Unterklasse von OSError.

exception smtplib.SMTPServerDisconnected

Diese Ausnahme wird ausgelöst, wenn der Server unerwartet die Verbindung trennt oder wenn versucht wird, die SMTP-Instanz zu verwenden, bevor sie mit einem Server verbunden wurde.

exception smtplib.SMTPResponseException

Basisklasse für alle Ausnahmen, die einen SMTP-Fehlercode enthalten. Diese Ausnahmen werden in einigen Fällen ausgelöst, wenn der SMTP-Server einen Fehlercode zurückgibt.

smtp_code

Der Fehlercode.

smtp_error

Die Fehlermeldung.

exception smtplib.SMTPSenderRefused

Absenderadresse zurückgewiesen. Zusätzlich zu den Attributen, die für alle SMTPResponseException-Ausnahmen gesetzt sind, wird hier 'sender' auf den String gesetzt, den der SMTP-Server zurückgewiesen hat.

exception smtplib.SMTPRecipientsRefused

Alle Empfängeradressen zurückgewiesen.

recipients

Ein Wörterbuch von exakt der gleichen Art wie von SMTP.sendmail() zurückgegeben, das die Fehler für jeden Empfänger enthält.

exception smtplib.SMTPDataError

Der SMTP-Server hat sich geweigert, die Nachrichtendaten zu akzeptieren.

exception smtplib.SMTPConnectError

Fehler bei der Herstellung einer Verbindung zum Server.

exception smtplib.SMTPHeloError

Der Server hat unsere HELO-Nachricht zurückgewiesen.

exception smtplib.SMTPNotSupportedError

Der versuchte Befehl oder die versuchte Option wird vom Server nicht unterstützt.

Hinzugefügt in Version 3.5.

exception smtplib.SMTPAuthenticationError

SMTP-Authentifizierung fehlgeschlagen. Höchstwahrscheinlich hat der Server die angegebene Benutzername/Passwort-Kombination nicht akzeptiert.

Siehe auch

RFC 821 - Simple Mail Transfer Protocol

Protokolldefinition für SMTP. Dieses Dokument behandelt das Modell, die Betriebsverfahren und die Protokolldetails für SMTP.

RFC 1869 - SMTP Service Extensions

Definition der ESMTP-Erweiterungen für SMTP. Diese beschreibt ein Framework zur Erweiterung von SMTP um neue Befehle, zur Unterstützung der dynamischen Erkennung der vom Server bereitgestellten Befehle und definiert einige zusätzliche Befehle.

SMTP-Objekte

Eine SMTP-Instanz hat die folgenden Methoden

SMTP.set_debuglevel(level)

Setzt die Debug-Ausgabeebene. 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 zu Zeitstempeln für diese Nachrichten.

Geändert in Version 3.5: Debuglevel 2 wurde 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.

Dies gibt ein 2-Tupel zurück, bestehend aus einem numerischen Antwortcode und der tatsächlichen Antwortzeile (mehrzeilige Antworten werden zu einer langen Zeile zusammengefügt).

Im normalen Betrieb sollte es nicht notwendig sein, diese Methode explizit aufzurufen. Sie wird zur Implementierung anderer Methoden verwendet und kann zum Testen privater Erweiterungen nützlich sein.

Wenn die Verbindung zum Server beim Warten auf die Antwort verloren geht, wird SMTPServerDisconnected ausgelöst.

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

Verbindet sich mit einem Host über einen gegebenen Port. Die Standardwerte sind, sich mit dem lokalen Host über den Standard-SMTP-Port (25) zu verbinden. Wenn der Hostname mit einem Doppelpunkt (':') gefolgt von einer Zahl endet, wird dieser Suffix entfernt und die Zahl als Portnummer interpretiert. Diese Methode wird automatisch vom Konstruktor aufgerufen, wenn während der Instanziierung ein Host angegeben wurde. Gibt ein 2-Tupel aus dem Antwortcode und der Nachricht zurück, die vom Server in seiner Verbindungsantwort gesendet wurde.

Löst ein Audit-Ereignis smtplib.connect mit den Argumenten self, host, port aus.

SMTP.helo(name='')

Identifiziert sich mit HELO beim SMTP-Server. Das Hostnamenargument ist standardmäßig der vollqualifizierte Domainname des lokalen Hosts. Die vom Server zurückgegebene Nachricht wird im Attribut helo_resp des Objekts gespeichert.

Im normalen Betrieb sollte es nicht notwendig sein, diese Methode explizit aufzurufen. Sie wird bei Bedarf implizit von sendmail() aufgerufen.

SMTP.ehlo(name='')

Identifiziert sich mit EHLO bei einem ESMTP-Server. Das Hostnamenargument ist standardmäßig der vollqualifizierte Domainname des lokalen Hosts. Analysiert die Antwort auf ESMTP-Optionen und speichert sie für die Verwendung durch has_extn(). Setzt auch mehrere informative Attribute: die vom Server zurückgegebene Nachricht wird im Attribut ehlo_resp gespeichert, does_esmtp wird auf True oder False gesetzt, je nachdem, ob der Server ESMTP unterstützt, und esmtp_features ist ein Wörterbuch, das die Namen der von diesem Server unterstützten SMTP-Dienst-Erweiterungen und ihre Parameter (falls vorhanden) enthält.

Sofern Sie has_extn() vor dem Senden von E-Mails nicht verwenden möchten, sollte diese Methode nicht explizit aufgerufen werden. Sie wird bei Bedarf implizit von sendmail() aufgerufen.

SMTP.ehlo_or_helo_if_needed()

Diese Methode ruft ehlo() und/oder helo() auf, wenn in dieser Sitzung zuvor kein EHLO- oder HELO-Befehl ausgeführt wurde. Sie versucht zuerst das ESMTP-Kommando EHLO.

SMTPHeloError

Der Server hat nicht ordnungsgemäß auf die HELO-Begrüßung reagiert.

SMTP.has_extn(name)

Gibt True zurück, wenn name in der Menge der vom Server zurückgegebenen SMTP-Dienst-Erweiterungen enthalten ist, andernfalls False. Groß-/Kleinschreibung wird ignoriert.

SMTP.verify(address)

Überprüft die Gültigkeit einer Adresse auf diesem Server mithilfe des SMTP-Befehls VRFY. Gibt ein Tupel zurück, das aus dem Code 250 und einer vollständigen RFC 822-Adresse (einschließlich des menschlichen Namens) besteht, wenn die Benutzeradresse gültig ist. Andernfalls wird ein SMTP-Fehlercode von 400 oder höher und eine Fehlermeldung zurückgegeben.

Hinweis

Viele Standorte deaktivieren SMTP VRFY, um Spammer zu vereiteln.

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

Meldet sich bei einem SMTP-Server an, der eine Authentifizierung erfordert. Die Argumente sind der Benutzername und das Passwort zur Authentifizierung. Wenn in dieser Sitzung noch kein vorheriger EHLO- oder HELO-Befehl ausgeführt wurde, versucht diese Methode zunächst ESMTP EHLO. Diese Methode gibt normal zurück, wenn die Authentifizierung erfolgreich war, oder kann die folgenden Ausnahmen auslösen

SMTPHeloError

Der Server hat nicht ordnungsgemäß auf die HELO-Begrüßung reagiert.

SMTPAuthenticationError

Der Server hat die Benutzername/Passwort-Kombination nicht akzeptiert.

SMTPNotSupportedError

Der Befehl AUTH 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 beworben werden. Siehe auth() für eine Liste der unterstützten Authentifizierungsmethoden. initial_response_ok wird an auth() weitergegeben.

Das optionale Schlüsselwortargument initial_response_ok gibt an, ob für Authentifizierungsmethoden, die dies unterstützen, eine "initiale Antwort" gemäß RFC 4954 zusammen mit dem Befehl AUTH gesendet werden kann, anstatt eine Herausforderung/Antwort zu erfordern.

Geändert in Version 3.5: SMTPNotSupportedError kann ausgelöst werden, und der Parameter initial_response_ok wurde hinzugefügt.

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

Gibt einen SMTP AUTH-Befehl für den angegebenen Authentifizierungsmechanismus mechanism aus und verarbeitet die Herausforderungsantwort über authobject.

mechanism gibt an, welcher Authentifizierungsmechanismus als Argument für den Befehl AUTH verwendet werden soll; die gültigen Werte sind die, die im Element auth von esmtp_features aufgeführt sind.

authobject muss ein aufrufbares Objekt sein, das ein optionales einzelnes Argument akzeptiert

data = authobject(challenge=None)

Wenn das optionale Schlüsselwortargument initial_response_ok wahr ist, wird authobject() zuerst ohne Argument aufgerufen. Es kann die RFC 4954 "initial response" als ASCII str zurückgeben, die dann kodiert und mit dem Befehl AUTH wie unten beschrieben gesendet wird. Wenn authobject() keine initiale Antwort unterstützt (z. B. weil sie eine Herausforderung erfordert), sollte es None zurückgeben, wenn es mit challenge=None aufgerufen wird. Wenn initial_response_ok falsch ist, wird authobject() nicht zuerst mit None aufgerufen.

Wenn die Prüfung der initialen Antwort None zurückgibt oder wenn initial_response_ok falsch ist, wird authobject() aufgerufen, um die Herausforderungsantwort des Servers zu verarbeiten. Das Argument challenge, das ihm übergeben wird, ist ein bytes-Objekt. Es sollte ASCII str data zurückgeben, die base64-kodiert und an den Server gesendet wird.

Die Klasse SMTP stellt authobjects für die Mechanismen CRAM-MD5, PLAIN und LOGIN bereit; sie sind entsprechend SMTP.auth_cram_md5, SMTP.auth_plain und SMTP.auth_login benannt. Sie alle erfordern, dass die Eigenschaften user und password der SMTP-Instanz auf entsprechende Werte gesetzt sind.

Benutzercode muss auth normalerweise nicht direkt aufrufen, sondern kann stattdessen die Methode login() aufrufen, die nacheinander jeden der obigen Mechanismen in der aufgeführten Reihenfolge versucht. auth ist freigelegt, um die Implementierung von Authentifizierungsmethoden zu erleichtern, die nicht direkt von smtplib unterstützt werden (oder noch nicht).

Hinzugefügt in Version 3.5.

SMTP.starttls(*, context=None)

Setzt die SMTP-Verbindung in den TLS-Modus (Transport Layer Security). Alle nachfolgenden SMTP-Befehle werden verschlüsselt. Sie sollten dann ehlo() erneut aufrufen.

Wenn keyfile und certfile angegeben sind, werden sie verwendet, um einen ssl.SSLContext zu erstellen.

Der optionale Parameter context ist ein ssl.SSLContext-Objekt; dies ist eine Alternative zur Verwendung eines Schlüssel- und Zertifikatsdateis, und falls angegeben, sollten sowohl keyfile als auch certfile None sein.

Wenn zuvor kein EHLO- oder HELO-Befehl in dieser Sitzung gesendet wurde, versucht diese Methode zuerst ESMTP EHLO.

Geändert in Version 3.12: Die veralteten Parameter keyfile und certfile wurden entfernt.

SMTPHeloError

Der Server hat nicht ordnungsgemäß auf die HELO-Begrüßung reagiert.

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: context wurde hinzugefügt.

Geändert in Version 3.4: Die Methode unterstützt jetzt Hostnamenprüfungen mit ssl.SSLContext.check_hostname und dem *Server Name Indicator* (siehe HAS_SNI).

Geändert in Version 3.5: Der für mangelnde STARTTLS-Unterstützung ausgelöste Fehler ist nun die Unterklasse SMTPNotSupportedError anstelle der Basisklasse SMTPException.

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

Mail senden. Die erforderlichen Argumente sind eine RFC 822-Absenderadresse (from-address) als String, eine Liste von RFC 822-Empfängeradressen (to-address) als Strings (ein nackter String wird als Liste mit einer Adresse behandelt) und eine Nachricht als String. Der Aufrufer kann eine Liste von ESMTP-Optionen (wie z. B. 8bitmime) übergeben, die in MAIL FROM-Befehlen als mail_options verwendet werden sollen. ESMTP-Optionen (wie z. B. DSN-Befehle), die mit allen RCPT-Befehlen verwendet werden sollen, können als rcpt_options übergeben werden. (Wenn Sie unterschiedliche ESMTP-Optionen für verschiedene Empfänger verwenden müssen, müssen Sie die Low-Level-Methoden wie mail(), rcpt() und data() zum Senden der Nachricht verwenden.)

Hinweis

Die Parameter from_addr und to_addrs werden verwendet, um die Nachrichten-Hülle zu konstruieren, die von den Transportagenten verwendet wird. sendmail modifiziert die Nachrichten-Header in keiner Weise.

msg kann ein String sein, der Zeichen im ASCII-Bereich enthält, oder ein Byte-String. Ein String wird mit dem ASCII-Codec in Bytes kodiert, und einzelne \r- und \n-Zeichen werden in \r\n-Zeichen umgewandelt. Ein Byte-String wird nicht modifiziert.

Wenn zuvor kein EHLO- oder HELO-Befehl in dieser Sitzung gesendet wurde, versucht diese Methode zuerst ESMTP EHLO. Wenn der Server ESMTP unterstützt, werden Nachrichtengröße und jede der angegebenen Optionen an ihn übergeben (sofern die Option im vom Server angebotenen Funktionsumfang enthalten ist). Wenn EHLO fehlschlägt, wird HELO versucht und ESMTP-Optionen werden unterdrückt.

Diese Methode gibt normal zurück, wenn die Nachricht für mindestens einen Empfänger akzeptiert wird. Andernfalls löst sie eine Ausnahme aus. Das heißt, wenn diese Methode keine Ausnahme auslöst, dann sollte jemand Ihre E-Mail erhalten. Wenn diese Methode keine Ausnahme auslöst, gibt sie ein Wörterbuch zurück, mit einem Eintrag für jeden Empfänger, der abgelehnt wurde. Jeder Eintrag enthält ein Tupel aus dem SMTP-Fehlercode und der begleitenden Fehlermeldung des Servers.

Wenn SMTPUTF8 in mail_options enthalten ist und der Server dies 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 E-Mail erhalten.

SMTPHeloError

Der Server hat nicht ordnungsgemäß auf die HELO-Begrüßung reagiert.

SMTPSenderRefused

Der Server hat die from_addr nicht akzeptiert.

SMTPDataError

Der Server antwortete mit einem unerwarteten Fehlercode (außer einer Ablehnung eines Empfängers).

SMTPNotSupportedError

SMTPUTF8 wurde in mail_options angegeben, wird aber vom Server nicht unterstützt.

Sofern nicht anders angegeben, bleibt die Verbindung auch nach Auslösung einer Ausnahme geöffnet.

Geändert in Version 3.2: msg kann ein Byte-String sein.

Geändert in Version 3.5: Unterstützung für SMTPUTF8 hinzugefügt, und SMTPNotSupportedError kann ausgelöst werden, wenn SMTPUTF8 angegeben ist, der Server es aber nicht unterstützt.

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

Dies ist eine Komfortmethode zum Aufrufen von sendmail() mit der Nachricht, die durch ein email.message.Message-Objekt repräsentiert wird. Die Argumente haben die gleiche Bedeutung wie für sendmail(), außer dass msg ein Message-Objekt ist.

Wenn from_addr None ist oder to_addrs None ist, füllt send_message diese Argumente mit Adressen, die aus den Headern von msg extrahiert wurden, wie in RFC 5322 angegeben: from_addr wird auf das Feld Sender gesetzt, falls vorhanden, andernfalls auf das Feld From. to_addrs kombiniert die Werte (falls vorhanden) der Felder To, Cc und Bcc aus msg. Wenn genau eine Gruppe von Resent-* Headern in der Nachricht erscheint, werden die regulären Header ignoriert und stattdessen die Resent-* Header verwendet. Wenn die Nachricht mehr als eine Gruppe von Resent-* Headern enthält, wird ein ValueError ausgelöst, da es keine Möglichkeit gibt, die aktuellste Gruppe von Resent- Headern eindeutig zu identifizieren.

send_message serialisiert msg mit BytesGenerator 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 keine Bcc- oder Resent-Bcc-Header, die in msg vorkommen könnten. Wenn eine der Adressen in from_addr und to_addrs Nicht-ASCII-Zeichen enthält und der Server keine SMTPUTF8-Unterstützung anbietet, wird eine SMTPNotSupportedError ausgelöst. Andernfalls wird die Message mit einer Kopie ihrer policy serialisiert, wobei das Attribut utf8 auf True gesetzt ist, und SMTPUTF8 und BODY=8BITMIME werden zu mail_options hinzugefügt.

Hinzugefügt in Version 3.2.

Hinzugefügt in Version 3.5: Unterstützung für internationalisierte Adressen (SMTPUTF8).

SMTP.quit()

Beendet die SMTP-Sitzung und schließt die Verbindung. Gibt das Ergebnis des SMTP-Befehls QUIT zurück.

Low-Level-Methoden, die den Standard-SMTP/ESMTP-Befehlen HELP, RSET, NOOP, MAIL, RCPT und DATA entsprechen, werden ebenfalls unterstützt. Normalerweise müssen diese nicht direkt aufgerufen werden, daher sind sie hier nicht dokumentiert. Details finden Sie im Modulcode.

Zusätzlich hat eine SMTP-Instanz die folgenden Attribute

SMTP.helo_resp

Die Antwort auf den Befehl HELO, siehe helo().

SMTP.ehlo_resp

Die Antwort auf den Befehl EHLO, siehe ehlo().

SMTP.does_esmtp

Ein boolescher Wert, der angibt, ob der Server ESMTP unterstützt, siehe ehlo().

SMTP.esmtp_features

Ein Wörterbuch der Namen von SMTP-Diensterweiterungen, die vom Server unterstützt werden, siehe ehlo().

SMTP-Beispiel

Dieses Beispiel fordert den Benutzer zur Eingabe der Adressen auf, die für die Nachrichten-Hülle benötigt werden ('An' und 'Von'-Adressen), sowie der zu liefernden Nachricht. Beachten Sie, dass die mit der Nachricht zu versendenden Header in der eingegebenen Nachricht enthalten sein müssen; dieses Beispiel verarbeitet die RFC 822-Header nicht. Insbesondere müssen die 'An'- und 'Von'-Adressen explizit in den Nachrichten-Headern enthalten sein

import smtplib

def prompt(title):
    return input(title).strip()

from_addr = prompt("From: ")
to_addrs  = prompt("To: ").split()
print("Enter message, end with ^D (Unix) or ^Z (Windows):")

# Add the From: and To: headers at the start!
lines = [f"From: {from_addr}", f"To: {', '.join(to_addrs)}", ""]
while True:
    try:
        line = input()
    except EOFError:
        break
    else:
        lines.append(line)

msg = "\r\n".join(lines)
print("Message length is", len(msg))

server = smtplib.SMTP("localhost")
server.set_debuglevel(1)
server.sendmail(from_addr, to_addrs, msg)
server.quit()

Hinweis

Im Allgemeinen möchten Sie die Funktionen des Pakets email verwenden, um eine E-Mail-Nachricht zu erstellen, die Sie dann über send_message() versenden können; siehe email: Beispiele.