email.message.Message
: Representerar ett e-postmeddelande med hjälp av compat32
API¶
Klassen Message
är mycket lik klassen EmailMessage
, utan de metoder som lagts till av den klassen, och med standardbeteendet för vissa andra metoder som är något annorlunda. Vi dokumenterar också här några metoder som, även om de stöds av klassen EmailMessage
, inte rekommenderas om du inte har att göra med äldre kod.
Filosofin och strukturen för de två klasserna är i övrigt densamma.
Detta dokument beskriver beteendet under standardpolicyn (för Message
) Compat32
. Om du tänker använda en annan policy bör du använda klassen EmailMessage
istället.
Ett e-postmeddelande består av headers och en payload. Headers måste vara namn och värden i stil med RFC 5322, 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 Message
-objekt är en ordnad ordbok med rubriker med ytterligare metoder för åtkomst till både specialiserad information från rubrikerna, för åtkomst till nyttolasten, för generering av en serialiserad version av meddelandet och för rekursiv vandring över objektträdet. Observera att duplicerade headers stöds men att särskilda metoder måste användas för att komma åt dem.
Pseudoordboken Message
indexeras av rubriknamnen, som måste vara ASCII-värden. Värdena i ordlistan är strängar som endast ska innehålla ASCII-tecken; det finns viss specialhantering för icke-ASCII-data, men den ger inte alltid rätt resultat. Rubrikerna lagras och returneras med bibehållen skiftlägespresentation, men fältnamnen matchas utan hänsyn till skiftlägespresentation. Det kan också finnas ett enda kuverthuvud, även känt som Unix-From-huvudet eller From_
-huvudet. payload är antingen en sträng eller bytes, när det gäller enkla meddelandeobjekt, eller en lista med Message
-objekt, för MIME-containerdokument (t.ex. multipart/* och message/rfc822).
Här är metoderna i klassen Message
:
- class email.message.Message(policy=compat32)¶
Om policy anges (den måste vara en instans av en
policy
-klass) används de regler som anges för att uppdatera och serialisera representationen av meddelandet. Om policy inte anges användscompat32
-policyn, som upprätthåller bakåtkompatibilitet med Python 3.2-versionen av e-postpaketet. För mer information sepolicy
-dokumentationen.Ändrad i version 3.3: Nyckelordsargumentet policy har lagts till.
- as_string(unixfrom=False, maxheaderlen=0, 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 har
False
som standard. Av bakåtkompatibilitetsskäl är maxheaderlen standardvärdet0
, så om du vill ha ett annat värde måste du uttryckligen åsidosätta det (det värde som anges för max_line_length i policyn ignoreras av den här metoden). 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 tillGenerator
.Att göra meddelandet plattare kan leda till ändringar i
Message
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 är en bekvämlighetsåtgärd och att den kanske inte alltid formaterar meddelandet på det sätt du vill. Som standard görs t.ex. inte den mangling av rader som börjar med
From
som krävs av Unix mbox-format. För mer flexibilitet kan du instansiera enGenerator
-instans och använda dessflatten()
-metod direkt. Till exempel:from io import StringIO from email.generator import Generator fp = StringIO() g = Generator(fp, mangle_from_=True, maxheaderlen=60) g.flatten(msg) text = fp.getvalue()
Om meddelandeobjektet innehåller binära data som inte är kodade enligt RFC-standarder, kommer de data som inte uppfyller kraven att ersättas av kodpunkter för ”okända tecken” i Unicode. (Se även
as_bytes()
ochBytesGenerator
.)Ändrad i version 3.4: nyckelordsargumentet policy har lagts till.
- __str__()¶
Motsvarar
as_string()
. Tillåterstr(msg)
att producera en sträng som innehåller det formaterade meddelandet.
- 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 styra 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
Message
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 är en bekvämlighetsåtgärd och att den kanske inte alltid formaterar meddelandet på det sätt du vill. Som standard görs t.ex. inte den mangling av rader som börjar med
From
som krävs av Unix mbox-format. För mer flexibilitet kan du instansiera enBytesGenerator
-instans och använda dessflatten()
-metod direkt. Till exempel:from io import BytesIO from email.generator import BytesGenerator fp = BytesIO() g = BytesGenerator(fp, mangle_from_=True, maxheaderlen=60) g.flatten(msg) text = fp.getvalue()
Tillagd i version 3.4.
- __bytes__()¶
Motsvarar
as_bytes()
. Tillåterbytes(msg)
att producera ett bytesobjekt som innehåller det formaterade meddelandet.Tillagd i version 3.4.
- is_multipart()¶
Returnerar
True
om meddelandets nyttolast är en lista med sub-objekt avMessage
, 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ärMessage
är av typenmessage/rfc822
)
- set_unixfrom(unixfrom)¶
Ställ in meddelandets kuverthuvud på unixfrom, som ska vara en sträng.
- get_unixfrom()¶
Returnerar meddelandets kuverthuvud. Standardvärdet är
None
om kuverthuvudet aldrig har angetts.
- attach(payload)¶
Lägger till den angivna payload till den aktuella payloaden, som måste vara
None
eller en lista medMessage
-objekt före anropet. Efter anropet kommer nyttolasten alltid att vara en lista medMessage
-objekt. Om du vill ställa in nyttolasten till ett skalärt objekt (t.ex. en sträng), användset_payload()
istället.Detta är en äldre metod. I klassen
EmailMessage
ersätts dess funktionalitet avset_content()
och de relaterade metodernamake
ochadd
.
- get_payload(i=None, decode=False)¶
Returnerar den aktuella nyttolasten, som kommer att vara en lista av
Message
-objekt näris_multipart()
ärTrue
, eller en sträng näris_multipart()
ärFalse
. Om nyttolasten är en lista och du muterar listobjektet, ändrar du meddelandets nyttolast på plats.Med det valfria argumentet i returnerar
get_payload()
det i-tredje elementet i payloaden, räknat från noll, omis_multipart()
ärTrue
. EttIndexError
kommer att uppstå om i är mindre än 0 eller större än eller lika med antalet element i payloaden. Om nyttolasten är en sträng (d.v.s.is_multipart()
ärFalse
) och i anges, kommer ettTypeError
att uppstå.Valfritt decode är en flagga som anger om nyttolasten skall avkodas eller inte, enligt Content-Transfer-Encoding-rubriken. När
True
och meddelandet inte är en multipart, kommer nyttolasten att avkodas om värdet på denna header ärquoted-printable
ellerbase64
. Om någon annan kodning används, eller om Content-Transfer-Encoding-headern saknas, returneras nyttolasten som den är (odekodad). I samtliga fall är det returnerade värdet binära data. Om meddelandet är ett multipart och flaggan decode ärTrue
, returnerasNone
. Om nyttolasten är base64 och den inte var perfekt formad (saknar utfyllnad, tecken utanför base64-alfabetet), kommer en lämplig defekt att läggas till meddelandets defektegenskap (InvalidBase64PaddingDefect
ellerInvalidBase64CharactersDefect
, respektive).När decode är
False
(standard) returneras meddelandet som en sträng utan avkodning av Content-Transfer-Encoding. För en Content-Transfer-Encoding på 8bit görs dock ett försök att avkoda de ursprungliga bytena med hjälp av detcharset
som anges i Content-Type-huvudet, med hjälp av felhanterarenreplace
. Om ingencharset
anges, eller om dencharset
som anges inte känns igen av e-postpaketet, avkodas texten med standard ASCII-charset.Detta är en äldre metod. I klassen
EmailMessage
ersätts dess funktionalitet avget_content()
ochiter_parts()
.
- set_payload(payload, charset=None)¶
Ställ in hela meddelandeobjektets payload till payload. Det är klientens ansvar att se till att nyttolasten är invariant. Valfri charset anger meddelandets standardteckensats; se
set_charset()
för detaljer.Detta är en äldre metod. I klassen
EmailMessage
ersätts dess funktionalitet avset_content()
.
- set_charset(charset)¶
Ställer in teckenuppsättningen för nyttolasten till charset, som antingen kan vara en
Charset
-instans (seemail.charset
), en sträng som namnger en teckenuppsättning ellerNone
. Om det är en sträng kommer den att konverteras till enCharset
-instans. Om charset ärNone
kommer parameterncharset
att tas bort från Content-Type-rubriken (meddelandet kommer inte att ändras på något annat sätt). Allt annat kommer att generera ettTypeError
.Om det inte finns någon befintlig MIME-Version header kommer en sådan att läggas till. Om det inte finns någon befintlig Content-Type header, kommer en sådan att läggas till med värdet text/plain. Oavsett om rubriken Content-Type redan finns eller inte, kommer dess parameter
charset
att sättas till charset.output_charset. Om charset.input_charset och charset.output_charset skiljer sig åt kommer nyttolasten att kodas om till output_charset. Om det inte finns något befintligt Content-Transfer-Encoding-huvud, kommer nyttolasten att överföringskodas, om det behövs, med hjälp av den angivnaCharset
, och ett huvud med lämpligt värde kommer att läggas till. Om en Content-Transfer-Encoding header redan finns, antas nyttolasten redan vara korrekt kodad med hjälp av den Content-Transfer-Encoding och ändras inte.Detta är en äldre metod. I klassen
EmailMessage
ersätts dess funktionalitet av parametern charset i metodenemail.message.EmailMessage.set_content()
.
- get_charset()¶
Returnerar
Charset
-instansen som är associerad med meddelandets nyttolast.Detta är en äldre metod. I klassen
EmailMessage
returnerar den alltidNone
.
Följande metoder implementerar ett mappningsliknande gränssnitt för åtkomst till meddelandets RFC 2822-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 ettMessage
-objekt returneras alltid rubrikerna i den ordning de förekom i det ursprungliga meddelandet eller lades till i meddelandet senare. Eventuella rubriker som raderats och sedan lagts till igen läggs alltid till i slutet av rubriklistan.Dessa semantiska skillnader är avsiktliga och syftar till maximal bekvämlighet.
Observera att i samtliga fall ingår inte eventuella kuvertrubriker som finns i meddelandet i mappningsgränssnittet.
I en modell som genereras från byte kommer alla rubrikvärden som (i strid med RFC) innehåller icke-ASCII-byte, när de hämtas via detta gränssnitt, att representeras som
Header
-objekt med en teckenuppsättning påunknown-8bit
.- __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 bör inte innehålla kolon. Används för operatornin
, t.ex.:if 'message-id' in myMessage: print('Message-ID:', myMessage['message-id'])
- __getitem__(name)¶
Returnerar värdet för det namngivna rubrikfältet. name bör inte innehålla fältavgränsaren kolon. Om rubriken saknas returneras
None
; ettKeyError
uppstår 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 få värdena för alla befintliga namngivna rubriker.
- __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 fält.
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!'
- __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 angivna sidhuvudet saknas (standard ärNone
).
Här är några ytterligare användbara metoder:
- 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 det specificeras som en tupel med tre tecken i formatet(CHARSET, LANGUAGE, VALUE)
, därCHARSET
är en sträng som namnger det teckenuppsättning som skall användas för att koda värdet,LANGUAGE
kan vanligtvis sättas tillNone
eller tomsträ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 med icke-ASCII-tecken:
msg.add_header('Content-Disposition', 'attachment', filename=('iso-8859-1', '', 'Fußballer.ppt'))
Som producerar
Content-Disposition: attachment; filename*="iso-8859-1''Fu%DFballer.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 skiftlägesordning för fältnamn. Om inget matchande huvud hittades, uppstår ett
KeyError
.
- get_content_type()¶
Returnerar meddelandets innehållstyp. Den returnerade strängen är tvingad till gemener av formen maintype/subtype. Om det inte fanns någon Content-Type header i meddelandet returneras standardtypen som anges av
get_default_type()
. Eftersom meddelanden enligt RFC 2045 alltid har en standardtyp, kommerget_content_type()
alltid att returnera ett värde.Enligt RFC 2045 är standardtypen för ett meddelande text/plain, såvida det inte finns i en multipart/digest-behållare, 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 rubriken Content-Type.
- get_params(failobj=None, header='content-type', unquote=True)¶
Returnera meddelandets Content-Type-parametrar som en lista. Elementen i den returnerade listan är 2-tupler av nyckel/värde-par, uppdelade med tecknet
'='
. Vänster sida av'='
är nyckeln, medan höger sida är värdet. Om det inte finns något'='
-tecken i parametern är värdet den tomma strängen, annars är värdet som beskrivs iget_param()
och är utan citattecken om det valfria unquote ärTrue
(standard).Valfritt failobj är det objekt som skall returneras om det inte finns något Content-Type-huvud. Valfritt header är rubriken som ska sökas i stället för Content-Type.
Detta är en äldre metod. I klassen
EmailMessage
ersätts dess funktionalitet av egenskapen params i de enskilda rubrikobjekt som returneras av metoderna för rubrikåtkomst.
- get_param(param, failobj=None, header='content-type', unquote=True)¶
Returnerar värdet av Content-Type-headerns parameter param som en sträng. Om meddelandet inte har någon Content-Type-rubrik eller om det inte finns någon sådan parameter returneras failobj (standardvärde är
None
).Valfritt header om det anges, anger meddelandehuvudet som ska användas i stället för Content-Type.
Parameternycklar jämförs alltid utan hänsyn till skift. Returvärdet kan antingen vara en sträng eller en 3-tupel om parametern var RFC 2231-kodad. När det är en 3-tupel är elementen i värdet av formen
(CHARSET, LANGUAGE, VALUE)
. Observera att bådeCHARSET
ochLANGUAGE
kan varaNone
, i vilket fall du bör betraktaVALUE
som kodat ius-ascii
charset. Du kan vanligtvis ignoreraLANGUAGE
.Om din applikation inte bryr sig om huruvida parametern kodades enligt RFC 2231, kan du kollapsa parametervärdet genom att anropa
email.utils.collapse_rfc2231_value()
och skicka in returvärdet frånget_param()
. Detta kommer att returnera en lämpligt avkodad Unicode-sträng när värdet är en tupel, eller originalsträngen utan citat om den inte är det. Till exempel:rawparam = msg.get_param('foo') param = email.utils.collapse_rfc2231_value(rawparam)
I vilket fall som helst är parametervärdet (antingen den returnerade strängen eller
VALUE
-objektet i 3-tupeln) alltid ociterat, såvida inte unquote är satt tillFalse
.Detta är en äldre metod. I klassen
EmailMessage
ersätts dess funktionalitet av egenskapen params i de enskilda rubrikobjekt som returneras av metoderna för rubrikåtkomst.
- set_param(param, value, header='Content-Type', requote=True, charset=None, language='', replace=False)¶
Ange en parameter i Content-Type -rubriken. Om parametern redan finns i rubriken kommer dess värde att ersättas med värde. Om rubriken Content-Type ännu inte har definierats för detta meddelande, kommer den att sättas till text/plain och det nya parametervärdet kommer att läggas till enligt RFC 2045.
Det valfria header anger ett alternativt huvud till Content-Type, och alla parametrar kommer att citeras vid behov om inte det valfria requote är
False
(standard ärTrue
).Om charset anges som tillval kommer parametern att kodas enligt RFC 2231. Det valfria language anger RFC 2231-språket, med den tomma strängen som standard. Både charset och language bör vara strängar.
Om replace är
False
(standard) flyttas rubriken till slutet av listan med rubriker. Om replace ärTrue
kommer rubriken att uppdateras på plats.Ä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. Alla värden kommer att citeras vid behov om inte requote är
False
(standard ärTrue
). Valfria header anger ett alternativ till Content-Type.
- set_type(type, header='Content-Type', requote=True)¶
Anger huvudtyp och undertyp för rubriken Content-Type. type måste vara en sträng i formen maintype/subtype, annars uppstår ett
ValueError
.Denna metod ersätter Content-Type-headern och behåller alla parametrar på plats. Om requote är
False
, lämnas den befintliga headerns citering som den är, annars kommer parametrarna att citeras (standard).Ett alternativt huvud kan anges i argumentet header. När rubriken Content-Type anges läggs även rubriken MIME-Version till.
Detta är en äldre metod. I klassen
EmailMessage
ersätts dess funktionalitet av metodernamake_
ochadd_
.
- 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 den här metoden är något annorlunda ä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. Den bevarar dock inte några fortsättningsrader som kan ha funnits i den ursprungliga Content-Type-rubriken.
- 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.Observera att den här metoden skiljer sig från
get_charset()
som returnerarCharset
-instansen för standardkodningen av meddelandetexten.
- 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 Content-Type-huvudet för den representerade underdelen. Men 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.
- 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.
- 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:>>> 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.
Message
-objekt kan också innehålla två instansattribut, som kan användas när man genererar klartexten i ett MIME-meddelande.- 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 boundary och slutet av meddelandet.
Du behöver inte sätta epilogen till den tomma strängen för att
Generator
ska skriva ut en ny rad i slutet av filen.
- 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.