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\nwerden die Python-Standard-\n-Zeilenumbrüche verwendet). Weitere Informationen finden Sie in derpolicy-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 BasisklasseMessagewird maxheaderlen akzeptiert, ist aber standardmäßigNone, was bedeutet, dass die Zeilenlänge standardmäßig durch diemax_line_lengthder 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 denGeneratorübergeben wird.Das Abflachen der Nachricht kann zu Änderungen an der
EmailMessagefü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.Generatorfü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, wennutf8Falseist, 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öglichtstr(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=Truezu verwenden, wodurch eine RFC 6531-ähnliche Nachrichtenrepräsentation erzeugt wird, anstatt ein direkter Alias füras_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 denBytesGeneratorübergeben wird.Das Abflachen der Nachricht kann zu Änderungen an der
EmailMessagefü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.BytesGeneratorfür eine flexiblere API zum Serialisieren von Nachrichten.
- __bytes__()¶
Entspricht
as_bytes(). Ermöglichtbytes(msg), ein Bytes-Objekt mit der serialisierten Nachricht zu erzeugen.
- is_multipart()¶
Gibt
Truezurück, wenn der Payload der Nachricht eine Liste von Unter-EmailMessage-Objekten ist, andernfallsFalse. Wennis_multipart()Truezurückgibt, sollte der Payload ein Zeichenkettenobjekt sein (das ein CTE-kodierter Binär-Payload sein könnte). Beachten Sie, dassis_multipart()Truezurückgibt, nicht unbedingt bedeutet, dass "msg.get_content_maintype() == 'multipart'"Truezurückgibt. Zum Beispiel gibtis_multipartTruezurück, wenn derEmailMessagevom Typmessage/rfc822ist.
- set_unixfrom(unixfrom)¶
Setzt die Umschlagkopfzeile der Nachricht auf unixfrom, was eine Zeichenkette sein sollte. (Siehe
mboxMessagefü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 einemEmailMessage-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
Truezurü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 deninOperator verwendet. Zum Beispielif '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
Nonezurückgegeben; einKeyErrorwird 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 vonemail.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
policybestimmte Kopfzeilen als einzigartig definiert (wie die Standardrichtlinien es tun), kann diese Methode eineValueErrorauslö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äßigNone).
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 istNone, 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, wobeiCHARSETeine Zeichenkette ist, die den zu verwendenden Zeichensatz zur Kodierung des Werts benennt,LANGUAGEnormalerweise aufNoneoder den leeren String gesetzt werden kann (siehe RFC 2231 für andere Möglichkeiten), undVALUEist 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 einemCHARSETvonutf-8und einemLANGUAGEvonNonekodiert.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
KeyErrorausgelö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, wirdtext/plainzurü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 undNonefür die language verwendet.Wenn replace
False(der Standard) ist, wird die Kopfzeile an das Ende der Kopfzeilenliste verschoben. Wenn replaceTrueist, 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
paramsdes Kopfzeilenwerts zugegriffen werden kann (z. B.msg['Content-Type'].params['charset']).Geändert in Version 3.4: Das Schlüsselwort
replacewurde 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 keinenfilename-Parameter hat, sucht diese Methode stattdessen nach demname-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 keinenboundary-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. EineHeaderParseErrorwird 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(), daset_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 keinencharset-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, keinencharset-Parameter hat oder nicht vom Haupt-MIME-Typ text ist, dann ist dieses Element in der zurückgegebenen Liste failobj.
- is_attachment()¶
Gibt
Truezurück, wenn ein Content-Disposition-Header vorhanden ist und dessen (case-insensitiver) Wertattachmentist, andernfallsFalse.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 oderNone, 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 Siewalk()als Iterator in einerfor-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
walkiteriert über die Unterteile jedes Teils, bei demis_multipart()Truezurückgibt, auch wennmsg.get_content_maintype() == 'multipart'möglicherweiseFalsezurückgibt. Dies sehen wir in unserem Beispiel, indem wir die Debug-Hilfsfunktion_structureverwenden.>>> 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 keinemultiparts, aber sie enthalten Unterteile.is_multipart()gibtTruezurück undwalksteigt 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,htmlundplainsein 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_bodyaufgerufen wird.Wenn
relatednicht in preferencelist enthalten ist, betrachten Sie den Stammteil (oder Unterteil des Stammteils) eines gefundenenrelatedals Kandidaten, wenn der (Unter-)Teil mit einer Präferenz übereinstimmt.Beim Auftreten eines
multipart/relatedprüfen Sie denstart-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 desmultipart/related.Wenn ein Teil einen Content-Disposition-Header hat, betrachten Sie den Teil nur dann als Kandidatenübereinstimmung, wenn der Wert des Headers
inlineist.Wenn keiner der Kandidaten mit einer der Präferenzen in preferencelist übereinstimmt, geben Sie
Nonezurü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 demget_bodyaufgerufen wird, gibt der Aufruf vonget_bodyauf einemmultipart/relateddas 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 Typtext/plainwären, was gelegentlich dazu führen kann, dassget_bodyunerwartete 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/relatedodermultipart/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 einenmultipart/relatedangewendet, gibt einen Iterator über alle verwandten Teile außer dem Stammteil zurück (d. h. den durch denstart-Parameter verwiesenen Teil oder den ersten Teil, wenn keinstart-Parameter vorhanden ist oder derstart-Parameter nicht mit der Content-ID eines der Teile übereinstimmt). Wenn direkt auf einenmultipart/alternativeoder einen Nicht-multipartangewendet, 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 auchwalk().)
- 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 aktuellenpolicyangegebenecontent_managerverwendet.
- 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 aktuellenpolicyangegebenecontent_managerverwendet.
Konvertiert eine Nicht-
multipart-Nachricht in einemultipart/related-Nachricht, verschiebt alle vorhandenen Content--Header und die Nutzlast in einen (neuen) ersten Teil desmultipart. 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 einemultipart/related-Nachricht in einemultipart/alternative-Nachricht und verschiebt alle vorhandenen Content--Header und die Nutzlast in einen (neuen) ersten Teil desmultipart. 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-, einemultipart/related- oder einemultipart-alternative-Nachricht in einemultipart/mixed-Nachricht und verschiebt alle vorhandenen Content--Header und die Nutzlast in einen (neuen) ersten Teil desmultipart. 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/relatedist, wird ein neues Nachrichtenobjekt erstellt, alle Argumente werden an seine Methodeset_content()übergeben und es wird an dasmultipartattach()t. Wenn die Nachricht keinemultipartist, wirdmake_related()aufgerufen und dann wie oben fortgefahren. Wenn die Nachricht eine andere Art vonmultipartist, wird eineTypeErrorausgelöst. Wenn content_manager nicht angegeben ist, wird der von der aktuellenpolicyangegebenecontent_managerverwendet. Wenn der hinzugefügte Teil keinen Content-Disposition-Header hat, wird einer mit dem Wertinlinehinzugefügt.
- add_alternative(*args, content_manager=None, **kw)¶
Wenn die Nachricht eine
multipart/alternativeist, wird ein neues Nachrichtenobjekt erstellt, alle Argumente werden an seine Methodeset_content()übergeben und es wird an dasmultipartattach()t. Wenn die Nachricht keinemultipart- odermultipart/related-Nachricht ist, wirdmake_alternative()aufgerufen und dann wie oben fortgefahren. Wenn die Nachricht eine andere Art vonmultipartist, wird eineTypeErrorausgelöst. Wenn content_manager nicht angegeben ist, wird der von der aktuellenpolicyangegebenecontent_managerverwendet.
- add_attachment(*args, content_manager=None, **kw)¶
Wenn die Nachricht eine
multipart/mixedist, wird ein neues Nachrichtenobjekt erstellt, alle Argumente werden an seine Methodeset_content()übergeben und es wird an dasmultipartattach()t. Wenn die Nachricht keinemultipart-,multipart/related- odermultipart/alternative-Nachricht ist, wirdmake_mixed()aufgerufen und dann wie oben fortgefahren. Wenn content_manager nicht angegeben ist, wird der von der aktuellenpolicyangegebenecontent_managerverwendet. Wenn der hinzugefügte Teil keinen Content-Disposition-Header hat, wird einer mit dem Wertattachmenthinzugefügt. Diese Methode kann sowohl für explizite Anhänge (Content-Disposition: attachment) als auch fürinline-Anhänge (Content-Disposition: inline) verwendet werden, indem entsprechende Optionen an dencontent_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
ParserText nach den Headern, aber vor dem ersten Begrenzer-String entdeckt, weist er diesen Text dem preamble-Attribut der Nachricht zu. Wenn derGeneratordie 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. Sieheemail.parserundemail.generatorfür Details.Beachten Sie, dass, wenn das Nachrichtenobjekt keine Präambel hat, das Attribut preamble
Noneist.
- 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
preambleist dieses AttributNone, wenn kein Epilogtext vorhanden ist.
- defects¶
Das Attribut defects enthält eine Liste aller Probleme, die beim Parsen dieser Nachricht gefunden wurden. Siehe
email.errorsfü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, wennset_content()aufgerufen wird, da Unterteile keine eigenen MIME-Version-Header benötigen.
Fußnoten