email.message: Representerar ett e-postmeddelande

Källkod: Lib/email/message.py


Tillagd i version 3.6: [1]

Den centrala klassen i paketet email är klassen EmailMessage, som importeras från modulen email.message. Det är basklassen för objektmodellen email. EmailMessage tillhandahåller kärnfunktionaliteten för att ställa in och fråga efter rubrikfält, för att komma åt meddelandekroppar och för att skapa eller ändra strukturerade meddelanden.

Ett e-postmeddelande består av headers och en payload (som också kallas för content). Headers är fältnamn och värden i stil med RFC 5322 eller RFC 6532, där fältnamnet och värdet separeras med ett kolon. Kolonet är inte en del av vare sig fältnamnet eller fältvärdet. Nyttolasten kan vara ett enkelt textmeddelande, ett binärt objekt eller en strukturerad sekvens av undermeddelanden, vart och ett med sin egen uppsättning rubriker och sin egen nyttolast. Den senare typen av nyttolast indikeras av att meddelandet har en MIME-typ som multipart/* eller message/rfc822.

Den konceptuella modell som tillhandahålls av ett EmailMessage-objekt är en ordnad ordbok med rubriker kopplad till en payload som representerar RFC 5322-meddelandets kropp, som kan vara en lista över EmailMessage-underobjekt. Förutom de vanliga ordboksmetoderna för att komma åt namn och värden på rubrikerna finns det metoder för att komma åt specialiserad information från rubrikerna (t.ex. MIME-innehållstypen), för att arbeta med nyttolasten, för att generera en serialiserad version av meddelandet och för att rekursivt gå igenom objektträdet.

Det ordboksliknande gränssnittet EmailMessage indexeras av headernamnen, som måste vara ASCII-värden. Värdena i ordboken är strängar med några extra metoder. Headers lagras och returneras i skiftlägesbevarande form, men fältnamn matchas skiftlägesokänsligt. Nycklarna är ordnade, men till skillnad från en riktig dict kan det finnas dubbletter. Ytterligare metoder tillhandahålls för att arbeta med rubriker som har dubbla nycklar.

payload är antingen en sträng eller ett bytesobjekt, när det gäller enkla meddelandeobjekt, eller en lista med EmailMessage-objekt, för MIME-containerdokument som multipart/* och message/rfc822-meddelandeobjekt.

class email.message.EmailMessage(policy=default)

Om policy anges används de regler som anges i policyn för att uppdatera och serialisera representationen av meddelandet. Om policy inte anges används default-policyn, som följer reglerna i RFC för e-post utom för radavslutningar (istället för RFC-mandatet \r\n används Python-standarden \n för radavslutningar). För mer information se policy-dokumentationen.

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

Returnerar hela meddelandet plattat som en sträng. När det valfria unixfrom är true inkluderas kuvertrubriken i den returnerade strängen. unixfrom är som standard False. För bakåtkompatibilitet med basklassen Message accepteras maxheaderlen, men standardvärdet är None, vilket innebär att radlängden som standard styrs av policyns max_line_length. Argumentet policy kan användas för att åsidosätta den standardpolicy som hämtas från meddelandeinstansen. Detta kan användas för att styra en del av den formatering som produceras av metoden, eftersom den angivna policy kommer att skickas till Generator.

Att göra meddelandet plattare kan leda till ändringar i EmailMessage om standardvärden måste fyllas i för att slutföra omvandlingen till en sträng (till exempel kan MIME-gränser genereras eller ändras).

Observera att den här metoden tillhandahålls som en bekvämlighet och kanske inte är det mest användbara sättet att serialisera meddelanden i din applikation, särskilt om du hanterar flera meddelanden. Se email.generator.Generator för ett mer flexibelt API för serialisering av meddelanden. Observera också att denna metod är begränsad till att producera meddelanden serialiserade som ”7 bit clean” när utf8 är False, vilket är standard.

Ändrad i version 3.6: standardbeteendet när maxheaderlen inte anges ändrades från standardvärdet 0 till standardvärdet max_line_length från policyn.

__str__()

Motsvarar as_string(policy=self.policy.clone(utf8=True)). Tillåter str(msg) att producera en sträng som innehåller det serialiserade meddelandet i ett läsbart format.

Ändrad i version 3.4: metoden ändrades så att den använder utf8=True, vilket ger en RFC 6531-liknande meddelanderepresentation, istället för att vara ett direkt alias för as_string().

as_bytes(unixfrom=False, policy=None)

Returnerar hela meddelandet plattat som ett bytesobjekt. När det valfria unixfrom är true inkluderas kuvertrubriken i den returnerade strängen. unixfrom är som standard False. Argumentet policy kan användas för att åsidosätta den standardpolicy som hämtas från meddelandeinstansen. Detta kan användas för att kontrollera en del av formateringen som produceras av metoden, eftersom den angivna policyn kommer att skickas till BytesGenerator.

Att göra meddelandet plattare kan leda till ändringar i EmailMessage om standardvärden måste fyllas i för att slutföra omvandlingen till en sträng (till exempel kan MIME-gränser genereras eller ändras).

Observera att denna metod tillhandahålls som en bekvämlighet och kanske inte är det mest användbara sättet att serialisera meddelanden i din applikation, särskilt om du hanterar flera meddelanden. Se email.generator.BytesGenerator för ett mer flexibelt API för serialisering av meddelanden.

__bytes__()

Motsvarar as_bytes(). Tillåter bytes(msg) att producera ett bytes-objekt som innehåller det serialiserade meddelandet.

is_multipart()

Returnerar True om meddelandets nyttolast är en lista med sub-objekt av EmailMessage, annars returneras False. När is_multipart() returnerar False, bör nyttolasten vara ett strängobjekt (som kan vara en CTE-kodad binär nyttolast). Observera att om is_multipart() returnerar True betyder det inte nödvändigtvis att ”msg.get_content_maintype() == ’multipart’” kommer att returnera True. Till exempel kommer is_multipart att returnera True när EmailMessage är av typen message/rfc822.

set_unixfrom(unixfrom)

Ställer in meddelandets kuverthuvud till unixfrom, som ska vara en sträng. (Se mboxMessage för en kort beskrivning av detta huvud)

get_unixfrom()

Returnerar meddelandets kuverthuvud. Standardvärdet är None om kuverthuvudet aldrig har angetts.

Följande metoder implementerar det mappningsliknande gränssnittet för åtkomst till meddelandets rubriker. Observera att det finns vissa semantiska skillnader mellan dessa metoder och ett normalt mappningsgränssnitt (dvs. ett dictionary-gränssnitt). I en dictionary finns det t.ex. inga duplicerade nycklar, men här kan det finnas duplicerade meddelandehuvuden. I ordböcker finns det inte heller någon garanterad ordning på de nycklar som returneras av keys(), men i ett EmailMessage-objekt returneras alltid rubrikerna i den ordning de förekom i det ursprungliga meddelandet eller i den ordning de senare lades till i meddelandet. En header som tagits bort och sedan lagts till igen läggs alltid till i slutet av headerlistan.

Dessa semantiska skillnader är avsiktliga och syftar till att underlätta i de vanligaste användningsfallen.

Observera att i samtliga fall ingår inte eventuella kuvertrubriker som finns i meddelandet i mappningsgränssnittet.

__len__()

Returnerar det totala antalet headers, inklusive dubbletter.

__contains__(name)

Returnerar True om meddelandeobjektet har ett fält med namnet name. Matchning sker utan hänsyn till skiftlägesskillnader och namn innehåller inte efterföljande kolon. Används för operatorn in. Till exempel:

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

Returnerar värdet för det namngivna rubrikfältet. name inkluderar inte fältseparatorn kolon. Om rubrikfältet saknas returneras None; ett KeyError genereras aldrig.

Observera att om det namngivna fältet förekommer mer än en gång i meddelandets rubriker, är det odefinierat exakt vilket av dessa fältvärden som kommer att returneras. Använd metoden get_all() för att hämta värdena för alla befintliga rubriker med namnet namn.

Med standardprinciperna (icke-compat32) är det returnerade värdet en instans av en underklass till email.headerregistry.BaseHeader.

__setitem__(name, val)

Lägg till en rubrik i meddelandet med fältnamnet name och värdet val. Fältet läggs till i slutet av meddelandets befintliga rubriker.

Observera att detta inte skriver över eller raderar någon befintlig header med samma namn. Om du vill vara säker på att det nya sidhuvudet är det enda som finns i meddelandet med fältnamnet namn, raderar du fältet först, t.ex.:

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

Om policy definierar att vissa rubriker ska vara unika (som standardpolicyerna gör), kan den här metoden ge upphov till ett ValueError när ett försök görs att tilldela ett värde till en sådan rubrik när det redan finns ett. Detta beteende är avsiktligt för konsekvensens skull, men var inte beroende av det eftersom vi kan välja att göra sådana tilldelningar till en automatisk radering av den befintliga rubriken i framtiden.

__delitem__(name)

Ta bort alla förekomster av fältet med namnet namn från meddelandets rubriker. Inget undantag görs om det namngivna fältet inte finns med i sidhuvudet.

keys()

Returnerar en lista med alla namn på fält i meddelandets header.

values()

Returnerar en lista med alla fältvärden i meddelandet.

items()

Returnerar en lista med 2-tuples som innehåller alla meddelandets fältrubriker och värden.

get(name, failobj=None)

Returnerar värdet för det namngivna rubrikfältet. Detta är identiskt med __getitem__() förutom att den valfria failobj returneras om det namngivna huvudfältet saknas (failobj är som standard None).

Här är några ytterligare användbara metoder för header:

get_all(name, failobj=None)

Returnerar en lista med alla värden för fältet med namnet name. Om det inte finns några sådana namngivna rubriker i meddelandet returneras failobj (standardvärde är None).

add_header(_name, _value, **_params)

Utökad inställning av sidhuvud. Den här metoden liknar __setitem__() förutom att ytterligare rubrikparametrar kan anges som nyckelordsargument. _name är rubrikfältet som ska läggas till och _value är det primära värdet för rubriken.

För varje objekt i nyckelordets argumentordbok _params tas nyckeln som parameternamn, med understrykningar konverterade till bindestreck (eftersom bindestreck är olagliga i Python-identifierare). Normalt kommer parametern att läggas till som key="value" om inte värdet är None, i vilket fall endast nyckeln kommer att läggas till.

Om värdet innehåller icke-ASCII-tecken kan teckenuppsättningen och språket styras explicit genom att ange värdet som en tredelad tupel i formatet (CHARSET, LANGUAGE, VALUE), där CHARSET är en sträng som namnger den teckenuppsättning som ska användas för att koda värdet, LANGUAGE kan vanligtvis sättas till None eller den tomma strängen (se RFC 2231 för andra möjligheter), och VALUE är strängvärdet som innehåller icke-ASCII-kodpunkter. Om en tupel med tre inte skickas och värdet innehåller icke-ASCII-tecken, kodas det automatiskt i RFC 2231-format med CHARSET utf-8 och LANGUAGE None.

Här är ett exempel:

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

Detta kommer att lägga till en rubrik som ser ut som

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

Ett exempel på det utökade gränssnittet med icke-ASCII-tecken:

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

Ersätt ett huvud. Ersätt den första headern som hittas i meddelandet som matchar _namn, med bibehållen headerordning och fältnamn i originalheaderns versaler. Om inget matchande huvud hittas, uppstår ett KeyError.

get_content_type()

Returnerar meddelandets innehållstyp, tvingad till gemener av formen maintype/subtype. Om det inte finns något Content-Type-huvud i meddelandet returneras det värde som returneras av get_default_type(). Om rubriken Content-Type är ogiltig, returneras text/plain.

(Enligt RFC 2045 har meddelanden alltid en standardtyp, get_content_type() kommer alltid att returnera ett värde. RFC 2045 definierar ett meddelandes standardtyp till att vara text/plain såvida det inte visas i en multipart/digest-container, i vilket fall det skulle vara message/rfc822. Om rubriken Content-Type har en ogiltig typspecifikation, föreskriver RFC 2045 att standardtypen skall vara text/plain)

get_content_maintype()

Returnerar meddelandets huvudsakliga innehållstyp. Detta är maintype-delen av strängen som returneras av get_content_type().

get_content_subtype()

Returnerar meddelandets typ av underinnehåll. Detta är subtype-delen av strängen som returneras av get_content_type().

get_default_type()

Returnerar den förvalda innehållstypen. De flesta meddelanden har standardinnehållstypen text/plain, utom meddelanden som är underdelar av behållare av typen multipart/digest. Sådana underdelar har en standardinnehållstyp av typen message/rfc822.

set_default_type(ctype)

Ställer in standardinnehållstypen. ctype bör antingen vara text/plain eller message/rfc822, även om detta inte är obligatoriskt. Standardinnehållstypen lagras inte i Content-Type-rubriken, så den påverkar bara returvärdet för metoderna get_content_type när ingen Content-Type-rubrik finns i meddelandet.

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

Ställer in en parameter i Content-Type-huvudet. Om parametern redan finns i rubriken ersätts dess värde med värde. När header är Content-Type (standard) och rubriken ännu inte finns i meddelandet, lägg till den, sätt dess värde till text/plain och lägg till det nya parametervärdet. Det valfria header anger ett alternativt huvud till Content-Type.

Om värdet innehåller icke-ASCII-tecken kan teckenuppsättning och språk anges explicit med hjälp av de valfria parametrarna charset och language. Den valfria parametern language anger språket enligt RFC 2231 och är som standard den tomma strängen. Både charset och language bör vara strängar. Standardinställningen är att använda utf8 charset och None för language.

Om replace är False (standard) flyttas rubriken till slutet av listan med rubriker. Om replace är True kommer rubriken att uppdateras på plats.

Användningen av parametern requote med EmailMessage-objekt är föråldrad.

Observera att befintliga parametervärden för rubriker kan nås via attributet params för rubrikvärdet (t.ex. msg['Content-Type'].params['charset']).

Ändrad i version 3.4: nyckelordet replace har lagts till.

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

Tar bort den angivna parametern helt från Content-Type-huvudet. Rubriken kommer att skrivas om på plats utan parametern eller dess värde. Det valfria header anger ett alternativ till Content-Type.

Användningen av parametern requote med EmailMessage-objekt är föråldrad.

get_filename(failobj=None)

Returnerar värdet på parametern filename i Content-Disposition-rubriken i meddelandet. Om rubriken inte har någon parameter för filename, går denna metod tillbaka till att leta efter parametern name i rubriken Content-Type. Om ingen av dessa hittas, eller om rubriken saknas, returneras failobj. Den returnerade strängen kommer alltid att vara ociterad enligt email.utils.unquote().

get_boundary(failobj=None)

Returnerar värdet på parametern boundary i Content-Type-rubriken i meddelandet, eller failobj om rubriken saknas eller inte har någon parameter för boundary. Den returnerade strängen kommer alltid att vara ociterad enligt email.utils.unquote().

set_boundary(boundary)

Ställ in parametern boundary i rubriken Content-Type till boundary. set_boundary() kommer alltid att citera boundary om det behövs. Ett HeaderParseError uppstår om meddelandeobjektet inte har något Content-Type-huvud.

Observera att denna metod skiljer sig något från att ta bort den gamla Content-Type-rubriken och lägga till en ny med den nya gränsen via add_header(), eftersom set_boundary() bevarar ordningen på Content-Type-rubriken i listan över rubriker.

get_content_charset(failobj=None)

Returnerar parametern charset för rubriken Content-Type, omgjord till gemener. Om det inte finns någon Content-Type header, eller om den headern inte har någon charset parameter, returneras failobj.

get_charsets(failobj=None)

Returnerar en lista som innehåller teckenuppsättningsnamnen i meddelandet. Om meddelandet är en multipart, kommer listan att innehålla ett element för varje underdel i nyttolasten, annars kommer det att vara en lista med längden 1.

Varje post i listan kommer att vara en sträng som är värdet på parametern charset i rubriken Content-Type för den representerade underdelen. Om underdelen inte har något Content-Type-huvud, ingen charset-parameter eller inte är av huvud-MIME-typen text, kommer den posten i den returnerade listan att vara failobj.

is_attachment()

Returnerar True om det finns en Content-Disposition header och dess (skiftlägesokänsliga) värde är attachment, annars False.

Ändrad i version 3.4.2: is_attachment är nu en metod istället för en egenskap, för överensstämmelse med is_multipart().

get_content_disposition()

Returnerar det gemena värdet (utan parametrar) av meddelandets Content-Disposition-huvud om det har ett sådant, eller None. De möjliga värdena för denna metod är inline, attachment eller None om meddelandet följer RFC 2183.

Tillagd i version 3.5.

Följande metoder avser avfrågning och manipulering av innehållet (nyttolasten) i meddelandet.

walk()

Metoden walk() är en allroundgenerator som kan användas för att iterera över alla delar och underdelar i ett meddelandeobjektträd, i djupförsta traversalordning. Du kommer vanligtvis att använda walk() som iterator i en for-loop; varje iteration returnerar nästa underdel.

Här är ett exempel som skriver ut MIME-typen för varje del i en flerdelad meddelandestruktur:

>>> 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 itererar över underdelarna av alla delar där is_multipart`() returnerar True, även om msg.get_content_maintype() == 'multipart' kan returnera False. Vi kan se detta i vårt exempel genom att använda hjälpfunktionen _structure debug:

>>> 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

Här är message delarna inte multiparts, men de innehåller subparts. is_multipart() returnerar True och walk går ner i underdelarna.

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

Returnerar den MIME-del som är den bästa kandidaten för att vara ”body” i meddelandet.

preferencelist måste vara en sekvens av strängar från uppsättningen related, html och plain, och anger preferensordningen för innehållstypen för den returnerade delen.

Börja leta efter kandidatmatchningar med det objekt som metoden get_body anropas på.

Om related inte ingår i preferencelist, betrakta rotdelen (eller underdelen av rotdelen) av alla relaterade som påträffas som en kandidat om (under)delen matchar en preferens.

När du stöter på en multipart/related, kontrollera start parametern och om en del med en matchande Content-ID hittas, beakta endast den när du letar efter kandidatmatchningar. I annat fall beaktas endast den första (standardrot) delen av multipart/related.

Om en del har ett Content-Disposition-huvud, ska delen endast betraktas som en kandidatmatchning om värdet på huvudet är inline.

Om ingen av kandidaterna matchar någon av preferenserna i preferencelist, returneras None.

Anmärkningar: (1) För de flesta tillämpningar är de enda preferencelist-kombinationerna som verkligen är meningsfulla ('plain',), ('html', 'plain') och standardalternativet ('related', 'html', 'plain'). (2) Eftersom matchningen börjar med det objekt som get_body anropas på, kommer anrop av get_body på en multipart/related att returnera själva objektet om inte preferencelist har ett annat värde än standardvärdet. (3) Meddelanden (eller meddelandedelar) som inte anger någon Content-Type eller vars Content-Type-rubrik är ogiltig kommer att behandlas som om de vore av typen text/plain, vilket ibland kan leda till att get_body ger oväntade resultat.

iter_attachments()

Returnerar en iterator över alla omedelbara underdelar av meddelandet som inte är kandidat-”body”-delar. Det vill säga, hoppa över den första förekomsten av var och en av text/plain, text/html, multipart/related, eller multipart/alternative (såvida de inte uttryckligen är markerade som bilagor via Content-Disposition: attachment), och returnera alla återstående delar. När det tillämpas direkt på en multipart/related, returneras en iterator över alla relaterade delar utom rotdelen (dvs. den del som pekas ut av parametern start, eller den första delen om det inte finns någon parameter start eller om parametern start inte matchar Content-ID för någon av delarna). När den tillämpas direkt på en multipart/alternative eller en icke-multipart, returneras en tom iterator.

iter_parts()

Returnerar en iterator över alla omedelbara underdelar av meddelandet, som kommer att vara tom för en icke-multipart. (Se även walk().)

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

Anropa metoden get_content() för content_manager, med self som meddelandeobjekt och eventuella andra argument eller nyckelord som ytterligare argument. Om content_manager inte anges, används den content_manager som anges av den aktuella policy.

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

Anropa metoden set_content() för content_manager, med self som meddelandeobjekt och eventuella andra argument eller nyckelord som ytterligare argument. Om content_manager inte anges, används den content_manager som anges av den aktuella policy.

Konverterar ett icke-multipart -meddelande till ett multipart/related -meddelande, flyttar alla befintliga Content- -rubriker och payload till en (ny) första del av multipart. Om boundary anges, använd den som gränssträng i multipart, annars kan gränsen skapas automatiskt när den behövs (t.ex. när meddelandet serialiseras).

make_alternative(boundary=None)

Konverterar en icke-multipart eller en multipart/related till en multipart/alternative, flyttar alla befintliga Content- -rubriker och nyttolast till en (ny) första del av multipart. Om boundary anges, använd den som gränssträng i multipart, annars kan gränsen skapas automatiskt när den behövs (t.ex. när meddelandet serialiseras).

make_mixed(boundary=None)

Konverterar en icke-multipart, en multipart/related, eller en multipart-alternative till en multipart/mixed, flyttar alla befintliga Content- -rubriker och payload till en (ny) första del av multipart. Om boundary anges, används den som gränssträng i multipart, annars lämnas gränsen för att skapas automatiskt när den behövs (till exempel när meddelandet serialiseras).

Om meddelandet är ett multipart/related, skapa ett nytt meddelandeobjekt, skicka alla argument till dess set_content()-metod och attach() det till multipart. Om meddelandet är en icke-multipart, anropa make_related() och fortsätt sedan enligt ovan. Om meddelandet är någon annan typ av multipart, utlöses ett TypeError. Om content_manager inte anges, används den content_manager som anges av den aktuella policy. Om den tillagda delen inte har någon Content-Disposition header, lägg till en med värdet inline.

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

Om meddelandet är ett multipart/alternative, skapa ett nytt meddelandeobjekt, skicka alla argument till dess set_content()-metod och attach() det till multipart. Om meddelandet inte är en multipart eller multipart/related, anropa make_alternative() och fortsätt sedan enligt ovan. Om meddelandet är någon annan typ av multipart, utlöses ett TypeError. Om content_manager inte anges, används den content_manager som anges av den aktuella policy.

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

Om meddelandet är ett multipart/mixed, skapa ett nytt meddelandeobjekt, skicka alla argument till dess set_content()-metod och attach() det till multipart. Om meddelandet inte är en multipart, multipart/related, eller multipart/alternative, anropa make_mixed() och fortsätt sedan enligt ovan. Om content_manager inte anges, används den content_manager som anges av den aktuella policy. Om den tillagda delen inte har någon Content-Disposition header, lägg till en med värdet attachment. Denna metod kan användas både för explicita bilagor (Content-Disposition: attachment) och inline bilagor (Content-Disposition: inline), genom att passera lämpliga alternativ till content_manager.

clear()

Ta bort nyttolasten och alla rubriker.

clear_content()

Ta bort nyttolasten och alla !Content--rubriker, och lämna alla andra rubriker intakta och i sin ursprungliga ordning.

EmailMessage-objekt har följande instansattribut:

preamble

Formatet för ett MIME-dokument tillåter viss text mellan blankraden efter rubrikerna och den första multipart boundary-strängen. Normalt är denna text aldrig synlig i en MIME-medveten e-postläsare eftersom den faller utanför MIME-standarden. Men när man tittar på råtexten i meddelandet, eller när man tittar på meddelandet i en läsare som inte är MIME-medveten, kan denna text bli synlig.

Attributet preamble innehåller denna ledande extra pansartext för MIME-dokument. När Parser upptäcker text efter rubrikerna men före den första gränssträngen, tilldelar den denna text till meddelandets preamble-attribut. När Generator skriver ut klartextrepresentationen av ett MIME-meddelande och upptäcker att meddelandet har ett preamble-attribut, skriver den denna text i området mellan rubrikerna och den första gränssträngen. Se email.parser och email.generator för mer information.

Observera att om meddelandeobjektet inte har någon preamble, kommer attributet preamble att vara None.

epilogue

Attributet epilogue fungerar på samma sätt som attributet preamble, förutom att det innehåller text som visas mellan den sista avgränsningen och slutet av meddelandet. Precis som med preamble, om det inte finns någon epilogtext kommer detta attribut att vara None.

defects

Attributet defects innehåller en lista över alla problem som upptäcktes när meddelandet analyserades. Se email.errors för en detaljerad beskrivning av de möjliga defekterna vid tolkningen.

class email.message.MIMEPart(policy=default)

Denna klass representerar en underdel av ett MIME-meddelande. Den är identisk med EmailMessage, förutom att inga MIME-Version-rubriker läggs till när set_content() anropas, eftersom underdelar inte behöver sina egna MIME-Version-rubriker.

Fotnoter