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 sepolicy
-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 basklassenMessage
accepteras maxheaderlen, men standardvärdet ärNone
, vilket innebär att radlängden som standard styrs av policynsmax_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 tillGenerator
.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ärutf8
ärFalse
, 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återstr(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öras_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 tillBytesGenerator
.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återbytes(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 avEmailMessage
, annars returnerasFalse
. Näris_multipart()
returnerarFalse
, bör nyttolasten vara ett strängobjekt (som kan vara en CTE-kodad binär nyttolast). Observera att omis_multipart()
returnerarTrue
betyder det inte nödvändigtvis att ”msg.get_content_maintype() == ’multipart’” kommer att returneraTrue
. Till exempel kommeris_multipart
att returneraTrue
närEmailMessage
är av typenmessage/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 ettEmailMessage
-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 operatornin
. 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
; ettKeyError
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 tillemail.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 ettValueError
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 standardNone
).
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 ärNone
, 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ärCHARSET
är en sträng som namnger den teckenuppsättning som ska användas för att koda värdet,LANGUAGE
kan vanligtvis sättas tillNone
eller den tomma strängen (se RFC 2231 för andra möjligheter), ochVALUE
ä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 medCHARSET
utf-8
ochLANGUAGE
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, returnerastext/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 ochNone
för language.Om replace är
False
(standard) flyttas rubriken till slutet av listan med rubriker. Om replace ärTrue
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örfilename
, går denna metod tillbaka till att leta efter parameternname
i rubriken Content-Type. Om ingen av dessa hittas, eller om rubriken saknas, returneras failobj. Den returnerade strängen kommer alltid att vara ociterad enligtemail.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örboundary
. Den returnerade strängen kommer alltid att vara ociterad enligtemail.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. EttHeaderParseError
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()
, eftersomset_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ågoncharset
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, ingencharset
-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 ärattachment
, annarsFalse
.Ä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 ellerNone
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ändawalk()
som iterator i enfor
-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äris_multipart`()
returnerarTrue
, även ommsg.get_content_maintype() == 'multipart'
kan returneraFalse
. 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 intemultiparts
, men de innehåller subparts.is_multipart()
returnerarTrue
ochwalk
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
ochplain
, 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
, kontrollerastart
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 avmultipart/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 somget_body
anropas på, kommer anrop avget_body
på enmultipart/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 typentext/plain
, vilket ibland kan leda till attget_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
, ellermultipart/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å enmultipart/related
, returneras en iterator över alla relaterade delar utom rotdelen (dvs. den del som pekas ut av parameternstart
, eller den första delen om det inte finns någon parameterstart
eller om parameternstart
inte matchar Content-ID för någon av delarna). När den tillämpas direkt på enmultipart/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 ävenwalk()
.)
- 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 dencontent_manager
som anges av den aktuellapolicy
.
- 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 dencontent_manager
som anges av den aktuellapolicy
.
Konverterar ett icke-
multipart
-meddelande till ettmultipart/related
-meddelande, flyttar alla befintliga Content- -rubriker och payload till en (ny) första del avmultipart
. 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 enmultipart/related
till enmultipart/alternative
, flyttar alla befintliga Content- -rubriker och nyttolast till en (ny) första del avmultipart
. 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
, enmultipart/related
, eller enmultipart-alternative
till enmultipart/mixed
, flyttar alla befintliga Content- -rubriker och payload till en (ny) första del avmultipart
. 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 dessset_content()
-metod ochattach()
det tillmultipart
. Om meddelandet är en icke-multipart
, anropamake_related()
och fortsätt sedan enligt ovan. Om meddelandet är någon annan typ avmultipart
, utlöses ettTypeError
. Om content_manager inte anges, används dencontent_manager
som anges av den aktuellapolicy
. Om den tillagda delen inte har någon Content-Disposition header, lägg till en med värdetinline
.
- add_alternative(*args, content_manager=None, **kw)¶
Om meddelandet är ett
multipart/alternative
, skapa ett nytt meddelandeobjekt, skicka alla argument till dessset_content()
-metod ochattach()
det tillmultipart
. Om meddelandet inte är enmultipart
ellermultipart/related
, anropamake_alternative()
och fortsätt sedan enligt ovan. Om meddelandet är någon annan typ avmultipart
, utlöses ettTypeError
. Om content_manager inte anges, används dencontent_manager
som anges av den aktuellapolicy
.
- add_attachment(*args, content_manager=None, **kw)¶
Om meddelandet är ett
multipart/mixed
, skapa ett nytt meddelandeobjekt, skicka alla argument till dessset_content()
-metod ochattach()
det tillmultipart
. Om meddelandet inte är enmultipart
,multipart/related
, ellermultipart/alternative
, anropamake_mixed()
och fortsätt sedan enligt ovan. Om content_manager inte anges, används dencontent_manager
som anges av den aktuellapolicy
. Om den tillagda delen inte har någon Content-Disposition header, lägg till en med värdetattachment
. Denna metod kan användas både för explicita bilagor (Content-Disposition: attachment) ochinline
bilagor (Content-Disposition: inline), genom att passera lämpliga alternativ tillcontent_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ärGenerator
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. Seemail.parser
ochemail.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 varaNone
.
- 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ärset_content()
anropas, eftersom underdelar inte behöver sina egna MIME-Version-rubriker.
Fotnoter