imaplib — IMAP4 Protokoll-Client

Quellcode: Lib/imaplib.py


Dieses Modul definiert drei Klassen: IMAP4, IMAP4_SSL und IMAP4_stream, welche eine Verbindung zu einem IMAP4-Server kapseln und einen großen Teil des IMAP4rev1-Client-Protokolls, wie in RFC 2060 definiert, implementieren. Es ist abwärtskompatibel mit IMAP4 (RFC 1730) Servern, aber beachten Sie, dass der STATUS Befehl in IMAP4 nicht unterstützt wird.

Verfügbarkeit: nicht WASI.

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

Drei Klassen werden vom imaplib Modul bereitgestellt. IMAP4 ist die Basisklasse.

class imaplib.IMAP4(host='', port=IMAP4_PORT, timeout=None)

Diese Klasse implementiert das eigentliche IMAP4-Protokoll. Die Verbindung wird hergestellt und die Protokollversion (IMAP4 oder IMAP4rev1) wird bei der Initialisierung der Instanz bestimmt. Wenn host nicht angegeben ist, wird '' (der lokale Host) verwendet. Wenn port weggelassen wird, wird der Standard-IMAP4-Port (143) verwendet. Der optionale Parameter timeout gibt ein Timeout in Sekunden für den Verbindungsversuch an. Wenn timeout nicht angegeben oder None ist, wird das globale Standard-Socket-Timeout verwendet.

Die IMAP4 Klasse unterstützt die with-Anweisung. Wenn sie so verwendet wird, wird der IMAP4 LOGOUT Befehl automatisch ausgegeben, wenn die with-Anweisung beendet wird. Z.B.

>>> from imaplib import IMAP4
>>> with IMAP4("domain.org") as M:
...     M.noop()
...
('OK', [b'Nothing Accomplished. d25if65hy903weo.87'])

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

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

Drei Ausnahmen werden als Attribute der IMAP4 Klasse definiert.

exception IMAP4.error

Ausnahme, die bei Fehlern ausgelöst wird. Der Grund für die Ausnahme wird als String an den Konstruktor übergeben.

exception IMAP4.abort

IMAP4-Serverfehler führen zum Auslösen dieser Ausnahme. Dies ist eine Unterklasse von IMAP4.error. Beachten Sie, dass das Schließen der Instanz und die Instanziierung einer neuen normalerweise eine Wiederherstellung von dieser Ausnahme ermöglichen.

exception IMAP4.readonly

Diese Ausnahme wird ausgelöst, wenn eine beschreibbare Mailbox ihren Status vom Server ändern lässt. Dies ist eine Unterklasse von IMAP4.error. Ein anderer Client hat nun Schreibrechte, und die Mailbox muss neu geöffnet werden, um die Schreibrechte wiederzuerlangen.

Es gibt auch eine Unterklasse für sichere Verbindungen.

class imaplib.IMAP4_SSL(host='', port=IMAP4_SSL_PORT, *, ssl_context=None, timeout=None)

Dies ist eine Unterklasse von IMAP4, die über einen SSL-verschlüsselten Socket eine Verbindung herstellt (um diese Klasse zu verwenden, benötigen Sie ein Socket-Modul, das mit SSL-Unterstützung kompiliert wurde). Wenn host nicht angegeben ist, wird '' (der lokale Host) verwendet. Wenn port weggelassen wird, wird der Standard-IMAP4-über-SSL-Port (993) verwendet. ssl_context ist ein ssl.SSLContext-Objekt, das es ermöglicht, SSL-Konfigurationsoptionen, Zertifikate und private Schlüssel in einer einzigen (möglicherweise langlebigen) Struktur zu bündeln. Bitte lesen Sie Sicherheitsüberlegungen für Best Practices.

Der optionale Parameter timeout gibt ein Timeout in Sekunden für den Verbindungsversuch an. Wenn timeout nicht angegeben oder None ist, wird das globale Standard-Socket-Timeout verwendet.

Geändert in Version 3.3: Der Parameter ssl_context 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: Der optionale Parameter timeout wurde hinzugefügt.

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

Die zweite Unterklasse ermöglicht Verbindungen, die von einem untergeordneten Prozess erstellt wurden.

class imaplib.IMAP4_stream(command)

Dies ist eine Unterklasse von IMAP4, die eine Verbindung zu den stdin/stdout-Deskriptoren herstellt, die durch Übergabe von command an subprocess.Popen() erzeugt werden.

Die folgenden Hilfsfunktionen sind definiert.

imaplib.Internaldate2tuple(datestr)

Analysiert einen IMAP4 INTERNALDATE String und gibt die entsprechende lokale Zeit zurück. Der Rückgabewert ist ein time.struct_time Tupel oder None, wenn der String ein falsches Format hat.

imaplib.Int2AP(num)

Konvertiert eine Ganzzahl in eine Byte-Repräsentation unter Verwendung von Zeichen aus der Menge [A .. P].

imaplib.ParseFlags(flagstr)

Konvertiert eine IMAP4 FLAGS Antwort in ein Tupel einzelner Flags.

imaplib.Time2Internaldate(date_time)

Konvertiert date_time in eine IMAP4 INTERNALDATE Darstellung. Der Rückgabewert ist ein String im Format: "DD-Mmm-YYYY HH:MM:SS +HHMM" (einschließlich Anführungszeichen). Das Argument date_time kann eine Zahl (int oder float) sein, die Sekunden seit der Epoche darstellt (wie von time.time() zurückgegeben), ein 9-Tupel, das die lokale Zeit darstellt, eine Instanz von time.struct_time (wie von time.localtime() zurückgegeben), eine bewusste Instanz von datetime.datetime oder ein doppelt von Anführungszeichen umschlossener String. In letzterem Fall wird angenommen, dass er bereits im korrekten Format vorliegt.

Beachten Sie, dass sich IMAP4-Nachrichtennummern ändern, wenn sich die Mailbox ändert; insbesondere werden nach einem EXPUNGE Befehl, der Löschungen durchführt, die verbleibenden Nachrichten neu nummeriert. Daher ist es dringend ratsam, stattdessen UIDs mit dem UID-Befehl zu verwenden.

Am Ende des Moduls befindet sich ein Testbereich, der ein umfassenderes Beispiel für die Verwendung enthält.

Siehe auch

Dokumente, die das Protokoll beschreiben, Quellen für implementierende Server, vom IMAP Information Center der University of Washington können alle unter (Quellcode) https://github.com/uw-imap/imap (Nicht gepflegt) gefunden werden.

IMAP4 Objekte

Alle IMAP4rev1-Befehle werden durch Methoden mit demselben Namen repräsentiert, entweder in Groß- oder Kleinschreibung.

Alle Argumente von Befehlen werden in Strings umgewandelt, außer für AUTHENTICATE und das letzte Argument von APPEND, das als IMAP4-Literal übergeben wird. Falls erforderlich (der String enthält Protokoll-sensitive Zeichen von IMAP4 und ist weder von Klammern noch von doppelten Anführungszeichen umschlossen), wird jeder String in Anführungszeichen gesetzt. Das Argument password für den Befehl LOGIN wird jedoch immer in Anführungszeichen gesetzt. Wenn Sie verhindern möchten, dass ein Argument-String in Anführungszeichen gesetzt wird (z. B. das Argument flags für STORE), umschließen Sie den String mit Klammern (z. B. r'(\Deleted)').

Die meisten Befehle geben ein Tupel zurück: (type, [data, ...]) wobei type normalerweise 'OK' oder 'NO' ist und data entweder der Text der Befehlsantwort oder vorgeschriebene Ergebnisse des Befehls ist. Jedes data ist entweder ein bytes oder ein Tupel. Wenn es ein Tupel ist, ist der erste Teil der Header der Antwort und der zweite Teil enthält die Daten (d. h. den 'Literal'-Wert).

Die Optionen message_set für die folgenden Befehle sind ein String, der eine oder mehrere Nachrichten angibt, auf die zugegriffen werden soll. Es kann eine einfache Nachrichtennummer ('1'), ein Bereich von Nachrichtennummern ('2:4') oder eine Gruppe von nicht zusammenhängenden Bereichen sein, die durch Kommas getrennt sind ('1:3,6:9'). Ein Bereich kann ein Sternchen enthalten, um eine unendliche Obergrenze anzugeben ('3:*').

Eine IMAP4-Instanz hat die folgenden Methoden:

IMAP4.append(mailbox, flags, date_time, message)

Fügt message an die benannte Mailbox an.

IMAP4.authenticate(mechanism, authobject)

Authentifizierungsbefehl – erfordert Antwortverarbeitung.

mechanism gibt den zu verwendenden Authentifizierungsmechanismus an – er sollte in der Instanzvariable capabilities in der Form AUTH=mechanism erscheinen.

authobject muss ein aufrufbares Objekt sein.

data = authobject(response)

Es wird aufgerufen, um Server-Fortsetzungsantworten zu verarbeiten; das response-Argument, das ihm übergeben wird, ist bytes. Es sollte bytes data zurückgeben, das base64-kodiert und an den Server gesendet wird. Es sollte None zurückgeben, wenn stattdessen die Client-Abbruchantwort * gesendet werden soll.

Geändert in Version 3.5: Benutzernamen und Passwörter als Strings werden jetzt in utf-8 kodiert, anstatt auf ASCII beschränkt zu sein.

IMAP4.check()

Überprüft die Mailbox auf dem Server.

IMAP4.close()

Schließt die aktuell ausgewählte Mailbox. Gelöschte Nachrichten werden aus der beschreibbaren Mailbox entfernt. Dies ist der empfohlene Befehl vor LOGOUT.

IMAP4.copy(message_set, new_mailbox)

Kopiert message_set Nachrichten ans Ende von new_mailbox.

IMAP4.create(mailbox)

Erstellt eine neue Mailbox namens mailbox.

IMAP4.delete(mailbox)

Löscht die alte Mailbox namens mailbox.

IMAP4.deleteacl(mailbox, who)

Löscht die ACLs (entfernt Rechte) für who auf der Mailbox.

IMAP4.enable(capability)

Aktiviert capability (siehe RFC 5161). Die meisten Fähigkeiten müssen nicht aktiviert werden. Derzeit wird nur die Fähigkeit UTF8=ACCEPT unterstützt (siehe RFC 6855).

Hinzugefügt in Version 3.5: Die Methode enable() selbst und die Unterstützung für RFC 6855.

IMAP4.expunge()

Entfernt gelöschte Elemente dauerhaft aus der ausgewählten Mailbox. Generiert für jede gelöschte Nachricht eine EXPUNGE-Antwort. Die zurückgegebenen Daten enthalten eine Liste von EXPUNGE-Nachrichtennummern in der Reihenfolge des Empfangs.

IMAP4.fetch(message_set, message_parts)

Ruft (Teile von) Nachrichten ab. message_parts sollte ein String von Nachrichtenteil-Namen sein, die in Klammern eingeschlossen sind, z. B.: "(UID BODY[TEXT])". Die zurückgegebenen Daten sind Tupel von Nachrichtenteil-Umschlag und Daten.

IMAP4.getacl(mailbox)

Ruft die ACLs für mailbox ab. Die Methode ist nicht standardmäßig, wird aber vom Cyrus-Server unterstützt.

IMAP4.getannotation(mailbox, entry, attribute)

Ruft die angegebenen ANNOTATIONs für mailbox ab. Die Methode ist nicht standardmäßig, wird aber vom Cyrus-Server unterstützt.

IMAP4.getquota(root)

Ruft die Ressourcenbelegung und Limits des quota root ab. Diese Methode ist Teil der IMAP4 QUOTA-Erweiterung, wie in rfc2087 definiert.

IMAP4.getquotaroot(mailbox)

Ruft die Liste der quota roots für die benannte mailbox ab. Diese Methode ist Teil der IMAP4 QUOTA-Erweiterung, wie in rfc2087 definiert.

IMAP4.idle(duration=None)

Gibt ein Idler zurück: einen iterierbaren Kontextmanager, der den IMAP4 IDLE-Befehl wie in RFC 2177 definiert, implementiert.

Das zurückgegebene Objekt sendet den IDLE-Befehl, wenn es durch die with-Anweisung aktiviert wird, produziert IMAP-nicht markierte Antworten über das Iterator-Protokoll und sendet DONE beim Beenden des Kontexts.

Alle nicht markierten Antworten, die nach dem Senden des IDLE-Befehls eintreffen (einschließlich derer, die eintreffen, bevor der Server den Befehl bestätigt), sind über Iteration verfügbar. Alle verbleibenden Antworten (die nicht im with-Kontext iteriert wurden) können nach dem Ende von IDLE auf übliche Weise über IMAP4.response() abgerufen werden.

Antworten werden als (type, [data, ...]) Tupel dargestellt, wie in IMAP4 Objekte beschrieben.

Das Argument duration legt eine maximale Dauer (in Sekunden) fest, um im IDLE-Modus zu bleiben, danach stoppt jede laufende Iteration. Es kann ein int oder float sein, oder None für kein Zeitlimit. Aufrufer, die Inaktivitäts-Timeouts auf Servern vermeiden möchten, die diese verwenden, sollten diesen Wert auf maximal 29 Minuten (1740 Sekunden) einstellen. Erfordert eine Socket-Verbindung; duration muss bei IMAP4_stream-Verbindungen None sein.

>>> with M.idle(duration=29 * 60) as idler:
...     for typ, data in idler:
...         print(typ, data)
...
EXISTS [b'1']
RECENT [b'1']
Idler.burst(interval=0.1)

Gibt einen Stoß von Antworten zurück, die nicht mehr als interval Sekunden voneinander entfernt sind (ausgedrückt als int oder float).

Dieser Generator ist eine Alternative zum Iterieren einer Antwort nach der anderen und dient zur Unterstützung einer effizienten Stapelverarbeitung. Er ruft die nächste Antwort zusammen mit allen sofort verfügbaren nachfolgenden Antworten ab. (Zum Beispiel eine schnelle Serie von EXPUNGE-Antworten nach einer Massenlöschung.)

Erfordert eine Socket-Verbindung; funktioniert nicht bei IMAP4_stream-Verbindungen.

>>> with M.idle() as idler:
...     # get a response and any others following by < 0.1 seconds
...     batch = list(idler.burst())
...     print(f'processing {len(batch)} responses...')
...     print(batch)
...
processing 3 responses...
[('EXPUNGE', [b'2']), ('EXPUNGE', [b'1']), ('RECENT', [b'0'])]

Tipp

Die maximale Dauer des IDLE-Kontextes, wie an IMAP4.idle() übergeben, wird beachtet, wenn auf die erste Antwort in einem Stoß gewartet wird. Daher führt ein abgelaufener Idler dazu, dass dieser Generator sofort zurückkehrt, ohne etwas zu erzeugen. Aufrufer sollten dies berücksichtigen, wenn sie ihn in einer Schleife verwenden.

Hinweis

Der von IMAP4.idle() zurückgegebene Iterator ist nur innerhalb einer with-Anweisung verwendbar. Vor oder nach diesem Kontext werden nicht angeforderte Antworten intern gesammelt, sobald ein Befehl abgeschlossen ist, und können mit IMAP4.response() abgerufen werden.

Hinweis

Der Klassenname und die Struktur von Idler sind interne Schnittstellen und können sich ändern. Aufrufender Code kann sich auf die Kontextverwaltung, Iteration und öffentlichen Methoden verlassen, die stabil bleiben, sollte die Klasse jedoch nicht unterklassifizieren, instanziieren, vergleichen oder anderweitig direkt referenzieren.

Hinzugefügt in Version 3.14.

IMAP4.list([directory[, pattern]])

Listet Postfachnamen im directory auf, die dem pattern entsprechen. directory ist standardmäßig der oberste Mail-Ordner, und pattern entspricht standardmäßig allem. Die zurückgegebenen Daten enthalten eine Liste von LIST-Antworten.

IMAP4.login(user, password)

Identifiziert den Client mit einem Klartextpasswort. Das password wird in Anführungszeichen gesetzt.

IMAP4.login_cram_md5(user, password)

Erzwingt die Verwendung der CRAM-MD5-Authentifizierung bei der Identifizierung des Clients, um das Passwort zu schützen. Funktioniert nur, wenn die CAPABILITY-Antwort des Servers den Ausdruck AUTH=CRAM-MD5 enthält.

Geändert in Version 3.14: Es wird eine IMAP4.error ausgelöst, wenn die MD5-Unterstützung nicht verfügbar ist.

IMAP4.logout()

Beendet die Verbindung zum Server. Gibt die BYE-Antwort des Servers zurück.

Geändert in Version 3.8: Die Methode ignoriert nun nicht mehr stillschweigend beliebige Ausnahmen.

IMAP4.lsub(directory='""', pattern='*')

Listet die abonnierten Postfachnamen im Verzeichnis auf, die dem Muster entsprechen. directory ist standardmäßig das oberste Verzeichnis und pattern entspricht standardmäßig jedem Postfach. Zurückgegebene Daten sind Tupel aus Nachrichten-Envelope und Daten.

IMAP4.myrights(mailbox)

Zeigt meine ACLs für ein Postfach an (d. h. die Rechte, die ich an dem Postfach habe).

IMAP4.namespace()

Gibt IMAP-Namespaces gemäß RFC 2342 zurück.

IMAP4.noop()

Sendet NOOP an den Server.

IMAP4.open(host, port, timeout=None)

Öffnet einen Socket zu port auf host. Der optionale Parameter timeout gibt eine Zeitüberschreitung in Sekunden für den Verbindungsversuch an. Wenn kein Timeout angegeben ist oder es None ist, wird der globale Standard-Socket-Timeout verwendet. Beachten Sie auch, dass wenn der Parameter timeout auf Null gesetzt wird, eine ValueError ausgelöst wird, um die Erstellung eines nicht blockierenden Sockets abzulehnen. Diese Methode wird implizit vom Konstruktor IMAP4 aufgerufen. Die von dieser Methode hergestellten Verbindungsobjekte werden in den Methoden IMAP4.read(), IMAP4.readline(), IMAP4.send() und IMAP4.shutdown() verwendet. Sie können diese Methode überschreiben.

Löst ein Auditing-Ereignis imaplib.open mit den Argumenten self, host, port aus.

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

IMAP4.partial(message_num, message_part, start, length)

Ruft einen abgeschnittenen Teil einer Nachricht ab. Zurückgegebene Daten sind ein Tupel aus Nachrichten-Envelope und Daten.

IMAP4.proxyauth(user)

Nimmt die Authentifizierung als user an. Ermöglicht einem autorisierten Administrator, sich in das Postfach eines beliebigen Benutzers einzuloggen.

IMAP4.read(size)

Liest size Bytes vom entfernten Server. Sie können diese Methode überschreiben.

IMAP4.readline()

Liest eine Zeile vom entfernten Server. Sie können diese Methode überschreiben.

IMAP4.recent()

Fordert den Server zur Aktualisierung auf. Zurückgegebene Daten sind None, wenn keine neuen Nachrichten vorhanden sind, andernfalls der Wert der RECENT-Antwort.

IMAP4.rename(oldmailbox, newmailbox)

Benennt das Postfach oldmailbox in newmailbox um.

IMAP4.response(code)

Gibt Daten für den Antwortcode code zurück, falls empfangen, oder None. Gibt den angegebenen Code anstelle des üblichen Typs zurück.

IMAP4.search(charset, criterion[, ...])

Sucht im Postfach nach übereinstimmenden Nachrichten. charset kann None sein, in diesem Fall wird keine CHARSET in der Anfrage an den Server angegeben. Das IMAP-Protokoll verlangt die Angabe mindestens eines Kriteriums; eine Ausnahme wird ausgelöst, wenn der Server einen Fehler zurückgibt. charset muss None sein, wenn die Fähigkeit UTF8=ACCEPT mit dem Befehl enable() aktiviert wurde.

Beispiel

# M is a connected IMAP4 instance...
typ, msgnums = M.search(None, 'FROM', '"LDJ"')

# or:
typ, msgnums = M.search(None, '(FROM "LDJ")')
IMAP4.select(mailbox='INBOX', readonly=False)

Wählt ein Postfach aus. Die zurückgegebenen Daten sind die Anzahl der Nachrichten in mailbox (EXISTS-Antwort). Das Standard-mailbox ist 'INBOX'. Wenn das Flag readonly gesetzt ist, sind Änderungen am Postfach nicht erlaubt.

IMAP4.send(data)

Sendet data an den entfernten Server. Sie können diese Methode überschreiben.

Löst ein Auditing-Ereignis imaplib.send mit den Argumenten self, data aus.

IMAP4.setacl(mailbox, who, what)

Setzt eine ACL für mailbox. Die Methode ist nicht standardmäßig, wird aber vom Cyrus-Server unterstützt.

IMAP4.setannotation(mailbox, entry, attribute[, ...])

Setzt ANNOTATIONs für mailbox. Die Methode ist nicht standardmäßig, wird aber vom Cyrus-Server unterstützt.

IMAP4.setquota(root, limits)

Setzt die limits für die Ressource des quota root. Diese Methode ist Teil der IMAP4 QUOTA-Erweiterung, die in rfc2087 definiert ist.

IMAP4.shutdown()

Schließt die in open hergestellte Verbindung. Diese Methode wird implizit von IMAP4.logout() aufgerufen. Sie können diese Methode überschreiben.

IMAP4.socket()

Gibt die Socket-Instanz zurück, die zum Verbinden mit dem Server verwendet wird.

IMAP4.sort(sort_criteria, charset, search_criterion[, ...])

Der Befehl sort ist eine Variante von search mit Sortiersemantik für die Ergebnisse. Zurückgegebene Daten enthalten eine durch Leerzeichen getrennte Liste von übereinstimmenden Nachrichten-Nummern.

Sort hat zwei Argumente vor den search_criterion Argumenten; eine geklammerte Liste von sort_criteria und das zu suchende charset. Beachten Sie, dass im Gegensatz zu search das zu suchende charset-Argument obligatorisch ist. Es gibt auch einen Befehl uid sort, der sort auf die gleiche Weise entspricht, wie uid search search entspricht. Der Befehl sort durchsucht zunächst das Postfach nach Nachrichten, die den gegebenen Suchkriterien entsprechen, und verwendet dabei das charset-Argument für die Interpretation von Zeichenketten in den Suchkriterien. Anschließend werden die Nummern der übereinstimmenden Nachrichten zurückgegeben.

Dies ist ein IMAP4rev1-Erweiterungsbefehl.

IMAP4.starttls(ssl_context=None)

Sendet einen STARTTLS-Befehl. Das Argument ssl_context ist optional und sollte ein ssl.SSLContext-Objekt sein. Dies aktiviert die Verschlüsselung der IMAP-Verbindung. Lesen Sie die Sicherheitsaspekte für Best Practices.

Hinzugefügt in Version 3.2.

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

IMAP4.status(mailbox, names)

Fordert benannte Statusbedingungen für mailbox an.

IMAP4.store(message_set, command, flag_list)

Ändert die Flaggenzustände für Nachrichten im Postfach. command wird gemäß Abschnitt 6.4.6 von RFC 2060 als einer von „FLAGS“, „+FLAGS“ oder „-FLAGS“ angegeben, optional mit dem Suffix „.SILENT“.

Zum Beispiel, um das Löschflag für alle Nachrichten zu setzen

typ, data = M.search(None, 'ALL')
for num in data[0].split():
   M.store(num, '+FLAGS', '\\Deleted')
M.expunge()

Hinweis

Das Erstellen von Flaggen, die „]“ enthalten (z. B.: „[test]“), verstößt gegen RFC 3501 (das IMAP-Protokoll). Imaplib hat jedoch historisch die Erstellung solcher Tags erlaubt, und beliebte IMAP-Server wie Gmail akzeptieren und erzeugen solche Flaggen. Es gibt auch Nicht-Python-Programme, die solche Tags erstellen. Obwohl es ein RFC-Verstoß ist und IMAP-Clients und -Server streng sein sollen, erlaubt imaplib aus Kompatibilitätsgründen weiterhin die Erstellung solcher Tags, und ab Python 3.6 behandelt es diese, wenn sie vom Server gesendet werden, da dies die Kompatibilität in der realen Welt verbessert.

IMAP4.subscribe(mailbox)

Abonniert ein neues Postfach.

IMAP4.thread(threading_algorithm, charset, search_criterion[, ...])

Der Befehl thread ist eine Variante von search mit Threading-Semantik für die Ergebnisse. Zurückgegebene Daten enthalten eine durch Leerzeichen getrennte Liste von Thread-Mitgliedern.

Thread-Mitglieder bestehen aus null oder mehr Nachrichten-Nummern, getrennt durch Leerzeichen, die aufeinanderfolgende Eltern und Kinder anzeigen.

Thread hat zwei Argumente vor den search_criterion Argumenten; einen threading_algorithm und das zu suchende charset. Beachten Sie, dass im Gegensatz zu search das zu suchende charset-Argument obligatorisch ist. Es gibt auch einen Befehl uid thread, der thread auf die gleiche Weise entspricht, wie uid search search entspricht. Der Befehl thread durchsucht zunächst das Postfach nach Nachrichten, die den gegebenen Suchkriterien entsprechen, und verwendet dabei das charset-Argument für die Interpretation von Zeichenketten in den Suchkriterien. Anschließend werden die übereinstimmenden Nachrichten gemäß dem angegebenen Threading-Algorithmus zurückgegeben.

Dies ist ein IMAP4rev1-Erweiterungsbefehl.

IMAP4.uid(command, arg[, ...])

Führt den Befehl mit den Argumenten aus, der Nachrichten anhand der UID und nicht der Nachrichten-Nummer identifiziert. Gibt die für den Befehl passende Antwort zurück. Es muss mindestens ein Argument angegeben werden; wenn keines angegeben wird, gibt der Server einen Fehler zurück und es wird eine Ausnahme ausgelöst.

IMAP4.unsubscribe(mailbox)

Deabonniert ein altes Postfach.

IMAP4.unselect()

imaplib.IMAP4.unselect() gibt die vom Server gehaltenen Ressourcen frei, die mit dem ausgewählten Postfach verbunden sind, und versetzt den Server in den authentifizierten Zustand zurück. Dieser Befehl führt die gleichen Aktionen aus wie imaplib.IMAP4.close(), mit dem Unterschied, dass keine Nachrichten dauerhaft aus dem aktuell ausgewählten Postfach entfernt werden.

Hinzugefügt in Version 3.9.

IMAP4.xatom(name[, ...])

Ermöglicht einfache Erweiterungsbefehle, die vom Server in der CAPABILITY-Antwort gemeldet werden.

Die folgenden Attribute sind für Instanzen von IMAP4 definiert

IMAP4.PROTOCOL_VERSION

Die neueste unterstützte Protokollversion in der CAPABILITY-Antwort des Servers.

IMAP4.debug

Ganzzahliger Wert zur Steuerung der Debugging-Ausgabe. Der Initialisierungswert wird aus der Modulvariable Debug übernommen. Werte größer als drei verfolgen jeden Befehl.

IMAP4.utf8_enabled

Boolescher Wert, der normalerweise False ist, aber auf True gesetzt wird, wenn ein enable()-Befehl für die Fähigkeit UTF8=ACCEPT erfolgreich ausgeführt wurde.

Hinzugefügt in Version 3.5.

IMAP4 Beispiel

Hier ist ein minimales Beispiel (ohne Fehlerprüfung), das ein Postfach öffnet und alle Nachrichten abruft und ausgibt

import getpass, imaplib

M = imaplib.IMAP4(host='example.org')
M.login(getpass.getuser(), getpass.getpass())
M.select()
typ, data = M.search(None, 'ALL')
for num in data[0].split():
    typ, data = M.fetch(num, '(RFC822)')
    print('Message %s\n%s\n' % (num, data[0][1]))
M.close()
M.logout()