email.message: Darstellung einer E-Mail-Nachricht

Quellcode: Lib/email/message.py


Hinzugefügt in Version 3.6: [1]

Die zentrale Klasse im email-Paket ist die Klasse EmailMessage, die aus dem Modul email.message importiert wird. Sie ist die Basisklasse für das email-Objektmodell. EmailMessage bietet die Kernfunktionalität zum Festlegen und Abfragen von Kopfzeilenfeldern, zum Zugriff auf Nachrichteninhalte und zum Erstellen oder Ändern von strukturierten Nachrichten.

Eine E-Mail-Nachricht besteht aus Kopfzeilen und einem Payload (der auch als Inhalt bezeichnet wird). Kopfzeilen sind Feldnamen und -werte im Stil von RFC 5322 oder RFC 6532, wobei Feldname und -wert durch einen Doppelpunkt getrennt sind. Der Doppelpunkt ist weder Teil des Feldnamens noch des Feldwerts. Der Payload kann eine einfache Textnachricht, ein Binär đươche oder eine strukturierte Sequenz von Unter-Nachrichten sein, jede mit ihrem eigenen Satz von Kopfzeilen und ihrem eigenen Payload. Der letztere Art von Payload wird dadurch angezeigt, dass die Nachricht einen MIME-Typ wie multipart/* oder message/rfc822 hat.

Das konzeptionelle Modell, das ein EmailMessage-Objekt bereitstellt, ist das einer geordneten Wörterbuch von Kopfzeilen, gekoppelt mit einem Payload, der den RFC 5322-Nachrichtenkörper darstellt, der eine Liste von Unter-EmailMessage-Objekten sein kann. Zusätzlich zu den normalen Wörterbuchmethoden für den Zugriff auf Kopfzeilennamen und -werte gibt es Methoden für den Zugriff auf spezialisierte Informationen aus den Kopfzeilen (z. B. den MIME-Inhaltstyp), für die Operation auf dem Payload, für die Erzeugung einer serialisierten Version der Nachricht und für das rekursive Durchlaufen des Objektbaums.

Die wörterbuchähnliche Schnittstelle von EmailMessage wird durch die Kopfzeilennamen indiziert, die ASCII-Werte sein müssen. Die Werte des Wörterbuchs sind Zeichenketten mit einigen zusätzlichen Methoden. Kopfzeilen werden in Groß- und Kleinschreibung beibehaltender Form gespeichert und zurückgegeben, aber Feldnamen werden ohne Berücksichtigung der Groß- und Kleinschreibung abgeglichen. Die Schlüssel sind geordnet, aber im Gegensatz zu einem echten Wörterbuch kann es Duplikate geben. Zusätzliche Methoden werden für die Arbeit mit Kopfzeilen mit doppelten Schlüsseln bereitgestellt.

Der Payload ist entweder ein Zeichenketten- oder Bytes-Objekt bei einfachen Nachrichtenobjekten oder eine Liste von EmailMessage-Objekten für MIME-Containerdokumente wie multipart/* und message/rfc822-Nachrichtenobjekte.

class email.message.EmailMessage(policy=default)

Wenn policy angegeben ist, werden die von ihm angegebenen Regeln verwendet, um die Darstellung der Nachricht zu aktualisieren und zu serialisieren. Wenn policy nicht gesetzt ist, wird die default-Richtlinie verwendet, die den Regeln der E-Mail-RFCs folgt, außer bei Zeilenumbrüchen (anstelle des RFC-mandatierten \r\n werden die Python-Standard-\n-Zeilenumbrüche verwendet). Weitere Informationen finden Sie in der policy-Dokumentation.

as_string(unixfrom=False, maxheaderlen=None, policy=None)

Gibt die gesamte Nachricht abgeflacht als Zeichenkette zurück. Wenn das optionale unixfrom wahr ist, wird die Umschlagkopfzeile in die zurückgegebene Zeichenkette aufgenommen. unixfrom ist standardmäßig False. Zur Abwärtskompatibilität mit der Basisklasse Message wird maxheaderlen akzeptiert, ist aber standardmäßig None, was bedeutet, dass die Zeilenlänge standardmäßig durch die max_line_length der Richtlinie gesteuert wird. Das Argument policy kann verwendet werden, um die von der Nachrichteninstanz erhaltene Standardrichtlinie zu überschreiben. Dies kann verwendet werden, um einige der von der Methode erzeugten Formatierungen zu steuern, da die angegebene policy an den Generator übergeben wird.

Das Abflachen der Nachricht kann zu Änderungen an der EmailMessage führen, wenn Standardwerte eingefüllt werden müssen, um die Transformation in eine Zeichenkette abzuschließen (z. B. MIME-Begrenzer können generiert oder geändert werden).

Beachten Sie, dass diese Methode als Komfortfunktion bereitgestellt wird und möglicherweise nicht die nützlichste Methode ist, um Nachrichten in Ihrer Anwendung zu serialisieren, insbesondere wenn Sie mit mehreren Nachrichten arbeiten. Weitere Informationen finden Sie unter email.generator.Generator für eine flexiblere API zum Serialisieren von Nachrichten. Beachten Sie auch, dass diese Methode auf die Erzeugung von Nachrichten beschränkt ist, die als "7-Bit-sauber" serialisiert werden, wenn utf8 False ist, was der Standard ist.

Geändert in Version 3.6: Das Standardverhalten, wenn maxheaderlen nicht angegeben ist, wurde von der Standardeinstellung 0 zur Standardeinstellung des Werts von max_line_length aus der Richtlinie geändert.

__str__()

Entspricht as_string(policy=self.policy.clone(utf8=True)). Ermöglicht str(msg), eine Zeichenkette mit der serialisierten Nachricht in einem lesbaren Format zu erzeugen.

Geändert in Version 3.4: Die Methode wurde geändert, um utf8=True zu verwenden, wodurch eine RFC 6531-ähnliche Nachrichtenrepräsentation erzeugt wird, anstatt ein direkter Alias für as_string() zu sein.

as_bytes(unixfrom=False, policy=None)

Gibt die gesamte Nachricht abgeflacht als Bytes-Objekt zurück. Wenn das optionale unixfrom wahr ist, wird die Umschlagkopfzeile in die zurückgegebene Zeichenkette aufgenommen. unixfrom ist standardmäßig False. Das Argument policy kann verwendet werden, um die von der Nachrichteninstanz erhaltene Standardrichtlinie zu überschreiben. Dies kann verwendet werden, um einige der von der Methode erzeugten Formatierungen zu steuern, da die angegebene policy an den BytesGenerator übergeben wird.

Das Abflachen der Nachricht kann zu Änderungen an der EmailMessage führen, wenn Standardwerte eingefüllt werden müssen, um die Transformation in eine Zeichenkette abzuschließen (z. B. MIME-Begrenzer können generiert oder geändert werden).

Beachten Sie, dass diese Methode als Komfortfunktion bereitgestellt wird und möglicherweise nicht die nützlichste Methode ist, um Nachrichten in Ihrer Anwendung zu serialisieren, insbesondere wenn Sie mit mehreren Nachrichten arbeiten. Weitere Informationen finden Sie unter email.generator.BytesGenerator für eine flexiblere API zum Serialisieren von Nachrichten.

__bytes__()

Entspricht as_bytes(). Ermöglicht bytes(msg), ein Bytes-Objekt mit der serialisierten Nachricht zu erzeugen.

is_multipart()

Gibt True zurück, wenn der Payload der Nachricht eine Liste von Unter-EmailMessage-Objekten ist, andernfalls False. Wenn is_multipart() True zurückgibt, sollte der Payload ein Zeichenkettenobjekt sein (das ein CTE-kodierter Binär-Payload sein könnte). Beachten Sie, dass is_multipart() True zurückgibt, nicht unbedingt bedeutet, dass "msg.get_content_maintype() == 'multipart'" True zurückgibt. Zum Beispiel gibt is_multipart True zurück, wenn der EmailMessage vom Typ message/rfc822 ist.

set_unixfrom(unixfrom)

Setzt die Umschlagkopfzeile der Nachricht auf unixfrom, was eine Zeichenkette sein sollte. (Siehe mboxMessage für eine kurze Beschreibung dieser Kopfzeile.)

get_unixfrom()

Gibt die Umschlagkopfzeile der Nachricht zurück. Standardmäßig None, wenn die Umschlagkopfzeile nie gesetzt wurde.

Die folgenden Methoden implementieren die Mapping-ähnliche Schnittstelle für den Zugriff auf die Kopfzeilen der Nachricht. Beachten Sie, dass es einige semantische Unterschiede zwischen diesen Methoden und einer normalen Mapping-Schnittstelle (d. h. Wörterbuch) gibt. In einem Wörterbuch gibt es zum Beispiel keine doppelten Schlüssel, aber hier kann es doppelte Nachrichten-Kopfzeilen geben. Auch in Wörterbüchern gibt es keine garantierte Reihenfolge der von keys() zurückgegebenen Schlüssel, aber in einem EmailMessage-Objekt werden Kopfzeilen immer in der Reihenfolge zurückgegeben, in der sie in der ursprünglichen Nachricht erschienen sind oder in der sie der Nachricht später hinzugefügt wurden. Jede gelöschte und dann wieder hinzugefügte Kopfzeile wird immer am Ende der Kopfzeilenliste angehängt.

Diese semantischen Unterschiede sind beabsichtigt und zugunsten der Bequemlichkeit in den häufigsten Anwendungsfällen.

Beachten Sie, dass in allen Fällen eine etwaige Umschlagkopfzeile in der Nachricht nicht in die Mapping-Schnittstelle einbezogen wird.

__len__()

Gibt die Gesamtzahl der Kopfzeilen zurück, einschließlich Duplikaten.

__contains__(name)

Gibt True zurück, wenn das Nachrichtenobjekt ein Feld mit dem Namen name hat. Der Abgleich erfolgt ohne Berücksichtigung der Groß- und Kleinschreibung, und name enthält nicht den abschließenden Doppelpunkt. Wird für den in Operator verwendet. Zum Beispiel

if 'message-id' in myMessage:
   print('Message-ID:', myMessage['message-id'])
__getitem__(name)

Gibt den Wert des benannten Kopfzeilenfeldes zurück. name enthält nicht den Doppelpunkt-Feldtrenner. Wenn die Kopfzeile fehlt, wird None zurückgegeben; ein KeyError wird niemals ausgelöst.

Beachten Sie, dass, wenn das benannte Feld mehr als einmal in den Kopfzeilen der Nachricht vorkommt, nicht definiert ist, welcher dieser Feldwerte zurückgegeben wird. Verwenden Sie die Methode get_all(), um die Werte aller vorhandenen Kopfzeilen namens name zu erhalten.

Mit den Standardrichtlinien (nicht compat32) ist der zurückgegebene Wert eine Instanz einer Unterklasse von email.headerregistry.BaseHeader.

__setitem__(name, val)

Fügt eine Kopfzeile zur Nachricht mit dem Feldnamen name und dem Wert val hinzu. Das Feld wird am Ende der vorhandenen Kopfzeilen der Nachricht angehängt.

Beachten Sie, dass dadurch keine vorhandene Kopfzeile mit demselben Namen überschrieben oder gelöscht wird. Wenn Sie sicherstellen möchten, dass die neue Kopfzeile die einzige in der Nachricht mit dem Feldnamen name ist, löschen Sie das Feld zuerst, z. B.

del msg['subject']
msg['subject'] = 'Python roolz!'

Wenn die policy bestimmte Kopfzeilen als einzigartig definiert (wie die Standardrichtlinien es tun), kann diese Methode eine ValueError auslösen, wenn versucht wird, einem solchen Header einen Wert zuzuweisen, wenn bereits einer vorhanden ist. Dieses Verhalten ist absichtlich aus Gründen der Konsistenz, aber verlassen Sie sich nicht darauf, da wir solche Zuweisungen in Zukunft möglicherweise dazu bringen, eine automatische Löschung der vorhandenen Kopfzeile vorzunehmen.

__delitem__(name)

Löscht alle Vorkommen des Feldes mit dem Namen name aus den Kopfzeilen der Nachricht. Es wird keine Ausnahme ausgelöst, wenn das benannte Feld nicht in den Kopfzeilen vorhanden ist.

keys()

Gibt eine Liste aller Feldnamen der Nachricht zurück.

values()

Gibt eine Liste aller Feldwerte der Nachricht zurück.

items()

Gibt eine Liste von 2-Tupeln zurück, die alle Feldkopfzeilen und -werte der Nachricht enthalten.

get(name, failobj=None)

Gibt den Wert des benannten Kopfzeilenfeldes zurück. Dies ist identisch mit __getitem__(), außer dass das optionale failobj zurückgegeben wird, wenn die benannte Kopfzeile fehlt (failobj ist standardmäßig None).

Hier sind einige zusätzliche nützliche Methoden im Zusammenhang mit Kopfzeilen

get_all(name, failobj=None)

Gibt eine Liste aller Werte für das Feld mit dem Namen name zurück. Wenn keine solchen benannten Kopfzeilen in der Nachricht vorhanden sind, wird failobj zurückgegeben (standardmäßig None).

add_header(_name, _value, **_params)

Erweiterte Kopfzeilenfestlegung. Diese Methode ähnelt __setitem__(), außer dass zusätzliche Kopfzeilenparameter als Schlüsselwortargumente angegeben werden können. _name ist der hinzuzufügende Kopfzeilenfeldname und _value ist der primäre Wert für die Kopfzeile.

Für jedes Element im Schlüsselwortargument-Wörterbuch _params wird der Schlüssel als Parametername genommen, wobei Unterstriche in Bindestriche umgewandelt werden (da Bindestriche in Python-Identifikatoren illegal sind). Normalerweise wird der Parameter als key="value" hinzugefügt, es sei denn, der Wert ist None, in diesem Fall wird nur der Schlüssel hinzugefügt.

Wenn der Wert Nicht-ASCII-Zeichen enthält, können der Zeichensatz und die Sprache explizit gesteuert werden, indem der Wert als Dreiertupel im Format (CHARSET, LANGUAGE, VALUE) angegeben wird, wobei CHARSET eine Zeichenkette ist, die den zu verwendenden Zeichensatz zur Kodierung des Werts benennt, LANGUAGE normalerweise auf None oder den leeren String gesetzt werden kann (siehe RFC 2231 für andere Möglichkeiten), und VALUE ist der Zeichenkettenwert, der Nicht-ASCII-Codepunkte enthält. Wenn kein Dreiertupel übergeben wird und der Wert Nicht-ASCII-Zeichen enthält, wird er automatisch im RFC 2231-Format mit einem CHARSET von utf-8 und einem LANGUAGE von None kodiert.

Hier ist ein Beispiel

msg.add_header('Content-Disposition', 'attachment', filename='bud.gif')

Dies fügt eine Kopfzeile hinzu, die wie folgt aussieht

Content-Disposition: attachment; filename="bud.gif"

Ein Beispiel für die erweiterte Schnittstelle mit Nicht-ASCII-Zeichen

msg.add_header('Content-Disposition', 'attachment',
               filename=('iso-8859-1', '', 'Fußballer.ppt'))
replace_header(_name, _value)

Ersetzt eine Kopfzeile. Ersetzt die erste gefundene Kopfzeile in der Nachricht, die mit _name übereinstimmt, wobei die Reihenfolge der Kopfzeilen und die Groß-/Kleinschreibung des ursprünglichen Feldnamens beibehalten werden. Wenn keine passende Kopfzeile gefunden wird, wird ein KeyError ausgelöst.

get_content_type()

Gibt den Inhaltstyp der Nachricht zurück, konvertiert in Kleinbuchstaben in der Form maintype/subtype. Wenn keine Content-Type-Kopfzeile in der Nachricht vorhanden ist, wird der von get_default_type() zurückgegebene Wert zurückgegeben. Wenn die Content-Type-Kopfzeile ungültig ist, wird text/plain zurückgegeben.

(Gemäß RFC 2045 haben Nachrichten immer einen Standardtyp, get_content_type() gibt immer einen Wert zurück. RFC 2045 definiert den Standardtyp einer Nachricht als text/plain, es sei denn, sie erscheint innerhalb eines multipart/digest-Containers, in diesem Fall wäre sie message/rfc822. Wenn die Content-Type-Kopfzeile eine ungültige Typangabe hat, schreibt RFC 2045 vor, dass der Standardtyp text/plain ist.)

get_content_maintype()

Gibt den Hauptinhaltstyp der Nachricht zurück. Dies ist der maintype-Teil der von get_content_type() zurückgegebenen Zeichenkette.

get_content_subtype()

Gibt den Unterinhaltstyp der Nachricht zurück. Dies ist der subtype-Teil der von get_content_type() zurückgegebenen Zeichenkette.

get_default_type()

Gibt den Standardinhaltstyp zurück. Die meisten Nachrichten haben einen Standardinhaltstyp von text/plain, außer Nachrichten, die Unterteile von multipart/digest-Containern sind. Solche Unterteile haben einen Standardinhaltstyp von message/rfc822.

set_default_type(ctype)

Setzt den Standardinhaltstyp. ctype sollte entweder text/plain oder message/rfc822 sein, obwohl dies nicht erzwungen wird. Der Standardinhaltstyp wird nicht in der Content-Type-Kopfzeile gespeichert, daher beeinflusst er nur den Rückgabewert der get_content_type-Methoden, wenn keine Content-Type-Kopfzeile in der Nachricht vorhanden ist.

set_param(param, value, header='Content-Type', requote=True, charset=None, language='', replace=False)

Setzt einen Parameter in der Content-Type-Kopfzeile. Wenn der Parameter bereits in der Kopfzeile vorhanden ist, wird sein Wert durch value ersetzt. Wenn header Content-Type (der Standard) ist und die Kopfzeile noch nicht in der Nachricht vorhanden ist, wird sie hinzugefügt, ihr Wert auf text/plain gesetzt und der neue Parameterwert angehängt. Das optionale header gibt eine alternative Kopfzeile zu Content-Type an.

Wenn der Wert Nicht-ASCII-Zeichen enthält, können der Zeichensatz und die Sprache mithilfe der optionalen Parameter charset und language explizit angegeben werden. Das optionale language gibt die RFC 2231-Sprache an und ist standardmäßig der leere String. Sowohl charset als auch language sollten Zeichenketten sein. Standardmäßig wird der utf8-charset und None für die language verwendet.

Wenn replace False (der Standard) ist, wird die Kopfzeile an das Ende der Kopfzeilenliste verschoben. Wenn replace True ist, wird die Kopfzeile an Ort und Stelle aktualisiert.

Die Verwendung des Parameters requote mit EmailMessage-Objekten ist veraltet.

Beachten Sie, dass auf bestehende Parameterwerte von Kopfzeilen über das Attribut params des Kopfzeilenwerts zugegriffen werden kann (z. B. msg['Content-Type'].params['charset']).

Geändert in Version 3.4: Das Schlüsselwort replace wurde hinzugefügt.

del_param(param, header='content-type', requote=True)

Entfernen Sie den angegebenen Parameter vollständig aus dem Content-Type-Header. Der Header wird vor Ort ohne den Parameter oder seinen Wert neu geschrieben. Optionales header gibt eine Alternative zu Content-Type an.

Die Verwendung des Parameters requote mit EmailMessage-Objekten ist veraltet.

get_filename(failobj=None)

Gibt den Wert des filename-Parameters des Content-Disposition-Headers der Nachricht zurück. Wenn der Header keinen filename-Parameter hat, sucht diese Methode stattdessen nach dem name-Parameter im Content-Type-Header. Wenn keiner gefunden wird oder der Header fehlt, wird failobj zurückgegeben. Der zurückgegebene String ist immer ungequotet gemäß email.utils.unquote().

get_boundary(failobj=None)

Gibt den Wert des boundary-Parameters des Content-Type-Headers der Nachricht zurück, oder failobj, wenn der Header fehlt oder keinen boundary-Parameter hat. Der zurückgegebene String ist immer ungequotet gemäß email.utils.unquote().

set_boundary(boundary)

Setzt den boundary-Parameter des Content-Type-Headers auf boundary. set_boundary() quotet boundary bei Bedarf immer. Eine HeaderParseError wird ausgelöst, wenn das Nachrichtenobjekt keinen Content-Type-Header hat.

Beachten Sie, dass die Verwendung dieser Methode subtil anders ist als das Löschen des alten Content-Type-Headers und das Hinzufügen eines neuen mit dem neuen Begrenzer über add_header(), da set_boundary() die Reihenfolge des Content-Type-Headers in der Liste der Header beibehält.

get_content_charset(failobj=None)

Gibt den charset-Parameter des Content-Type-Headers zurück, umgewandelt in Kleinbuchstaben. Wenn kein Content-Type-Header vorhanden ist oder dieser Header keinen charset-Parameter hat, wird failobj zurückgegeben.

get_charsets(failobj=None)

Gibt eine Liste zurück, die die Zeichensatznamen in der Nachricht enthält. Wenn die Nachricht eine multipart-Nachricht ist, enthält die Liste ein Element für jeden Unterteil der Nutzlast, andernfalls ist es eine Liste mit einer Länge von 1.

Jedes Element in der Liste ist ein String, der den Wert des charset-Parameters im Content-Type-Header für den dargestellten Unterteil ist. Wenn der Unterteil keinen Content-Type-Header, keinen charset-Parameter hat oder nicht vom Haupt-MIME-Typ text ist, dann ist dieses Element in der zurückgegebenen Liste failobj.

is_attachment()

Gibt True zurück, wenn ein Content-Disposition-Header vorhanden ist und dessen (case-insensitiver) Wert attachment ist, andernfalls False.

Geändert in Version 3.4.2: is_attachment ist jetzt eine Methode und keine Eigenschaft mehr, um Konsistenz mit is_multipart() zu gewährleisten.

get_content_disposition()

Gibt den kleingeschriebenen Wert (ohne Parameter) des Content-Disposition-Headers der Nachricht zurück, wenn vorhanden, andernfalls None. Die möglichen Werte für diese Methode sind inline, attachment oder None, wenn die Nachricht RFC 2183 befolgt.

Hinzugefügt in Version 3.5.

Die folgenden Methoden beziehen sich auf die Abfrage und Manipulation des Inhalts (Nutzlast) der Nachricht.

walk()

Die Methode walk() ist ein Allzweck-Generator, der verwendet werden kann, um über alle Teile und Unterteile eines Nachrichtenobjektbaums in Tiefen-Durchlauf-Reihenfolge zu iterieren. Typischerweise werden Sie walk() als Iterator in einer for-Schleife verwenden; jede Iteration gibt den nächsten Unterteil zurück.

Hier ist ein Beispiel, das den MIME-Typ jedes Teils einer Multipart-Nachrichtenstruktur ausgibt

>>> for part in msg.walk():
...     print(part.get_content_type())
multipart/report
text/plain
message/delivery-status
text/plain
text/plain
message/rfc822
text/plain

walk iteriert über die Unterteile jedes Teils, bei dem is_multipart() True zurückgibt, auch wenn msg.get_content_maintype() == 'multipart' möglicherweise False zurückgibt. Dies sehen wir in unserem Beispiel, indem wir die Debug-Hilfsfunktion _structure verwenden.

>>> from email.iterators import _structure
>>> for part in msg.walk():
...     print(part.get_content_maintype() == 'multipart',
...           part.is_multipart())
True True
False False
False True
False False
False False
False True
False False
>>> _structure(msg)
multipart/report
    text/plain
    message/delivery-status
        text/plain
        text/plain
    message/rfc822
        text/plain

Hier sind die message-Teile keine multiparts, aber sie enthalten Unterteile. is_multipart() gibt True zurück und walk steigt in die Unterteile ab.

get_body(preferencelist=('related', 'html', 'plain'))

Gibt den MIME-Teil zurück, der der beste Kandidat für den „Körper“ der Nachricht ist.

preferencelist muss eine Sequenz von Zeichenketten aus der Menge related, html und plain sein und gibt die Präferenzreihenfolge für den Inhaltstyp des zurückgegebenen Teils an.

Beginnen Sie mit der Suche nach Kandidatenübereinstimmungen beim Objekt, für das die Methode get_body aufgerufen wird.

Wenn related nicht in preferencelist enthalten ist, betrachten Sie den Stammteil (oder Unterteil des Stammteils) eines gefundenen related als Kandidaten, wenn der (Unter-)Teil mit einer Präferenz übereinstimmt.

Beim Auftreten eines multipart/related prüfen Sie den start-Parameter und wenn ein Teil mit einer passenden Content-ID gefunden wird, betrachten Sie nur diesen bei der Suche nach Kandidatenübereinstimmungen. Andernfalls betrachten Sie nur den ersten (standardmäßigen Stamm-)Teil des multipart/related.

Wenn ein Teil einen Content-Disposition-Header hat, betrachten Sie den Teil nur dann als Kandidatenübereinstimmung, wenn der Wert des Headers inline ist.

Wenn keiner der Kandidaten mit einer der Präferenzen in preferencelist übereinstimmt, geben Sie None zurück.

Hinweise: (1) Für die meisten Anwendungen sind die einzigen sinnvolle preferencelist-Kombinationen ('plain',), ('html', 'plain') und die Standardeinstellung ('related', 'html', 'plain'). (2) Da die Übereinstimmung mit dem Objekt beginnt, auf dem get_body aufgerufen wird, gibt der Aufruf von get_body auf einem multipart/related das Objekt selbst zurück, es sei denn, preferencelist hat einen nicht standardmäßigen Wert. (3) Nachrichten (oder Nachrichtenteile), die keinen Content-Type angeben oder deren Content-Type-Header ungültig ist, werden so behandelt, als ob sie vom Typ text/plain wären, was gelegentlich dazu führen kann, dass get_body unerwartete Ergebnisse liefert.

iter_attachments()

Gibt einen Iterator über alle direkten Unterteile der Nachricht zurück, die keine Kandidaten für „Body“-Teile sind. Das heißt, überspringt das erste Vorkommen von text/plain, text/html, multipart/related oder multipart/alternative (es sei denn, sie sind explizit als Anhänge über Content-Disposition: attachment markiert) und gibt alle verbleibenden Teile zurück. Wenn direkt auf einen multipart/related angewendet, gibt einen Iterator über alle verwandten Teile außer dem Stammteil zurück (d. h. den durch den start-Parameter verwiesenen Teil oder den ersten Teil, wenn kein start-Parameter vorhanden ist oder der start-Parameter nicht mit der Content-ID eines der Teile übereinstimmt). Wenn direkt auf einen multipart/alternative oder einen Nicht-multipart angewendet, gibt einen leeren Iterator zurück.

iter_parts()

Gibt einen Iterator über alle direkten Unterteile der Nachricht zurück, der für eine Nicht-multipart-Nachricht leer ist. (Siehe auch walk().)

get_content(*args, content_manager=None, **kw)

Ruft die Methode get_content() des content_manager auf und übergibt self als Nachrichtenobjekt sowie alle anderen Argumente oder Schlüsselwörter als zusätzliche Argumente. Wenn content_manager nicht angegeben ist, wird der von der aktuellen policy angegebene content_manager verwendet.

set_content(*args, content_manager=None, **kw)

Ruft die Methode set_content() des content_manager auf und übergibt self als Nachrichtenobjekt sowie alle anderen Argumente oder Schlüsselwörter als zusätzliche Argumente. Wenn content_manager nicht angegeben ist, wird der von der aktuellen policy angegebene content_manager verwendet.

Konvertiert eine Nicht-multipart-Nachricht in eine multipart/related-Nachricht, verschiebt alle vorhandenen Content--Header und die Nutzlast in einen (neuen) ersten Teil des multipart. Wenn boundary angegeben ist, wird es als Begrenzerzeichenfolge im Multipart verwendet, andernfalls wird der Begrenzer automatisch erstellt, wenn er benötigt wird (z. B. beim Serialisieren der Nachricht).

make_alternative(boundary=None)

Konvertiert eine Nicht-multipart- oder eine multipart/related-Nachricht in eine multipart/alternative-Nachricht und verschiebt alle vorhandenen Content--Header und die Nutzlast in einen (neuen) ersten Teil des multipart. Wenn boundary angegeben ist, wird es als Begrenzerzeichenfolge im Multipart verwendet, andernfalls wird der Begrenzer automatisch erstellt, wenn er benötigt wird (z. B. beim Serialisieren der Nachricht).

make_mixed(boundary=None)

Konvertiert eine Nicht-multipart-, eine multipart/related- oder eine multipart-alternative-Nachricht in eine multipart/mixed-Nachricht und verschiebt alle vorhandenen Content--Header und die Nutzlast in einen (neuen) ersten Teil des multipart. Wenn boundary angegeben ist, wird es als Begrenzerzeichenfolge im Multipart verwendet, andernfalls wird der Begrenzer automatisch erstellt, wenn er benötigt wird (z. B. beim Serialisieren der Nachricht).

Wenn die Nachricht eine multipart/related ist, wird ein neues Nachrichtenobjekt erstellt, alle Argumente werden an seine Methode set_content() übergeben und es wird an das multipart attach()t. Wenn die Nachricht keine multipart ist, wird make_related() aufgerufen und dann wie oben fortgefahren. Wenn die Nachricht eine andere Art von multipart ist, wird eine TypeError ausgelöst. Wenn content_manager nicht angegeben ist, wird der von der aktuellen policy angegebene content_manager verwendet. Wenn der hinzugefügte Teil keinen Content-Disposition-Header hat, wird einer mit dem Wert inline hinzugefügt.

add_alternative(*args, content_manager=None, **kw)

Wenn die Nachricht eine multipart/alternative ist, wird ein neues Nachrichtenobjekt erstellt, alle Argumente werden an seine Methode set_content() übergeben und es wird an das multipart attach()t. Wenn die Nachricht keine multipart- oder multipart/related-Nachricht ist, wird make_alternative() aufgerufen und dann wie oben fortgefahren. Wenn die Nachricht eine andere Art von multipart ist, wird eine TypeError ausgelöst. Wenn content_manager nicht angegeben ist, wird der von der aktuellen policy angegebene content_manager verwendet.

add_attachment(*args, content_manager=None, **kw)

Wenn die Nachricht eine multipart/mixed ist, wird ein neues Nachrichtenobjekt erstellt, alle Argumente werden an seine Methode set_content() übergeben und es wird an das multipart attach()t. Wenn die Nachricht keine multipart-, multipart/related- oder multipart/alternative-Nachricht ist, wird make_mixed() aufgerufen und dann wie oben fortgefahren. Wenn content_manager nicht angegeben ist, wird der von der aktuellen policy angegebene content_manager verwendet. Wenn der hinzugefügte Teil keinen Content-Disposition-Header hat, wird einer mit dem Wert attachment hinzugefügt. Diese Methode kann sowohl für explizite Anhänge (Content-Disposition: attachment) als auch für inline-Anhänge (Content-Disposition: inline) verwendet werden, indem entsprechende Optionen an den content_manager übergeben werden.

clear()

Entfernt die Nutzlast und alle Header.

clear_content()

Entfernt die Nutzlast und alle !Content--Header, lässt alle anderen Header intakt und in ihrer ursprünglichen Reihenfolge.

EmailMessage-Objekte haben die folgenden Instanzattribute

preamble

Das Format eines MIME-Dokuments erlaubt etwas Text zwischen der Leerzeile nach den Headern und dem ersten Multipart-Begrenzer-String. Normalerweise ist dieser Text in einem MIME-fähigen Mailreader nie sichtbar, da er außerhalb der Standard-MIME-Hülle liegt. Beim Betrachten des Rohtextes der Nachricht oder beim Betrachten der Nachricht in einem nicht-MIME-fähigen Reader kann dieser Text jedoch sichtbar werden.

Das Attribut preamble enthält diesen führenden Extra-Armor-Text für MIME-Dokumente. Wenn der Parser Text nach den Headern, aber vor dem ersten Begrenzer-String entdeckt, weist er diesen Text dem preamble-Attribut der Nachricht zu. Wenn der Generator die Plain-Text-Darstellung einer MIME-Nachricht schreibt und feststellt, dass die Nachricht ein preamble-Attribut hat, schreibt er diesen Text in den Bereich zwischen den Headern und dem ersten Begrenzer. Siehe email.parser und email.generator für Details.

Beachten Sie, dass, wenn das Nachrichtenobjekt keine Präambel hat, das Attribut preamble None ist.

epilogue

Das Attribut epilogue verhält sich genauso wie das Attribut preamble, außer dass es Text enthält, der zwischen dem letzten Begrenzer und dem Ende der Nachricht steht. Wie bei der preamble ist dieses Attribut None, wenn kein Epilogtext vorhanden ist.

defects

Das Attribut defects enthält eine Liste aller Probleme, die beim Parsen dieser Nachricht gefunden wurden. Siehe email.errors für eine detaillierte Beschreibung der möglichen Parsing-Fehler.

class email.message.MIMEPart(policy=default)

Diese Klasse repräsentiert einen Unterteil einer MIME-Nachricht. Sie ist identisch mit EmailMessage, mit der Ausnahme, dass keine MIME-Version-Header hinzugefügt werden, wenn set_content() aufgerufen wird, da Unterteile keine eigenen MIME-Version-Header benötigen.

Fußnoten