email.policy: Policy-Objekte¶
Hinzugefügt in Version 3.3.
Quellcode: Lib/email/policy.py
Der Hauptfokus des email-Pakets ist die Handhabung von E-Mail-Nachrichten, wie sie in den verschiedenen E-Mail- und MIME-RFCs beschrieben werden. Das allgemeine Format von E-Mail-Nachrichten (ein Block von Header-Feldern, die jeweils aus einem Namen gefolgt von einem Doppelpunkt, gefolgt von einem Wert bestehen, wobei der gesamte Block von einer Leerzeile und einem beliebigen 'Body' gefolgt wird) ist jedoch ein Format, das außerhalb des E-Mail-Bereichs nützlich geworden ist. Einige dieser Verwendungen entsprechen ziemlich genau den Haupt-E-Mail-RFCs, andere nicht. Selbst bei der Arbeit mit E-Mails gibt es Zeiten, in denen es wünschenswert ist, von der strikten Einhaltung der RFCs abzuweichen, z. B. beim Erzeugen von E-Mails, die mit E-Mail-Servern interagieren, die selbst die Standards nicht einhalten, oder die Erweiterungen implementieren, die Sie auf eine Weise verwenden möchten, die gegen die Standards verstößt.
Policy-Objekte verleihen dem E-Mail-Paket die Flexibilität, all diese unterschiedlichen Anwendungsfälle zu behandeln.
Ein Policy-Objekt kapselt eine Reihe von Attributen und Methoden, die das Verhalten verschiedener Komponenten des E-Mail-Pakets während der Nutzung steuern. Policy-Instanzen können an verschiedene Klassen und Methoden im E-Mail-Paket übergeben werden, um das Standardverhalten zu ändern. Die einstellbaren Werte und ihre Standardwerte werden unten beschrieben.
Es gibt eine Standardrichtlinie, die von allen Klassen im E-Mail-Paket verwendet wird. Für alle parser-Klassen und die zugehörigen Komfortfunktionen sowie für die Message-Klasse ist dies die Compat32-Richtlinie über ihre entsprechende vordefinierte Instanz compat32. Diese Richtlinie bietet vollständige Abwärtskompatibilität (in einigen Fällen einschließlich Fehlerkompatibilität) mit der E-Mail-Paketversion vor Python 3.3.
Der Standardwert für das Schlüsselwort policy für EmailMessage ist die EmailPolicy-Richtlinie über ihre vordefinierte Instanz default.
Wenn ein Message- oder EmailMessage-Objekt erstellt wird, erwirbt es eine Richtlinie. Wenn die Nachricht von einem parser erstellt wird, ist eine an den Parser übergebene Richtlinie die Richtlinie, die von der von ihm erstellten Nachricht verwendet wird. Wenn die Nachricht vom Programm erstellt wird, kann die Richtlinie bei ihrer Erstellung angegeben werden. Wenn eine Nachricht an einen generator übergeben wird, verwendet der Generator standardmäßig die Richtlinie der Nachricht, aber Sie können dem Generator auch eine spezifische Richtlinie übergeben, die die im Nachrichtenobjekt gespeicherte überschreibt.
Der Standardwert für das policy-Schlüsselwort für die email.parser-Klassen und die Parser-Komfortfunktionen **wird sich** in einer zukünftigen Version von Python **ändern**. Daher sollten Sie **immer explizit angeben, welche Richtlinie Sie verwenden möchten**, wenn Sie eine der im parser-Modul beschriebenen Klassen und Funktionen aufrufen.
Der erste Teil dieser Dokumentation behandelt die Funktionen von Policy, einer abstrakten Basisklasse, die die gemeinsamen Merkmale aller Policy-Objekte definiert, einschließlich compat32. Dazu gehören bestimmte Hook-Methoden, die intern vom E-Mail-Paket aufgerufen werden und die eine benutzerdefinierte Richtlinie überschreiben könnte, um ein anderes Verhalten zu erzielen. Der zweite Teil beschreibt die konkreten Klassen EmailPolicy und Compat32, die die Hooks implementieren, die das Standardverhalten bzw. das abwärtskompatible Verhalten und die Funktionen bereitstellen.
Policy-Instanzen sind unveränderlich, aber sie können geklont werden, wobei dieselben Schlüsselwortargumente wie der Klassenkonstruktor akzeptiert werden und eine neue Policy-Instanz zurückgegeben wird, die eine Kopie des Originals ist, aber mit geänderten Attributwerten.
Als Beispiel könnte der folgende Code verwendet werden, um eine E-Mail-Nachricht aus einer Datei auf der Festplatte zu lesen und sie an das Systemprogramm sendmail auf einem Unix-System zu übergeben
>>> from email import message_from_binary_file
>>> from email.generator import BytesGenerator
>>> from email import policy
>>> from subprocess import Popen, PIPE
>>> with open('mymsg.txt', 'rb') as f:
... msg = message_from_binary_file(f, policy=policy.default)
...
>>> p = Popen(['sendmail', msg['To'].addresses[0]], stdin=PIPE)
>>> g = BytesGenerator(p.stdin, policy=msg.policy.clone(linesep='\r\n'))
>>> g.flatten(msg)
>>> p.stdin.close()
>>> rc = p.wait()
Hier weisen wir BytesGenerator an, die RFC-korrekten Zeilen-Trennzeichen bei der Erstellung der Binärzeichenkette zu verwenden, die in die stdin von sendmail eingespeist wird, während die Standardrichtlinie \n als Zeilentrenner verwenden würde.
Einige Methoden des E-Mail-Pakets akzeptieren ein policy-Schlüsselwortargument, das es ermöglicht, die Richtlinie für diese Methode zu überschreiben. Der folgende Code verwendet beispielsweise die Methode as_bytes() des msg-Objekts aus dem vorherigen Beispiel und schreibt die Nachricht unter Verwendung der nativen Zeilentrenner der Plattform, auf der sie ausgeführt wird, in eine Datei
>>> import os
>>> with open('converted.txt', 'wb') as f:
... f.write(msg.as_bytes(policy=msg.policy.clone(linesep=os.linesep)))
17
Policy-Objekte können auch mit dem Additionsoperator kombiniert werden, was ein Policy-Objekt erzeugt, dessen Einstellungen eine Kombination der Nicht-Standardwerte der summierten Objekte sind
>>> compat_SMTP = policy.compat32.clone(linesep='\r\n')
>>> compat_strict = policy.compat32.clone(raise_on_defect=True)
>>> compat_strict_SMTP = compat_SMTP + compat_strict
Diese Operation ist nicht kommutativ; das heißt, die Reihenfolge, in der die Objekte addiert werden, spielt eine Rolle. Zur Veranschaulichung
>>> policy100 = policy.compat32.clone(max_line_length=100)
>>> policy80 = policy.compat32.clone(max_line_length=80)
>>> apolicy = policy100 + policy80
>>> apolicy.max_line_length
80
>>> apolicy = policy80 + policy100
>>> apolicy.max_line_length
100
- class email.policy.Policy(**kw)¶
Dies ist die abstrakte Basisklasse für alle Policy-Klassen. Sie bietet Standardimplementierungen für einige triviale Methoden sowie die Implementierung der Unveränderlichkeitseigenschaft, der Methode
clone()und der Konstruktorsemantik.Dem Konstruktor einer Policy-Klasse können verschiedene Schlüsselwortargumente übergeben werden. Die Argumente, die angegeben werden können, sind alle Nicht-Methoden-Eigenschaften dieser Klasse sowie alle zusätzlichen Nicht-Methoden-Eigenschaften der konkreten Klasse. Ein im Konstruktor angegebener Wert überschreibt den Standardwert für das entsprechende Attribut.
Diese Klasse definiert die folgenden Eigenschaften, und daher können Werte für die folgenden Eigenschaften im Konstruktor jeder Policy-Klasse übergeben werden
- max_line_length¶
Die maximale Länge jeder Zeile in der serialisierten Ausgabe, ohne Berücksichtigung der Zeilenabschlusszeichen. Standard ist 78 gemäß RFC 5322. Ein Wert von
0oderNonezeigt an, dass keine Zeilenumbrüche erfolgen sollen.
- linesep¶
Die Zeichenkette, die zur Beendigung von Zeilen in der serialisierten Ausgabe verwendet werden soll. Der Standard ist
\n, da dies die interne Zeilenende-Disziplin von Python ist, obwohl\r\nvon den RFCs gefordert wird.
- cte_type¶
Steuert die Art der Content Transfer Encodings, die verwendet werden dürfen oder müssen. Die möglichen Werte sind
7bitAlle Daten müssen "7-Bit-sauber" (nur ASCII) sein. Das bedeutet, dass Daten, wo nötig, entweder mit Quoted-Printable oder Base64 kodiert werden.
8bitDaten sind nicht auf 7-Bit-Reinheit beschränkt. Daten in Headern müssen weiterhin nur ASCII sein und werden daher kodiert (siehe
fold_binary()undutf8unten für Ausnahmen), aber Body-Teile dürfen den8bitCTE verwenden.Ein
cte_type-Wert von8bitfunktioniert nur mitBytesGenerator, nicht mitGenerator, da Zeichenketten keine Binärdaten enthalten können. Wenn einGeneratorunter einer Richtlinie arbeitet, diecte_type=8bitangibt, verhält er sich so, als obcte_type7bitwäre.
- raise_on_defect¶
Wenn
True, werden alle gefundenen Mängel als Fehler ausgelöst. WennFalse(Standard), werden Mängel an die Methoderegister_defect()übergeben.
- mangle_from_¶
Wenn
True, werden Zeilen, die mit “From “ im Body beginnen, maskiert, indem ihnen ein>vorangestellt wird. Dieser Parameter wird verwendet, wenn die Nachricht von einem Generator serialisiert wird. Standard:False.Hinzugefügt in Version 3.5.
- message_factory¶
Eine Factory-Funktion zum Erstellen eines neuen leeren Nachrichtenobjekts. Wird vom Parser beim Erstellen von Nachrichten verwendet. Standard ist
None, in diesem Fall wirdMessageverwendet.Hinzugefügt in Version 3.6.
- verify_generated_headers¶
Wenn
True(Standard), löst der GeneratorHeaderWriteErroraus, anstatt einen Header zu schreiben, der falsch gefaltet oder getrennt ist, so dass er als mehrere Header geparst oder mit benachbarten Daten verbunden würde. Solche Header können durch benutzerdefinierte Header-Klassen oder Fehler imemail-Modul generiert werden.Da dies ein Sicherheitsmerkmal ist, ist dieser Wert standardmäßig
True, auch in derCompat32-Richtlinie. Für abwärtskompatibles, aber unsicheres Verhalten muss er explizit aufFalsegesetzt werden.Hinzugefügt in Version 3.13.
Die folgende
Policy-Methode ist dazu bestimmt, von Code, der die E-Mail-Bibliothek verwendet, aufgerufen zu werden, um Policy-Instanzen mit benutzerdefinierten Einstellungen zu erstellen- clone(**kw)¶
Gibt eine neue
Policy-Instanz zurück, deren Attribute dieselben Werte wie die aktuelle Instanz haben, außer dort, wo diese Attribute durch die Schlüsselwortargumente neue Werte erhalten.
Die verbleibenden
Policy-Methoden werden vom E-Mail-Paketcode aufgerufen und sind nicht dazu bestimmt, von einer Anwendung, die das E-Mail-Paket verwendet, aufgerufen zu werden. Eine benutzerdefinierte Richtlinie muss all diese Methoden implementieren.- handle_defect(obj, defect)¶
Behandelt einen defect, der bei obj gefunden wurde. Wenn das E-Mail-Paket diese Methode aufruft, ist defect immer eine Unterklasse von
MessageDefect.Die Standardimplementierung prüft das Flag
raise_on_defect. Wenn esTrueist, wird defect als Ausnahme ausgelöst. Wenn esFalse(Standard) ist, werden obj und defect anregister_defect()übergeben.
- register_defect(obj, defect)¶
Registriert einen defect bei obj. Im E-Mail-Paket ist defect immer eine Unterklasse von
MessageDefect.Die Standardimplementierung ruft die Methode
appenddes Attributsdefectsvon obj auf. Wenn das E-Mail-Pakethandle_defectaufruft, hat obj normalerweise ein Attributdefects, das eine Methodeappendhat. Benutzerdefinierte Objekt-Typen, die mit dem E-Mail-Paket verwendet werden (z. B. benutzerdefinierteMessage-Objekte), sollten ebenfalls ein solches Attribut bereitstellen, andernfalls führen Mängel in geparsten Nachrichten zu unerwarteten Fehlern.
- header_max_count(name)¶
Gibt die maximal zulässige Anzahl von Headern mit dem Namen name zurück.
Wird aufgerufen, wenn ein Header zu einem
EmailMessage- oderMessage-Objekt hinzugefügt wird. Wenn der zurückgegebene Wert nicht0oderNoneist und bereits eine Anzahl von Headern mit dem Namen name vorhanden ist, die größer oder gleich dem zurückgegebenen Wert ist, wird einValueErrorausgelöst.Da das Standardverhalten von
Message.__setitem__darin besteht, den Wert an die Liste der Header anzuhängen, ist es einfach, doppelte Header zu erstellen, ohne es zu merken. Diese Methode ermöglicht es, bestimmte Header in der Anzahl der Instanzen dieses Headers zu begrenzen, die programmatisch zu einerMessagehinzugefügt werden dürfen. (Das Limit wird vom Parser nicht beachtet, der getreu so viele Header erzeugt, wie im zu parsierenden Nachrichten vorhanden sind.)Die Standardimplementierung gibt für alle Header-Namen
Nonezurück.
- header_source_parse(sourcelines)¶
Das E-Mail-Paket ruft diese Methode mit einer Liste von Zeichenketten auf, wobei jede Zeichenkette mit den Zeilenabschlusszeichen endet, die im zu parsierenden Quelltext gefunden wurden. Die erste Zeile enthält den Namen und den Trenner des Header-Feldes. Alle Leerzeichen im Quelltext bleiben erhalten. Die Methode sollte das Tupel
(name, value)zurückgeben, das in derMessagegespeichert werden soll, um den geparsten Header darzustellen.Wenn eine Implementierung die Kompatibilität mit den bestehenden E-Mail-Paket-Richtlinien beibehalten möchte, sollte name der beibehaltene Groß-/Kleinschreibung-Name sein (alle Zeichen bis zum ‘
:’-Trenner), während value der entfaltete Wert sein sollte (alle Zeilentrennzeichen entfernt, aber Leerzeichen beibehalten), von führenden Leerzeichen bereinigt.sourcelines kann Surrogate-escaped Binärdaten enthalten.
Es gibt keine Standardimplementierung
- header_store_parse(name, value)¶
Das E-Mail-Paket ruft diese Methode mit dem Namen und Wert auf, die vom Anwendungsprogramm bereitgestellt werden, wenn das Anwendungsprogramm eine
Messageprogrammatisch ändert (im Gegensatz zu einer von einem Parser erstelltenMessage). Die Methode sollte das Tupel(name, value)zurückgeben, das in derMessagegespeichert werden soll, um den Header darzustellen.Wenn eine Implementierung die Kompatibilität mit den bestehenden E-Mail-Paket-Richtlinien beibehalten möchte, sollten name und value Zeichenketten oder Zeichenketten-Unterklassen sein, die den Inhalt der übergebenen Argumente nicht ändern.
Es gibt keine Standardimplementierung
- header_fetch_parse(name, value)¶
Das E-Mail-Paket ruft diese Methode mit dem name und value auf, die derzeit in der
Messagegespeichert sind, wenn dieser Header vom Anwendungsprogramm angefordert wird, und was auch immer die Methode zurückgibt, wird an die Anwendung als Wert des abgerufenen Headers zurückgegeben. Beachten Sie, dass möglicherweise mehr als ein Header mit demselben Namen in derMessagegespeichert ist; die Methode wird mit dem spezifischen Namen und Wert des Headers, der an die Anwendung zurückgegeben werden soll, aufgerufen.value kann Surrogate-escaped Binärdaten enthalten. Es sollten keine Surrogate-escaped Binärdaten im von der Methode zurückgegebenen Wert vorhanden sein.
Es gibt keine Standardimplementierung
- fold(name, value)¶
Das E-Mail-Paket ruft diese Methode mit dem name und value auf, die derzeit in der
Messagefür einen bestimmten Header gespeichert sind. Die Methode sollte eine Zeichenkette zurückgeben, die diesen Header korrekt "gefaltet" (gemäß den Richtlinieneinstellungen) darstellt, indem sie den name mit dem value kombiniert undlinesep-Zeichen an den entsprechenden Stellen einfügt. Siehe RFC 5322 für eine Diskussion der Regeln für das Falten von E-Mail-Headern.value kann Surrogate-escaped Binärdaten enthalten. Es sollten keine Surrogate-escaped Binärdaten in der von der Methode zurückgegebenen Zeichenkette vorhanden sein.
- class email.policy.EmailPolicy(**kw)¶
Diese konkrete
Policybietet ein Verhalten, das vollständig konform mit den aktuellen E-Mail-RFCs ist. Dazu gehören (aber nicht ausschließlich) RFC 5322, RFC 2047 und die aktuellen MIME-RFCs.Diese Richtlinie fügt neue Algorithmen zum Parsen und Falten von Headern hinzu. Anstelle einfacher Zeichenketten sind Header
str-Unterklassen mit Attributen, die vom Typ des Feldes abhängen. Die Parsing- und Faltungsalgorithmen implementieren RFC 2047 und RFC 5322 vollständig.Der Standardwert für das Attribut
message_factoryistEmailMessage.Zusätzlich zu den oben aufgeführten einstellbaren Attributen, die für alle Richtlinien gelten, fügt diese Richtlinie die folgenden zusätzlichen Attribute hinzu
Hinzugefügt in Version 3.6: [1]
- utf8¶
Wenn
False, folgt RFC 5322 und unterstützt Nicht-ASCII-Zeichen in Headern, indem diese als "encoded words" kodiert werden. WennTrue, folgt RFC 6532 und verwendetutf-8-Kodierung für Header. Nachrichten, die auf diese Weise formatiert sind, können an SMTP-Server übergeben werden, die dieSMTPUTF8-Erweiterung unterstützen (RFC 6531).
- refold_source¶
Wenn der Wert eines Headers im
Message-Objekt aus einemparserstammt (im Gegensatz zu einem vom Programm gesetzten Wert), gibt dieses Attribut an, ob ein Generator diesen Wert beim Umwandeln der Nachricht zurück in die serialisierte Form neu falten soll oder nicht. Die möglichen Werte sindnoneAlle Quellwerte verwenden die ursprüngliche Faltung
longQuellwerte, bei denen eine Zeile länger als
max_line_lengthist, werden neu gefaltetallAlle Werte werden neu gefaltet.
Der Standardwert ist
long.
- header_factory¶
Ein aufrufbares Objekt, das zwei Argumente entgegennimmt:
nameundvalue, wobeinameein Headerfeldname undvalueein entfalteter Headerfeldwert ist, und eine Zeichenketten-Unterklasse zurückgibt, die diesen Header darstellt. Eine Standard-header_factory(sieheheaderregistry) wird bereitgestellt, die benutzerdefinierte Analysen für die verschiedenen Adress- und Datums-Headerfelder nach RFC 5322 und die wichtigsten MIME-Headerfeldtypen unterstützt. Die Unterstützung für zusätzliche benutzerdefinierte Analysen wird in Zukunft hinzugefügt.
- content_manager¶
Ein Objekt mit mindestens zwei Methoden: get_content und set_content. Wenn die Methode
get_content()oderset_content()einesEmailMessage-Objekts aufgerufen wird, ruft es die entsprechende Methode dieses Objekts auf und übergibt ihm das Nachrichtenobjekt als erstes Argument sowie alle Argumente oder Schlüsselwörter, die ihm als zusätzliche Argumente übergeben wurden. Standardmäßig istcontent_manageraufraw_data_managergesetzt.Hinzugefügt in Version 3.4.
Die Klasse bietet die folgenden konkreten Implementierungen der abstrakten Methoden von
Policy- header_max_count(name)¶
Gibt den Wert des Attributs
max_countder spezialisierten Klasse zurück, die zur Darstellung des Headers mit dem gegebenen Namen verwendet wird.
- header_source_parse(sourcelines)¶
Der Name wird als alles bis zum ‘
:’ geparst und unverändert zurückgegeben. Der Wert wird ermittelt, indem führende Leerzeichen vom Rest der ersten Zeile entfernt, alle nachfolgenden Zeilen zusammengefügt und alle abschließenden Wagenrücklauf- oder Zeilenumbruchzeichen entfernt werden.
- header_store_parse(name, value)¶
Der Name wird unverändert zurückgegeben. Wenn der Eingabewert ein Attribut
namehat und dieses name unter Berücksichtigung der Groß- und Kleinschreibung übereinstimmt, wird der Wert unverändert zurückgegeben. Andernfalls werden name und value anheader_factoryübergeben, und das daraus resultierende Header-Objekt wird als Wert zurückgegeben. In diesem Fall wird einValueErrorausgelöst, wenn der Eingabewert CR- oder LF-Zeichen enthält.
- header_fetch_parse(name, value)¶
Wenn der Wert ein Attribut
namehat, wird er unverändert zurückgegeben. Andernfalls werden name und der value mit allen entfernten CR- oder LF-Zeichen an dieheader_factoryübergeben, und das daraus resultierende Header-Objekt wird zurückgegeben. Alle surrogat-escaped Bytes werden in das Unicode-Symbol für unbekannte Zeichen umgewandelt.
- fold(name, value)¶
Die Header-Faltung wird durch die Richtlinieneinstellung
refold_sourcegesteuert. Ein Wert gilt genau dann als „Source Value“ (Quellwert), wenn er kein Attributnamehat (ein Attributnamezu haben bedeutet, dass es sich um ein Header-Objekt irgendeiner Art handelt). Wenn ein Quellwert gemäß der Richtlinie neu gefaltet werden muss, wird er in ein Header-Objekt umgewandelt, indem name und der value mit allen entfernten CR- und LF-Zeichen an dieheader_factoryübergeben werden. Die Faltung eines Header-Objekts erfolgt durch Aufrufen seinerfold-Methode mit der aktuellen Richtlinie.Quellwerte werden mithilfe von
splitlines()in Zeilen aufgeteilt. Wenn der Wert nicht neu gefaltet werden soll, werden die Zeilen mit demlinesepaus der Richtlinie wieder verbunden und zurückgegeben. Eine Ausnahme bilden Zeilen, die nicht-ASCII-Binärdaten enthalten. In diesem Fall wird der Wert unabhängig von der Einstellungrefold_sourceneu gefaltet, was dazu führt, dass die Binärdaten mit derunknown-8bit-Zeichensatzkodierung CTE-codiert werden.
- fold_binary(name, value)¶
Dasselbe wie
fold(), wenncte_type7bitist, mit der Ausnahme, dass der zurückgegebene Wert Bytes ist.Wenn
cte_type8bitist, werden Nicht-ASCII-Binärdaten zurück in Bytes konvertiert. Header mit Binärdaten werden nicht neu gefaltet, unabhängig von der Einstellungrefold_header, da nicht bekannt ist, ob die Binärdaten aus Einzelbyte-Zeichen oder Mehrbyte-Zeichen bestehen.
Die folgenden Instanzen von EmailPolicy bieten Standardwerte, die für spezifische Anwendungsdomänen geeignet sind. Beachten Sie, dass das Verhalten dieser Instanzen (insbesondere der HTTP-Instanz) in Zukunft möglicherweise angepasst wird, um den für ihre Domänen relevanten RFCs noch genauer zu entsprechen.
- email.policy.default¶
Eine Instanz von
EmailPolicymit unveränderten Standardwerten. Diese Richtlinie verwendet die Standard-Python-Zeilenumbrüche\nanstelle der RFC-konformen\r\n.
- email.policy.SMTP¶
Geeignet für die Serialisierung von Nachrichten in Übereinstimmung mit den E-Mail-RFCs. Wie
default, aber mitlinesepauf\r\ngesetzt, was RFC-konform ist.
- email.policy.SMTPUTF8¶
Dasselbe wie
SMTP, außer dassutf8Trueist. Nützlich für die Serialisierung von Nachrichten in einem Nachrichtenspeicher, ohne kodierte Wörter in den Headern zu verwenden. Sollte nur für die SMTP-Übertragung verwendet werden, wenn die Absender- oder Empfängeradressen Nicht-ASCII-Zeichen enthalten (die Methodesmtplib.SMTP.send_message()erledigt dies automatisch).
- email.policy.HTTP¶
Geeignet für die Serialisierung von Headern für die Verwendung im HTTP-Verkehr. Wie
SMTP, außer dassmax_line_lengthaufNone(unbegrenzt) gesetzt ist.
- email.policy.strict¶
Bequeme Instanz. Dasselbe wie
default, außer dassraise_on_defectaufTruegesetzt ist. Dies ermöglicht es, jede Richtlinie streng zu machen, indem man schreibtsomepolicy + policy.strict
Mit all diesen EmailPolicies ändert sich die effektive API des E-Mail-Pakets gegenüber der API von Python 3.2 in den folgenden Punkten:
Das Setzen eines Headers in einer
Messageführt dazu, dass dieser Header geparst und ein Header-Objekt erstellt wird.Das Abrufen eines Header-Werts aus einer
Messageführt dazu, dass dieser Header geparst und ein Header-Objekt erstellt und zurückgegeben wird.Jedes Header-Objekt oder jeder Header, der aufgrund der Richtlinieneinstellungen neu gefaltet wird, wird mit einem Algorithmus gefaltet, der die RFC-Faltungsalgorithmen vollständig implementiert, einschließlich des Wissens, wo kodierte Wörter erforderlich und erlaubt sind.
Aus Sicht der Anwendung bedeutet dies, dass jeder Header, der über die EmailMessage abgerufen wird, ein Header-Objekt mit zusätzlichen Attributen ist, dessen Zeichenkettenwert der vollständig dekodierte Unicode-Wert des Headers ist. Ebenso kann ein Header einen neuen Wert zugewiesen bekommen oder ein neuer Header erstellt werden, indem eine Unicode-Zeichenkette verwendet wird, und die Richtlinie kümmert sich um die Umwandlung der Unicode-Zeichenkette in die korrekte RFC-kodierte Form.
Die Header-Objekte und ihre Attribute werden in headerregistry beschrieben.
- class email.policy.Compat32(**kw)¶
Diese konkrete
Policyist die Abwärtskompatibilitätsrichtlinie. Sie repliziert das Verhalten des E-Mail-Pakets in Python 3.2. Das Modulpolicydefiniert auch eine Instanz dieser Klasse,compat32, die als Standardrichtlinie verwendet wird. Somit ist das Standardverhalten des E-Mail-Pakets die Aufrechterhaltung der Kompatibilität mit Python 3.2.Die folgenden Attribute haben Werte, die sich von den Standardwerten der
Policyunterscheiden- mangle_from_¶
Der Standardwert ist
True.
Die Klasse bietet die folgenden konkreten Implementierungen der abstrakten Methoden von
Policy- header_source_parse(sourcelines)¶
Der Name wird als alles bis zum ‘
:’ geparst und unverändert zurückgegeben. Der Wert wird ermittelt, indem führende Leerzeichen vom Rest der ersten Zeile entfernt, alle nachfolgenden Zeilen zusammengefügt und alle abschließenden Wagenrücklauf- oder Zeilenumbruchzeichen entfernt werden.
- header_store_parse(name, value)¶
Der Name und der Wert werden unverändert zurückgegeben.
- header_fetch_parse(name, value)¶
Wenn der Wert Binärdaten enthält, wird er unter Verwendung des
unknown-8bit-Zeichensatzes in einHeader-Objekt umgewandelt. Andernfalls wird er unverändert zurückgegeben.
- fold(name, value)¶
Header werden mit dem
Header-Faltungsalgorithmus gefaltet, der vorhandene Zeilenumbrüche im Wert beibehält und jede resultierende Zeile auf diemax_line_lengthumbricht. Nicht-ASCII-Binärdaten werden mit demunknown-8bit-Zeichensatz CTE-codiert.
- fold_binary(name, value)¶
Header werden mit dem
Header-Faltungsalgorithmus gefaltet, der vorhandene Zeilenumbrüche im Wert beibehält und jede resultierende Zeile auf diemax_line_lengthumbricht. Wenncte_type7bitist, werden Nicht-ASCII-Binärdaten mit demunknown-8bit-Zeichensatz CTE-codiert. Andernfalls wird der ursprüngliche Quellheader mit seinen vorhandenen Zeilenumbrüchen und allen (RFC-ungültigen) Binärdaten, die er enthalten kann, verwendet.
- email.policy.compat32¶
Eine Instanz von
Compat32, die die Abwärtskompatibilität mit dem Verhalten des E-Mail-Pakets in Python 3.2 bietet.
Fußnoten