a i@sddgZddlZddlZddlZddlmZmZddlmZddlm 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)paramasepbr%/usr/lib64/python3.9/email/message.py _splitparams rTcCs|durt|dkrt|trL|d7}t|d|d|d}d||fSz|dWn4ty|d7}t|dd}d||fYS0|st|rd |t |fSd||fSn|SdS) Nr*%s=%sasciizutf-8z%s="%s") len isinstancetuplerZencode_rfc2231encodeUnicodeEncodeError tspecialssearchquote)rvaluer%rrr _formatparam's    r'cCs dt|}g}d}|d||kr|d7}|d|}|d}}|dkr||d|||d||7}|ddkrzq||d|d}}qD|dkrt|}|d||}|dkr|||}n,|||d||d|}|||}q|S) Nr rr"z\"r=) rfindcountrrstriplowerlstripappendr)sZpliststartendZinddiffifrrr _parseparamIs*     ,r7cCs4t|tr&|d|dt|dfSt|SdS)Nrrr)rr runquote)r&rrr _unquotevaluecs r9c@seZdZefddZddZdcdd Zd d Zddd d ZddZ ddZ ddZ ddZ deddZ dfddZddZddZddZd d!Zd"d#Zd$d%Zd&d'Zd(d)Zd*d+Zd,d-Zd.d/Zdgd0d1Zd2d3Zd4d5Zdhd6d7Zd8d9Zd:d;Zdd?Z!d@dAZ"dBdCZ#dDdEZ$dFdGZ%didJdKZ&djdLdMZ'dkdPdQZ(dldRdSZ)dmdTdUZ*dndVdWZ+dodXdYZ,dZd[Z-dpd\d]Z.dqd^d_Z/d`daZ0ddbl1m2Z2dS)rrcCs:||_g|_d|_d|_d|_d|_|_g|_d|_dS)N text/plain) policy_headers _unixfrom_payload_charsetZpreambleZepiloguedefects _default_type)selfr;rrr__init__~s zMessage.__init__cCs|SN) as_stringrBrrr__str__szMessage.__str__FrNcCsJddlm}|dur|jn|}t}||d||d}|j||d|S)Nr) GeneratorF) mangle_from_ maxheaderlenr;unixfrom)email.generatorrHr;rflattengetvalue)rBrLrJr;rHfpgrrrrEs zMessage.as_stringcCs|SrD)as_bytesrFrrr __bytes__szMessage.__bytes__cCsHddlm}|dur|jn|}t}||d|d}|j||d|S)Nr)BytesGeneratorF)rIr;rK)rMrTr;rrNrO)rBrLr;rTrPrQrrrrRs  zMessage.as_bytescCs t|jtSrD)rr>listrFrrr is_multipartszMessage.is_multipartcCs ||_dSrDr=)rBrLrrr set_unixfromszMessage.set_unixfromcCs|jSrDrWrFrrr get_unixfromszMessage.get_unixfromcCsD|jdur|g|_n,z|j|Wnty>tdYn0dS)Nz=Attach is not valid on a message with a non-multipart payload)r>r0AttributeError TypeError)rBpayloadrrrattachs    zMessage.attachc Cs|r(|rdS|dur|jS|j|S|durNt|jtsNtdt|j|j}t|dd}t|trt |r| dd}|sz| | ddd}Wqty| dd}Yq0n0|rz| d}Wnty| d}Yn0|s|S|d krt|S|d krRtd |\}}|D]}|j||q8|S|d vrt|} t} ztj | | d d| WStjy|YS0t|tr|S|S)NzExpected list, got %szcontent-transfer-encodingrrsurrogateescaper replaceraw-unicode-escapezquoted-printablebase64)z x-uuencodeZuuencodeZuuezx-uueT)quiet)rVr>rrUr[typergetr.rZ_has_surrogatesr!decode get_param LookupError UnicodeErrorquopriZ decodestringr join splitlinesr;Z handle_defectruurOError) rBr5rfr\cteZbpayloadr&r@ZdefectZin_fileZout_filerrr get_payloadsV"             zMessage.get_payloadcCspt|dr:|dur||_dSt|ts.t|}||j}t|drT|dd|_n||_|durl||dS)Nr!rfrr^)hasattrr>rCharsetr!output_charsetrf set_charset)rBr\r rrr set_payload5s    zMessage.set_payloadc Cs|dur|dd|_dSt|ts.t|}||_d|vrH|ddd|vrf|jdd|dn|d|||kr||j|_d|vr| }z ||Wnft y|j}|rz| dd }Wnt y| |j }Yn0|||_|d|Yn0dS) Nr MIME-Version1.0 Content-Typer:r zContent-Transfer-Encodingrr^) del_paramr?rrr add_headerZget_output_charset set_paramZ body_encoder>Zget_body_encodingr[r!rirs)rBr ror\rrrrtIs:        zMessage.set_charsetcCs|jSrD)r?rFrrr get_charsetxszMessage.get_charsetcCs t|jSrD)rr<rFrrr__len__szMessage.__len__cCs ||SrD)rerBnamerrr __getitem__s zMessage.__getitem__cCsr|j|}|rX|}d}|jD]4\}}||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)rBrvalZ max_countZlnamefoundkvrrr __setitem__s  zMessage.__setitem__cCs@|}g}|jD]"\}}||kr|||fq||_dSrD)r.r<r0)rBr newheadersrrrrr __delitem__s  zMessage.__delitem__cCs|dd|jDvS)NcSsg|]\}}|qSr)r..0rrrrr rbz(Message.__contains__..)r.r<r~rrr __contains__szMessage.__contains__ccs|jD]\}}|VqdSrDr<)rBZfieldr&rrr__iter__szMessage.__iter__cCsdd|jDS)NcSsg|] \}}|qSrrrrrrrrbz Message.keys..rrFrrrkeyssz Message.keyscsfddjDS)Ncsg|]\}}j||qSrr;header_fetch_parserrFrrrsz"Message.values..rrFrrFrvaluess zMessage.valuescsfddjDS)Ncs"g|]\}}|j||fqSrrrrFrrrsz!Message.items..rrFrrFritemss z Message.itemscCs:|}|jD]&\}}||kr|j||Sq|SrD)r.r<r;r)rBrfailobjrrrrrres  z Message.getcCs|j||fdSrD)r<r0)rBrr&rrrset_rawszMessage.set_rawcCst|jSrD)iterr<copyrFrrr raw_itemsszMessage.raw_itemscCsHg}|}|jD](\}}||kr||j||q|sD|S|SrD)r.r<r0r;r)rBrrrrrrrrget_alls  zMessage.get_allcKspg}|D]<\}}|dur0||ddq |t|dd|q |dur^|d|t|||<dS)N_-r)rr0r_r'insert SEMISPACErk)rB_name_valueZ_paramspartsrrrrrrz s zMessage.add_headercCs\|}ttt|j|jD]0\}\}}||kr|j|||j|<qXqt|dSrD)r.ziprangerr<r;rKeyError)rBrrr5rrrrrreplace_header's " zMessage.replace_headercCsHt}|d|}||ur"|St|d}|ddkrDdS|S)N content-typer/rr:)objectreget_default_typerr.r,)rBmissingr&ctyperrrget_content_type:s  zMessage.get_content_typecCs|}|ddS)NrrrsplitrBrrrrget_content_maintypeRszMessage.get_content_maintypecCs|}|ddS)Nrrrrrrrget_content_subtype[szMessage.get_content_subtypecCs|jSrDrArFrrrrdszMessage.get_default_typecCs ||_dSrDrrrrrset_default_typemszMessage.set_default_typec Cst}|||}||ur|Sg}t|D]V}z$|dd\}}|}|}Wntyp|}d}Yn0|||fq*t|}|S)Nr)rr) rrer7rrrr0rZ decode_params) rBrheaderrr&paramsprrrrr_get_params_preservevs       zMessage._get_params_preserverTcCs8t}|||}||ur|S|r0dd|DS|SdS)NcSsg|]\}}|t|fqSr)r9rrrrrrbz&Message.get_params..)rr)rBrrr8rrrrr get_paramss  zMessage.get_paramscCsN||vr |S|||D]0\}}||kr|r@t|S|Sq|SrD)rr.r9)rBrrrr8rrrrrrgs  zMessage.get_paramrxrc Cs t|ts|r|||f}||vr2|dkr2d}n ||}|j||dst|s\t|||}qt|t|||g}nbd}|j||dD]N\} } d} | |krt|||} n t| | |} |s| }qt|| g}q|||kr|r| ||n||=|||<dS)Nrr:)rrrr8) rr r.rergr'rrkrr) rBrr&rrequoter languager_rZ old_param old_valueZ append_paramrrrr{s6   zMessage.set_paramcCs||vr dSd}|j||dD]@\}}||kr|sHt|||}qt|t|||g}q|||kr|||=|||<dS)Nrr)rr.r'rrkre)rBrrrZ new_ctyperrrrrrys zMessage.del_paramcCs|ddkst|dkr,|d=d|d<||vr@|||<dS|j||d}||=|||<|ddD]\}}|||||qhdS)Nrrrz mime-versionrwrvr)r,rr.rr{)rBrdrrrrrrrrset_type s zMessage.set_typecCsDt}|d|d}||ur*|d|d}||ur6|St|S)Nfilenamecontent-dispositionrr)rrgrcollapse_rfc2231_valuer)rBrrrrrr get_filename,szMessage.get_filenamecCs,t}|d|}||ur|St|S)Nboundary)rrgrrr-)rBrrrrrr get_boundary<s  zMessage.get_boundarycCst}||d}||ur$tdg}d}|D]:\}}|dkr\|dd|fd}q0|||fq0|s|dd|fg}|jD]z\} } | dkrg} |D].\} } | dkr| | q| d| | fqt| } ||j | | q|| | fq||_dS) NrzNo Content-Type header foundFrz"%s"Trr) rrrZHeaderParseErrorr.r0r<rrkr;r)rBrrrZ newparamsZfoundpZpkZpvrhrrrrrrr set_boundaryIs2         zMessage.set_boundaryc Cst}|d|}||ur|St|trp|dp2d}z|dd}t||}Wnttfyn|d}Yn0z|dWnty|YS0|S)Nr rzus-asciirr`) rrgrr r!rrhrir.)rBrrr ZpcharsetrRrrrget_content_charsetws      zMessage.get_content_charsetcsfdd|DS)Ncsg|]}|qSr)r)rpartrrrrrbz(Message.get_charsets..walk)rBrrrr get_charsetsszMessage.get_charsetscCs*|d}|durdSt|d}|S)Nrr)rerr.)rBr&c_drrrget_content_dispositions  zMessage.get_content_dispositionr)FrN)FN)NF)N)N)N)NrT)NrT)rxTNrF)rT)rxT)N)N)N)N)3__name__ __module__ __qualname__r rCrGrErSrRrVrXrYr]rprurtr|r}rrrrrrrrrerrrrzrrrrrrrrrgr{ryrrrrrrrZemail.iteratorsrrrrrrosd    Z /            " 3   .   cseZdZd/fdd Zd0fdd ZddZd d Zd d Zd1ddZhdZ ddZ ddZ ddddZ ddddZ ddZd2ddZd3ddZd4d d!Zdd"d#d$Zd%d&Zd'd(Zd)d*Zd+d,Zd-d.ZZS)5MIMEPartNcs(|durddlm}|}t|dS)Nr)default)Z email.policyrsuperrC)rBr;r __class__rrrCs zMIMEPart.__init__Fcs0|dur|jn|}|dur |j}t|||SrD)r;Zmax_line_lengthrrE)rBrLrJr;rrrrEs zMIMEPart.as_stringcCs|j|jjdddS)NT)utf8r;)rEr;ZclonerFrrrrGszMIMEPart.__str__cCs |d}|durdS|jdkS)NrF attachment)reZcontent_disposition)rBrrrr is_attachments zMIMEPart.is_attachmentc cs|r dS|d\}}|dkrB||vr>|||fVdS|dksR|sVdS|dkr|D]}|||EdHqfdSd|vr|d|fVd}|d}|r|D]}|d|kr|}qq|dur|}|r|dnd}|dur |||EdHdS)Nrtext multipartrelatedr2 content-idr) rrrindexrV iter_parts _find_bodyrgrp) rBrpreferencelistmaintypesubtypeZsubpart candidater2Zsubpartsrrrrs6     zMIMEPart._find_bodyrhtmlplaincCsBt|}d}|||D]$\}}||kr|}|}|dkrq>q|S)Nr)rr)rBrZ best_priobodyZpriorrrrget_bodys zMIMEPart.get_body>)rr)rr)r alternative)rrc cs"|d\}}|dks"|dkr&dS|}z |}WntyNYdS0|dkr|dkr|d}|rd}g}|D]"}|d|krd}qz||qz|r|EdHdS|d |EdHdSg} |D]L}|d\}}||f|j vr| s|| vr| |q|VqdS) Nrrrrr2FrTr) rrrprrZrgrer0pop _body_typesr) rBrrr\rr2rZ attachmentsrseenrrriter_attachments sD         zMIMEPart.iter_attachmentsccs|r|EdHdSrD)rVrprFrrrrCszMIMEPart.iter_parts)content_managercOs(|dur|jj}|j|g|Ri|SrD)r;r get_contentrBrargskwrrrrKszMIMEPart.get_contentcOs,|dur|jj}|j|g|Ri|dSrD)r;r set_contentrrrrrPszMIMEPart.set_contentc Cs|dkr6|}||f}||vr6td||g}g}|jD]4\}}|drj|||fqD|||fqD|rt||j d} || _|j | _ | g|_ ng|_ ||_d||d<|dur| d|dS)NrzCannot convert {} to {}content-rz multipart/rxr) rrrrr<r. startswithr0rdr;r>r{) rBrZdisallowed_subtypesrZexisting_subtypeZ keep_headersZ part_headersrr&rrrr_make_multipartUs.    zMIMEPart._make_multipartcCs|dd|dS)Nr)rmixedrrBrrrr make_relatedpszMIMEPart.make_relatedcCs|dd|dS)Nr)rrrrrrmake_alternativesszMIMEPart.make_alternativecCs|dd|dS)Nrrrrrrr make_mixedvszMIMEPart.make_mixed)_dispcOsj|dks||kr(t|d|t||jd}|j|i||r\d|vr\||d<||dS)NrZmake_rrzContent-Disposition)rrgetattrrdr;rr])rBZ_subtyperrrrrrr_add_multipartys   zMIMEPart._add_multipartcOs |jdg|Rddi|dS)NrrZinlinerrBrrrrr add_relatedszMIMEPart.add_relatedcOs|jdg|Ri|dS)Nrrrrrradd_alternativeszMIMEPart.add_alternativecOs |jdg|Rddi|dS)Nrrrrrrrradd_attachmentszMIMEPart.add_attachmentcCsg|_d|_dSrDr<r>rFrrrclearszMIMEPart.clearcCsdd|jD|_d|_dS)NcSs&g|]\}}|ds||fqS)r)r.r)rnrrrrrs z*MIMEPart.clear_content..rrFrrr clear_contentszMIMEPart.clear_content)N)FNN)r)N)N)N)rrrrCrErGrrrrrrrrrrrrrrrrrr  __classcell__rrrrrs* 7    rcseZdZfddZZS)rcs&tj|i|d|vr"d|d<dS)Nrvrw)rrrrrrrszEmailMessage.set_content)rrrrr rrrrrs)NT)__all__rermrjiorrZemailrrZemail._policybaserr r r?Zemail._encoded_wordsr rrrcompiler#rr'r7r9rrrrrrrs4      " N`