poplib — POP3-Protokollclient¶
Quellcode: Lib/poplib.py
Dieses Modul definiert eine Klasse, POP3, welche eine Verbindung zu einem POP3-Server kapselt und das Protokoll gemäß RFC 1939 implementiert. Die Klasse POP3 unterstützt sowohl den minimalen als auch die optionalen Befehlssätze aus RFC 1939. Die Klasse POP3 unterstützt auch den STLS-Befehl, der in RFC 2595 eingeführt wurde, um die verschlüsselte Kommunikation über eine bereits bestehende Verbindung zu ermöglichen.
Zusätzlich bietet dieses Modul eine Klasse POP3_SSL, die die Verbindung zu POP3-Servern unterstützt, die SSL als zugrunde liegende Protokollschicht verwenden.
Beachten Sie, dass POP3, obwohl weit verbreitet, veraltet ist. Die Implementierungsqualität von POP3-Servern variiert stark und zu viele sind ziemlich schlecht. Wenn Ihr Mailserver IMAP unterstützt, ist die Verwendung der Klasse imaplib.IMAP4 besser, da IMAP-Server tendenziell besser implementiert sind.
Verfügbarkeit: nicht WASI.
Dieses Modul funktioniert nicht oder ist nicht auf WebAssembly verfügbar. Weitere Informationen finden Sie unter WebAssembly-Plattformen.
Das Modul poplib bietet zwei Klassen
- class poplib.POP3(host, port=POP3_PORT[, timeout])¶
Diese Klasse implementiert das eigentliche POP3-Protokoll. Die Verbindung wird bei der Initialisierung der Instanz hergestellt. Wenn port weggelassen wird, wird der Standard-POP3-Port (110) verwendet. Der optionale Parameter timeout gibt ein Timeout in Sekunden für den Verbindungsversuch an (wenn nicht angegeben, wird die globale Standard-Timeout-Einstellung verwendet).
Löst ein Audit-Ereignis
poplib.connectmit den Argumentenself,host,portaus.Alle Befehle lösen ein Audit-Ereignis
poplib.putlinemit den Argumentenselfundlineaus, wobeilinedie Bytes sind, die an den Remote-Host gesendet werden.Geändert in Version 3.9: Wenn der Parameter timeout auf Null gesetzt wird, löst dies einen
ValueErroraus, um die Erstellung eines nicht-blockierenden Sockets zu verhindern.
- class poplib.POP3_SSL(host, port=POP3_SSL_PORT, *, timeout=None, context=None)¶
Dies ist eine Unterklasse von
POP3, die eine Verbindung zum Server über einen SSL-verschlüsselten Socket herstellt. Wenn port nicht angegeben ist, wird 995, der Standard-POP3-über-SSL-Port, verwendet. timeout funktioniert wie im Konstruktor vonPOP3. context ist ein optionalesssl.SSLContext-Objekt, das die Bündelung von SSL-Konfigurationsoptionen, Zertifikaten und privaten Schlüsseln in eine einzige (potenziell langlebige) Struktur ermöglicht. Lesen Sie Sicherheitsüberlegungen für bewährte Praktiken.Löst ein Audit-Ereignis
poplib.connectmit den Argumentenself,host,portaus.Alle Befehle lösen ein Audit-Ereignis
poplib.putlinemit den Argumentenselfundlineaus, wobeilinedie Bytes sind, die an den Remote-Host gesendet werden.Geändert in Version 3.2: Parameter context hinzugefügt.
Geändert in Version 3.4: Die Klasse unterstützt nun die Hostnamenprüfung mit
ssl.SSLContext.check_hostnameund Server Name Indication (siehessl.HAS_SNI).Geändert in Version 3.9: Wenn der Parameter timeout auf Null gesetzt wird, löst dies einen
ValueErroraus, um die Erstellung eines nicht-blockierenden Sockets zu verhindern.Geändert in Version 3.12: Die veralteten Parameter keyfile und certfile wurden entfernt.
Eine Ausnahme wird als Attribut des Moduls poplib definiert
- exception poplib.error_proto¶
Ausnahme, die bei Fehlern aus diesem Modul ausgelöst wird (Fehler aus dem
socket-Modul werden nicht abgefangen). Der Grund für die Ausnahme wird als Zeichenkette an den Konstruktor übergeben.
Siehe auch
- Modul
imaplib Das Standard-Python-IMAP-Modul.
- Häufig gestellte Fragen zu Fetchmail
Die FAQ für den POP/IMAP-Client fetchmail sammelt Informationen über POP3-Servervarianten und RFC-Nichtkonformität, die nützlich sein können, wenn Sie eine Anwendung auf Basis des POP-Protokolls schreiben müssen.
POP3-Objekte¶
Alle POP3-Befehle werden durch Methoden mit demselben Namen in Kleinbuchstaben dargestellt; die meisten geben den vom Server gesendeten Antworttext zurück.
Eine Instanz von POP3 hat die folgenden Methoden
- POP3.set_debuglevel(level)¶
Legt die Debugging-Stufe der Instanz fest. Dies steuert die Menge der ausgegebenen Debugging-Informationen. Der Standardwert
0erzeugt keine Debugging-Ausgabe. Ein Wert von1erzeugt eine moderate Menge an Debugging-Ausgabe, im Allgemeinen eine Zeile pro Anfrage. Ein Wert von2oder höher erzeugt die maximale Menge an Debugging-Ausgabe und protokolliert jede Zeile, die auf der Steuerverbindung gesendet und empfangen wird.
- POP3.getwelcome()¶
Gibt die vom POP3-Server gesendete Begrüßungszeichenkette zurück.
- POP3.capa()¶
Fragt die Fähigkeiten des Servers ab, wie in RFC 2449 spezifiziert. Gibt ein Dictionary im Format
{'name': ['param'...]}zurück.Hinzugefügt in Version 3.4.
- POP3.user(username)¶
Sendet den USER-Befehl, die Antwort sollte anzeigen, dass ein Passwort erforderlich ist.
- POP3.pass_(password)¶
Sendet das Passwort, die Antwort enthält die Nachrichtenanzahl und die Größe der Mailbox. Hinweis: Die Mailbox auf dem Server ist gesperrt, bis
quit()aufgerufen wird.
- POP3.apop(user, secret)¶
Verwendet die sicherere APOP-Authentifizierung, um sich beim POP3-Server anzumelden.
- POP3.rpop(user)¶
Verwendet RPOP-Authentifizierung (ähnlich wie UNIX r-commands), um sich beim POP3-Server anzumelden.
- POP3.stat()¶
Ruft den Status der Mailbox ab. Das Ergebnis ist ein Tupel mit 2 ganzen Zahlen:
(Nachrichtenanzahl, Mailboxgröße).
- POP3.list([which])¶
Fordert die Nachrichtenliste an, das Ergebnis hat das Format
(response, ['mesg_num octets', ...], octets). Wenn which gesetzt ist, ist dies die anzuzeigende Nachricht.
- POP3.retr(which)¶
Ruft die gesamte Nachricht Nummer which ab und setzt ihr "gesehen"-Flag. Das Ergebnis hat das Format
(response, ['line', ...], octets).
- POP3.dele(which)¶
Markiert Nachricht Nummer which zum Löschen. Bei den meisten Servern werden Löschungen erst bei QUIT tatsächlich durchgeführt (die Hauptausnahme ist Eudora QPOP, das absichtlich gegen die RFCs verstößt, indem es ausstehende Löschungen bei jeder Trennung durchführt).
- POP3.rset()¶
Entfernt alle Löschmarkierungen für die Mailbox.
- POP3.noop()¶
Tut nichts. Kann als Keep-Alive verwendet werden.
- POP3.quit()¶
Abmelden: Änderungen committen, Mailbox entsperren, Verbindung trennen.
- POP3.top(which, howmuch)¶
Ruft den Nachrichtenkopf und howmuch Zeilen der Nachricht nach dem Kopf von Nachricht Nummer which ab. Das Ergebnis hat das Format
(response, ['line', ...], octets).Der POP3 TOP-Befehl, den diese Methode verwendet, setzt im Gegensatz zum RETR-Befehl nicht das "gesehen"-Flag der Nachricht; leider ist TOP in den RFCs schlecht spezifiziert und funktioniert bei nicht standardmäßigen Servern häufig nicht. Testen Sie diese Methode manuell gegen die POP3-Server, die Sie verwenden möchten, bevor Sie ihr vertrauen.
- POP3.uidl(which=None)¶
Gibt die Nachrichtenzusammenfassungsliste (eindeutige ID) zurück. Wenn which angegeben ist, enthält das Ergebnis die eindeutige ID für diese Nachricht im Format
'response mesgnum uid, andernfalls ist das Ergebnis eine Liste(response, ['mesgnum uid', ...], octets).
- POP3.utf8()¶
Versucht, in den UTF-8-Modus zu wechseln. Gibt die Serverantwort zurück, wenn erfolgreich, löst
error_protoaus, wenn nicht. Spezifiziert in RFC 6856.Hinzugefügt in Version 3.5.
- POP3.stls(context=None)¶
Startet eine TLS-Sitzung über die aktive Verbindung gemäß RFC 2595. Dies ist nur vor der Benutzerauthentifizierung erlaubt
Der Parameter context ist ein
ssl.SSLContext-Objekt, das die Bündelung von SSL-Konfigurationsoptionen, Zertifikaten und privaten Schlüsseln in eine einzige (potenziell langlebige) Struktur ermöglicht. Lesen Sie Sicherheitsüberlegungen für bewährte Praktiken.Diese Methode unterstützt die Hostnamenprüfung über
ssl.SSLContext.check_hostnameund Server Name Indication (siehessl.HAS_SNI).Hinzugefügt in Version 3.4.
Instanzen von POP3_SSL haben keine zusätzlichen Methoden. Die Schnittstelle dieser Unterklasse ist identisch mit der ihrer Elternklasse.
POP3-Beispiel¶
Hier ist ein minimales Beispiel (ohne Fehlerprüfung), das eine Mailbox öffnet und alle Nachrichten abruft und ausdruckt
import getpass, poplib
M = poplib.POP3('localhost')
M.user(getpass.getuser())
M.pass_(getpass.getpass())
numMessages = len(M.list()[1])
for i in range(numMessages):
for j in M.retr(i+1)[1]:
print(j)
Am Ende des Moduls befindet sich ein Testabschnitt, der ein ausführlicheres Nutzungsbeispiel enthält.