o 0i@s ddgZddlZddlZddlZddlmZmZddlmZddlm Z ddl m Z m Z ddlm Zdd lmZejZd Zed Zd d ZdddZddZddZGdddZGdddeZGdddeZdS)Message EmailMessageN)BytesIOStringIO)utils)errors)Policycompat32charset)decode_bz; z[ \(\)<>@,;:\\"/\[\]\?=]cCs4t|d\}}}|s|dfS||fS)N;)str partitionstrip)paramasepbr4/opt/alt/python310/lib64/python3.10/email/message.py _splitparams rTcCs |dur_t|dkr_t|tr'|d7}t|d|d|d}d||fSz|dWntyH|d7}t|dd}d||fYSw|sPt|rYd |t |fSd||fS|S) Nr*%s=%sasciizutf-8z%s="%s") len isinstancetuplerZencode_rfc2231encodeUnicodeEncodeError tspecialssearchquote)rvaluer%rrr _formatparam's"    r'cCsdt|}g}d}|d||kr|d7}|d|}|d}}|dkrK||d|||d||7}|ddkrd?Z!d@dAZ"dBdCZ#dDdEZ$dFdGZ%dgdJdKZ& H IdgdLdMZ' I dhdPdQZ(didRdSZ)djdTdUZ*dfdVdWZ+dfdXdYZ,dZd[Z-dfd\d]Z.dfd^d_Z/d`daZ0ddbl1m2Z2dS)krcCs:||_g|_d|_d|_d|_d|_|_g|_d|_dS)N text/plain) policy_headers _unixfrom_payload_charsetZpreambleZepiloguedefects _default_type)selfr:rrr__init__~s  zMessage.__init__cC |SN) as_stringrArrr__str__zMessage.__str__FrNcCsL ddlm}|dur|jn|}t}||d||d}|j||d|S)Nr) GeneratorF) mangle_from_ maxheaderlenr:unixfrom)email.generatorrIr:rflattengetvalue)rArMrKr:rIfpgrrrrEs zMessage.as_stringcCrCrD)as_bytesrFrrr __bytes__rHzMessage.__bytes__cCsJ ddlm}|dur|jn|}t}||d|d}|j||d|S)Nr)BytesGeneratorF)rJr:rL)rNrUr:rrOrP)rArMr:rUrQrRrrrrSs zMessage.as_bytescCs t|jtSrD)rr=listrFrrr is_multiparts zMessage.is_multipartcCs ||_dSrDr<)rArMrrr set_unixfroms zMessage.set_unixfromcCs|jSrDrXrFrrr get_unixfromszMessage.get_unixfromcCsB |jdur |g|_dSz |j|WdSty tdw)Nz=Attach is not valid on a message with a non-multipart payload)r=r0AttributeError TypeError)rApayloadrrrattachs   zMessage.attachc Cs |r|r dS|dur|jS|j|S|dur(t|jts(tdt|j|j}t|dd}t|tr|t |rd| dd}|scz | | ddd}Wn(tyb| dd}Ynwn|r|z| d}Wnty{| d}Ynw|s|S|d krt|S|d krtd |\}}|D] }|j||q|S|d vrt|} t} z tj | | d d| WStjy|YSwt|tr|S|S)NzExpected list, got %szcontent-transfer-encodingrrsurrogateescaper replaceraw-unicode-escapezquoted-printablebase64)z x-uuencodeZuuencodeZuuezx-uueT)quiet)rWr=rrVr\typergetr.rZ_has_surrogatesr!decode get_param LookupError UnicodeErrorquopriZ decodestringr join splitlinesr:Z handle_defectruurPError) rAr4rgr]cteZbpayloadr&r?ZdefectZin_fileZout_filerrr get_payloads`!         zMessage.get_payloadcCsv t|dr|dur||_dSt|tst|}||j}t|dr+|dd|_n||_|dur9||dSdS)Nr!rgrr_)hasattrr=rCharsetr!output_charsetrg set_charset)rAr]r rrr set_payload5s    zMessage.set_payloadc Cs |dur|dd|_dSt|tst|}||_d|vr%|ddd|vr4|jdd|dn|d|||krI||j|_d|vr| }z||WdSt y|j}|r|z| dd }Wnt y{| |j }Ynw|||_|d|YdSwdS) Nr MIME-Version1.0 Content-Typer9r zContent-Transfer-Encodingrr_) del_paramr>rrs add_headerZget_output_charset set_paramZ body_encoder=Zget_body_encodingr\r!rjrt)rAr rpr]rrrruIsB       zMessage.set_charsetcC |jSrD)r>rFrrr get_charsetxszMessage.get_charsetcCs t|jSrD)rr;rFrrr__len__s zMessage.__len__cCs ||SrD)rfrAnamerrr __getitem__s zMessage.__getitem__cCst |j|}|r-|}d}|jD]\}}||kr,|d7}||kr,td||q|j|j||dS)Nrrz/There may be at most {} {} headers in a message)r:Zheader_max_countr.r; ValueErrorformatr0header_store_parse)rArvalZ max_countZlnamefoundkvrrr __setitem__s  zMessage.__setitem__cCsB |}g}|jD]\}}||kr|||fq ||_dSrD)r.r;r0)rAr newheadersrrrrr __delitem__s  zMessage.__delitem__cCs|dd|jDvS)NcSsg|]\}}|qSr)r..0rrrrr sz(Message.__contains__..)r.r;rrrr __contains__szMessage.__contains__ccs|jD]\}}|VqdSrDr;)rAZfieldr&rrr__iter__szMessage.__iter__cCs dd|jDS)NcSsg|]\}}|qSrrrrrrrsz Message.keys..rrFrrrkeyssz Message.keysc fddjDS)Ncsg|] \}}j||qSrr:header_fetch_parserrFrrrsz"Message.values..rrFrrFrvalues zMessage.valuescr)Ncs"g|] \}}|j||fqSrrrrFrrrsz!Message.items..rrFrrFritemsrz Message.itemscCs< |}|jD]\}}||kr|j||Sq|SrD)r.r;r:r)rArfailobjrrrrrrfs z Message.getcCs |j||fdSrD)r;r0)rArr&rrrset_rawszMessage.set_rawcCs t|jSrD)iterr;copyrFrrr raw_itemsszMessage.raw_itemscCsJ g}|}|jD]\}}||kr||j||q |s#|S|SrD)r.r;r0r:r)rArrrrrrrrget_alls zMessage.get_allcKsr g}|D]\}}|dur||ddq|t|dd|q|dur0|d|t|||<dS)N_-r)rr0r`r'insert SEMISPACErl)rA_name_valueZ_paramspartsrrrrrr{ s zMessage.add_headercCs\ |}ttt|j|jD]\}\}}||kr)|j|||j|<dSqt|rD)r.ziprangerr;r:rKeyError)rArrr4rrrrrreplace_header's" zMessage.replace_headercCsJ t}|d|}||ur|St|d}|ddkr#dS|S)N content-typer/rr9)objectrfget_default_typerr.r,)rAmissingr&ctyperrrget_content_type:s zMessage.get_content_typecC |}|ddS)NrrrsplitrArrrrget_content_maintypeRzMessage.get_content_maintypecCr)Nrrrrrrrget_content_subtype[rzMessage.get_content_subtypecCr}rDr@rFrrrrdszMessage.get_default_typecCs ||_dSrDrrrrrset_default_typems zMessage.set_default_typec Cst}|||}||ur|Sg}t|D]+}z|dd\}}|}|}Wnty8|}d}Ynw|||fqt|}|S)Nr)rr) rrfr6rrrr0rZ decode_params) rArheaderrr&paramsprrrrr_get_params_preservevs"     zMessage._get_params_preserverTcCs6 t}|||}||ur|S|rdd|DS|S)NcSsg|] \}}|t|fqSr)r8rrrrrsz&Message.get_params..)rr)rArrr7rrrrr get_paramss zMessage.get_paramscCsP ||vr|S|||D]\}}||kr%|r!t|S|Sq |SrD)rr.r8)rArrrr7rrrrrrhs zMessage.get_paramryrc Cs t|ts |r |||f}||vr|dkrd}n||}|j||ds;|s/t|||}n=t|t|||g}n1d}|j||dD]'\} } d} | |krYt|||} nt| | |} |sd| }qDt|| g}qD|||kr|r}| ||dS||=|||<dSdS)Nrr9)rrrr7) rr r.rfrhr'rrlrr) rArr&rrequoter Zlanguager`rZ old_param old_valueZ append_paramrrrr|s:    zMessage.set_paramcCs ||vrdSd}|j||dD] \}}||kr0|s%t|||}qt|t|||g}q|||krA||=|||<dSdS)Nrr)rr.r'rrlrf)rArrrZ new_ctyperrrrrrzs   zMessage.del_paramcCs |ddks t|dkr|d=d|d<||vr!|||<dS|j||d}||=|||<|ddD] \}}|||||q5dS)Nrrrz mime-versionrxrwr)r,rr.rr|)rArerrrrrrrrset_type s zMessage.set_typecCsF t}|d|d}||ur|d|d}||ur|St|S)Nfilenamecontent-dispositionrr)rrhrcollapse_rfc2231_valuer)rArrrrrr get_filename,szMessage.get_filenamecCs. t}|d|}||ur|St|S)Nboundary)rrhrrr-)rArrrrrr get_boundary<s  zMessage.get_boundarycCs t}||d}||urtdg}d}|D]\}}|dkr/|dd|fd}q|||fq|sB|dd|fg}|jD]=\} } | dkr}g} |D]\} } | dkrc| | qU| d| | fqUt| } ||j | | qG|| | fqG||_dS) NrzNo Content-Type header foundFrz"%s"Trr) rrrZHeaderParseErrorr.r0r;rrlr:r)rArrrZ newparamsZfoundpZpkZpvrhrrrrrrr set_boundaryIs4         zMessage.set_boundaryc Cs t}|d|}||ur|St|tr9|dpd}z|dd}t||}Wnttfy8|d}Ynwz |dW|StyN|YSw)Nr rzus-asciirra) rrhrr r!rrirjr.)rArrr ZpcharsetrSrrrget_content_charsetws&      zMessage.get_content_charsetcs fdd|DS)Ncsg|]}|qSr)r)rpartrrrrsz(Message.get_charsets..walk)rArrrr get_charsetsszMessage.get_charsetscCs, |d}|dur dSt|d}|S)Nrr)rfrr.)rAr&c_drrrget_content_dispositions  zMessage.get_content_dispositionr)FrN)FN)NFrD)NrT)ryTNrF)rT)ryT)3__name__ __module__ __qualname__r rBrGrErTrSrWrYrZr^rqrvrur~rrrrrrrrrrfrrrr{rrrrrrrrrhr|rzrrrrrrrZemail.iteratorsrrrrrrosh     Z/          " 3   .  cseZdZd/fdd Zd0fdd ZddZd d Zd d Zd1ddZhdZ ddZ ddZ ddddZ ddddZ ddZd/ddZd/ddZd/d d!Zdd"d#d$Zd%d&Zd'd(Zd)d*Zd+d,Zd-d.ZZS)2MIMEPartNcs(|dur ddlm}|}t|dS)Nr)default)Z email.policyrsuperrB)rAr:r __class__rrrBs zMIMEPart.__init__Fcs2 |dur|jn|}|dur|j}t|||SrD)r:Zmax_line_lengthrrE)rArMrKr:rrrrEs  zMIMEPart.as_stringcCs|j|jjdddS)NT)utf8r:)rEr:ZclonerFrrrrGszMIMEPart.__str__cCs |d}|dur dS|jdkS)NrF attachment)rfZcontent_disposition)rArrrr is_attachments zMIMEPart.is_attachmentc cs|rdS|d\}}|dkr"||vr |||fVdS|dks*|s,dS|dkrB|D] }|||EdHq4dSd|vrN|d|fVd}|d}|rh|D] }|d|krg|}nq[|durx|}|rv|dnd}|dur|||EdHdSdS)Nrtext multipartrelatedr2 content-idr) rrrindexrW iter_parts _find_bodyrhrq) rArpreferencelistmaintypesubtypeZsubpart candidater2Zsubpartsrrrrs<    zMIMEPart._find_bodyrhtmlplaincCsF t|}d}|||D]\}}||kr |}|}|dkr |Sq |S)Nr)rr)rArZ best_priobodyZpriorrrrget_bodys zMIMEPart.get_body>)rr)rr)rr)r alternativec cs  |d\}}|dks|dkrdS|}z|}Wn ty)YdSw|dkrf|dkrf|d}|rZd}g}|D]}|d|krKd}q?||q?|rZ|EdHdS|d |EdHdSg} |D]#}|d\}}||f|j vr| s|| vr| |qj|VqjdS) Nrrrrr2FrTr) rrrqrr[rhrfr0pop _body_typesr) rArrr]rr2rZ attachmentsrseenrrriter_attachments sJ         zMIMEPart.iter_attachmentsccs" |r|EdHdSdSrD)rWrqrFrrrrCs zMIMEPart.iter_parts)content_managercOs(|dur|jj}|j|g|Ri|SrD)r:r get_contentrArargskwrrrrKszMIMEPart.get_contentcOs,|dur|jj}|j|g|Ri|dSrD)r:r set_contentrrrrrPszMIMEPart.set_contentc Cs|dkr|}||f}||vrtd||g}g}|jD]\}}|dr5|||fq"|||fq"|rSt||j d} || _|j | _ | g|_ ng|_ ||_d||d<|durk| d|dSdS)NrzCannot convert {} to {}content-rz multipart/ryr) rrrrr;r. startswithr0rer:r=r|) rArZdisallowed_subtypesrZexisting_subtypeZ keep_headersZ part_headersrr&rrrr_make_multipartUs0    zMIMEPart._make_multipartcC|dd|dS)Nr)rmixedrrArrrr make_relatedpzMIMEPart.make_relatedcCr)Nr)rrrrrrmake_alternativesrzMIMEPart.make_alternativecCr)Nrrrrrrr make_mixedvrzMIMEPart.make_mixed)_dispcOsj|dks ||krt|d|t||jd}|j|i||r.d|vr.||d<||dS)NrZmake_rrzContent-Disposition)rrgetattrrer:rr^)rAZ_subtyperrrrrrr_add_multipartys   zMIMEPart._add_multipartcO |jdg|Rddi|dS)NrrZinlinerrArrrrr add_related zMIMEPart.add_relatedcOs|jdg|Ri|dS)Nrr r rrradd_alternativeszMIMEPart.add_alternativecOr )Nrrrr r rrradd_attachmentr zMIMEPart.add_attachmentcCsg|_d|_dSrDr;r=rFrrrclears zMIMEPart.clearcCsdd|jD|_d|_dS)NcSs&g|]\}}|ds||fqS)r)r.r)rnrrrrrs z*MIMEPart.clear_content..rrFrrr clear_contents zMIMEPart.clear_contentrD)FNN)r)rrrrBrErGrrrrrrrrrrrrrr rrrr __classcell__rrrrrs, 7    rcseZdZfddZZS)rcs*tj|i|d|vrd|d<dSdS)Nrwrx)rrr rrrrs zEmailMessage.set_content)rrrrrrrrrrs)NT)__all__rernrkiorrZemailrrZemail._policybaserr r r>Zemail._encoded_wordsr rsrcompiler#rr'r6r8rrrrrrrs8      " N`