3 \@sddgZddlZddlZddlZddlmZmZddlmZddlm Z ddl m Z m Z ddlm Zdd lmZejZd Zejd Zd d ZdddZddZddZGdddZGdddeZGdddeZdS)Message EmailMessageN)BytesIOStringIO)utils)errors)Policycompat32)charset)decode_bz; z[ \(\)<>@,;:\\"/\[\]\?=]cCs4t|jd\}}}|s$|jdfS|j|jfS)N;)str partitionstrip)paramasepbr%/usr/lib64/python3.6/email/message.py _splitparams rTc Cs|dk rt|dkrt|trL|d7}tj|d|d|d}d||fSy|jdWn2tk r|d7}tj|dd}d||fSX|stj|rd |tj |fSd||fSn|SdS) Nr*z%s=%sasciizutf-8z%s="%s") len isinstancetuplerZencode_rfc2231encodeUnicodeEncodeError tspecialssearchquote)rvaluer#rrr _formatparam's   r%cCsdt|}g}x|dddkr|dd}|jd}x<|dkrt|jdd||jdd|drt|jd|d}q:W|dkrt|}|d|}d|kr|jd}|d|jjd||ddj}|j|j||d}qW|S)Nr rr"z\"r=)r findcountrindexrlowerappend)sZplistendfirrr _parseparamIs    *  ,r1cCs4t|tr&|d|dtj|dfStj|SdS)Nrrr)rrrunquote)r$rrr _unquotevalue]s r3c@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)Nz text/plain) policy_headers _unixfrom_payload_charsetZpreambleZepiloguedefects _default_type)selfr4rrr__init__xs zMessage.__init__cCs|jS)N) as_string)r;rrr__str__szMessage.__str__FrNcCsJddlm}|dkr|jn|}t}||d||d}|j||d|jS)Nr) GeneratorF) mangle_from_ maxheaderlenr4)unixfrom)email.generatorr?r4rflattengetvalue)r;rBrAr4r?fpgrrrr=s zMessage.as_stringcCs|jS)N)as_bytes)r;rrr __bytes__szMessage.__bytes__cCsHddlm}|dkr|jn|}t}||d|d}|j||d|jS)Nr)BytesGeneratorF)r@r4)rB)rCrJr4rrDrE)r;rBr4rJrFrGrrrrHs  zMessage.as_bytescCs t|jtS)N)rr7list)r;rrr is_multipartszMessage.is_multipartcCs ||_dS)N)r6)r;rBrrr set_unixfromszMessage.set_unixfromcCs|jS)N)r6)r;rrr get_unixfromszMessage.get_unixfromc CsF|jdkr|g|_n.y|jj|Wntk r@tdYnXdS)Nz=Attach is not valid on a message with a non-multipart payload)r7r,AttributeError TypeError)r;payloadrrrattachs   zMessage.attachc Cs|jr(|rdS|dkr|jS|j|S|dk rPt|jt rPtdt|j|j}t|jddj}t|trt j |r|j dd}|sy|j |j ddd}Wn tk r|j dd}YnXn6|ry|j d}Wn tk r|j d}YnX|s |S|d kr tj|S|d krbtd j|j\}}x|D]}|jj||qFW|S|dkrt|} t} ytj | | dd| jStjk r|SXt|tr|S|S)NzExpected list, got %szcontent-transfer-encodingrrsurrogateescaper replacezraw-unicode-escapezquoted-printablebase64 x-uuencodeuuencodeuuex-uueT)quiet)rWrXrYrZ)rLr7rrKrPtyper getr+rZ_has_surrogatesrdecode get_param LookupError UnicodeErrorquopriZ decodestringr join splitlinesr4Z handle_defectruurEError) r;r0r^rQcteZbpayloadr$r9ZdefectZin_fileZout_filerrr get_payloadsV"          zMessage.get_payloadcCspt|dr:|dkr||_dSt|ts.t|}|j|j}t|drT|jdd|_n||_|dk rl|j|dS)Nrr^rrS)hasattrr7rCharsetroutput_charsetr^ set_charset)r;rQr rrr set_payload/s    zMessage.set_payloadcCs|dkr|jdd|_dSt|ts.t|}||_d|krH|jddd|krf|jdd|jdn|jd|j||jkr|j|j|_d|kr|j }y ||Wnjt k r|j}|ry|j dd }Wn t k r|j |j }YnX|j||_|jd|YnXdS) Nr z MIME-Versionz1.0z Content-Typez text/plain)r zContent-Transfer-EncodingrrS) del_paramr8rrj add_headerZget_output_charset set_paramZ body_encoder7Zget_body_encodingrPrrark)r;r rgrQrrrrlCs8       zMessage.set_charsetcCs|jS)N)r8)r;rrr get_charsetrszMessage.get_charsetcCs t|jS)N)rr5)r;rrr__len__zszMessage.__len__cCs |j|S)N)r])r;namerrr __getitem__~s zMessage.__getitem__cCsv|jj|}|r\|j}d}x>|jD]4\}}|j|kr$|d7}||kr$tdj||q$W|jj|jj||dS)Nrrz/There may be at most {} {} headers in a message)r4Zheader_max_countr+r5 ValueErrorformatr,header_store_parse)r;rsvalZ max_countZlnamefoundkvrrr __setitem__s  zMessage.__setitem__cCsD|j}g}x,|jD]"\}}|j|kr|j||fqW||_dS)N)r+r5r,)r;rs newheadersrzr{rrr __delitem__s  zMessage.__delitem__cCs|jdd|jDkS)NcSsg|]\}}|jqSr)r+).0rzr{rrr sz(Message.__contains__..)r+r5)r;rsrrr __contains__szMessage.__contains__ccsx|jD]\}}|VqWdS)N)r5)r;Zfieldr$rrr__iter__szMessage.__iter__cCsdd|jDS)NcSsg|] \}}|qSrr)rrzr{rrrrsz Message.keys..)r5)r;rrrkeyssz Message.keyscsfddjDS)Ncsg|]\}}jj||qSr)r4header_fetch_parse)rrzr{)r;rrrsz"Message.values..)r5)r;r)r;rvaluess zMessage.valuescsfddjDS)Ncs"g|]\}}|jj||fqSr)r4r)rrzr{)r;rrrsz!Message.items..)r5)r;r)r;ritemss z Message.itemscCs:|j}x,|jD]"\}}|j|kr|jj||SqW|S)N)r+r5r4r)r;rsfailobjrzr{rrrr]s  z Message.getcCs|jj||fdS)N)r5r,)r;rsr$rrrset_rawszMessage.set_rawcCst|jjS)N)iterr5copy)r;rrr raw_itemsszMessage.raw_itemscCsLg}|j}x2|jD](\}}|j|kr|j|jj||qW|sH|S|S)N)r+r5r,r4r)r;rsrrrzr{rrrget_alls  zMessage.get_allcKstg}xH|jD]<\}}|dkr2|j|jddq|jt|jdd|qW|dk rb|jd|tj|||<dS)N_-r)rr,rTr%insert SEMISPACErc)r;_name_valueZ_paramspartsrzr{rrrros zMessage.add_headercCs^|j}xPttt|j|jD].\}\}}|j|kr |jj|||j|<Pq Wt|dS)N)r+ziprangerr5r4rwKeyError)r;rrr0rzr{rrrreplace_header!s $ zMessage.replace_headercCsHt}|jd|}||kr"|jSt|dj}|jddkrDdS|S)Nz content-typer/rz text/plain)objectr]get_default_typerr+r))r;missingr$ctyperrrget_content_type4s  zMessage.get_content_typecCs|j}|jddS)Nrr)rsplit)r;rrrrget_content_maintypeLszMessage.get_content_maintypecCs|j}|jddS)Nrr)rr)r;rrrrget_content_subtypeUszMessage.get_content_subtypecCs|jS)N)r:)r;rrrr^szMessage.get_default_typecCs ||_dS)N)r:)r;rrrrset_default_typegszMessage.set_default_typec Cst}|j||}||kr|Sg}xdt|D]X}y$|jdd\}}|j}|j}Wn tk rt|j}d}YnX|j||fq,Wtj|}|S)Nr'rr) rr]r1rrrur,rZ decode_params) r;rheaderrr$paramsprsrxrrr_get_params_preserveps     zMessage._get_params_preserve content-typeTcCs8t}|j||}||kr|S|r0dd|DS|SdS)NcSsg|]\}}|t|fqSr)r3)rrzr{rrrrsz&Message.get_params..)rr)r;rrr2rrrrr get_paramss  zMessage.get_paramscCsJ||kr |Sx8|j||D](\}}|j|jkr|r>t|S|SqW|S)N)rr+r3)r;rrrr2rzr{rrrr_szMessage.get_param Content-Typerc Cst|t r|r|||f}||kr4|jdkr4d}n |j|}|j||dsv|s^t|||}qtj|t|||g}nfd}x`|j||dD]N\} } d} | j|jkrt|||} n t| | |} |s| }qtj|| g}qW||j|kr|r|j ||n||=|||<dS)Nz content-typez text/plain)rr)rr2) rrr+r]r_r%rrcrr) r;rr$rrequoter ZlanguagerTrZ old_paramZ old_valueZ append_paramrrrrps2   zMessage.set_paramcCs||kr dSd}xR|j||dD]@\}}|j|jkr |sJt|||}q tj|t|||g}q W||j|kr||=|||<dS)Nr)rr2)rr+r%rrcr])r;rrrZ new_ctyperr{rrrrnszMessage.del_paramcCs|jddkst|jdkr,|d=d|d<||kr@|||<dS|j||d}||=|||<x(|ddD]\}}|j||||qjWdS)Nrrz content-typez mime-versionz1.0z MIME-Version)rr2)r)rur+rrp)r;r\rrrrr{rrrset_types zMessage.set_typecCsDt}|jd|d}||kr*|jd|d}||kr6|Stj|jS)Nfilenamezcontent-dispositionrsz content-type)rr_rcollapse_rfc2231_valuer)r;rrrrrr get_filename&szMessage.get_filenamecCs,t}|jd|}||kr|Stj|jS)Nboundary)rr_rrrstrip)r;rrrrrr get_boundary6s  zMessage.get_boundarycCs t}|j|d}||kr$tjdg}d}xB|D]:\}}|jdkr^|jdd|fd}q2|j||fq2W|s|jdd|fg}x|jD]\} } | jdkrg} x6|D].\} } | dkr| j| q| jd| | fqWtj| } |j|j j | | q|j| | fqW||_dS) Nz content-typezNo Content-Type header foundFrz"%s"Trz%s=%s) rrrZHeaderParseErrorr+r,r5rrcr4rw)r;rrrZ newparamsZfoundpZpkZpvr}hr{rrzrxrrr set_boundaryCs2      zMessage.set_boundarycCst}|jd|}||kr|St|trr|dp2d}y|djd}t||}Wn ttfk rp|d}YnXy|jdWntk r|SX|jS)Nr rzus-asciirzraw-unicode-escape) rr_rrrr r`rar+)r;rrr ZpcharsetrHrrrget_content_charsetqs    zMessage.get_content_charsetcsfdd|jDS)Ncsg|]}|jqSr)r)rpart)rrrrsz(Message.get_charsets..)walk)r;rr)rr get_charsetsszMessage.get_charsetscCs*|jd}|dkrdSt|dj}|S)Nzcontent-dispositionr)r]rr+)r;r$c_drrrget_content_dispositions  zMessage.get_content_disposition)r)FrN)FN)NF)N)N)N)NrT)NrT)rTNrF)rT)rT)N)N)N)N)3__name__ __module__ __qualname__r r<r>r=rIrHrLrMrNrRrhrmrlrqrrrtr|r~rrrrrr]rrrrorrrrrrrrr_rprnrrrrrrrZemail.iteratorsrrrrrris`    Z /            ! 2   .   cseZdZd3ddZd4fdd ZddZd d Zd d Zd6ddZd7d8d9d:hZ ddZ ddZ ddddZ ddddZ ddZd;d d!ZdMIMEPartNcCs(|dkrddlm}|}tj||dS)Nr)default)Z email.policyrrr<)r;r4rrrrr<s zMIMEPart.__init__Fcs0|dkr|jn|}|dkr |j}tj||dS)N)rAr4)r4Zmax_line_lengthsuperr=)r;rBrAr4) __class__rrr=s zMIMEPart.as_stringcCs|j|jjdddS)NT)utf8)r4)r=r4Zclone)r;rrrr>szMIMEPart.__str__cCs |jd}|dkrdS|jdkS)Nzcontent-dispositionF attachment)r]Zcontent_disposition)r;rrrr is_attachments zMIMEPart.is_attachmentc cs |jr dS|jjd\}}|dkrB||kr>|j||fVdS|dkrNdS|dkr~x"|jD]}|j||EdHq`WdSd|kr|jd|fVd}|jd}|rx"|jD]}|d|kr|}PqW|dkr|j}|r|dnd}|dk r|j||EdHdS)Nrtext multipartrelatedstartz content-idr)rrrr* iter_parts _find_bodyr_rh) r;rpreferencelistmaintypesubtypeZsubpart candidaterZsubpartsrrrrs6   zMIMEPart._find_bodyrhtmlplaincCsDt|}d}x2|j||D]"\}}||kr|}|}|dkrPqW|S)Nr)rr)r;rZ best_prioZbodyZpriorrrrget_bodys zMIMEPart.get_bodyrr alternativec cs|jjd\}}|dks"|dkr&dS|jj}|dkr|dkr|jd}|rd}g}x*|D]"}|jd|krvd}q^|j|q^W|r|EdHdS|jd |EdHdSg}xP|D]H}|jjd\}}||f|jkr|j r||kr|j|q|VqWdS) NrrrrrFz content-idTr) rrrhrr_r]r,pop _body_typesr) r;rrrrryZ attachmentsrseenrrriter_attachmentss6         zMIMEPart.iter_attachmentsccs|jdkr|jEdHdS)Nr)rrh)r;rrrr4s zMIMEPart.iter_parts)content_managercOs"|dkr|jj}|j|f||S)N)r4r get_content)r;rargskwrrrr<szMIMEPart.get_contentcOs&|dkr|jj}|j|f||dS)N)r4r set_content)r;rrrrrrrAszMIMEPart.set_contentc Cs|jdkr6|j}||f}||kr6tdj||g}g}x>|jD]4\}}|jjdrl|j||fqF|j||fqFW|rt||j d} || _|j | _ | g|_ ng|_ ||_d||d<|dk r|j d|dS)NrzCannot convert {} to {}zcontent-)r4z multipart/z Content-Typer) rrrurvr5r+ startswithr,r\r4r7rp) r;rZdisallowed_subtypesrZexisting_subtypeZ keep_headersZ part_headersrsr$rrrr_make_multipartFs,     zMIMEPart._make_multipartcCs|jdd|dS)Nrrmixed)rr)r)r;rrrr make_relatedaszMIMEPart.make_relatedcCs|jdd|dS)Nrr)r)r)r;rrrrmake_alternativedszMIMEPart.make_alternativecCs|jdf|dS)Nr)r)r;rrrr make_mixedgszMIMEPart.make_mixed)_dispcOsf|jdks|j|kr(t|d|t||jd}|j|||rXd|krX||d<|j|dS)NrZmake_)r4zcontent-dispositionzContent-Disposition)rrgetattrr\r4rrR)r;Z_subtyperrrrrrr_add_multipartjs    zMIMEPart._add_multipartcOs|jd|ddi|dS)NrrZinline)r)r)r;rrrrr add_relatedtszMIMEPart.add_relatedcOs|jd||dS)Nr)r)r)r;rrrrradd_alternativewszMIMEPart.add_alternativecOs|jd|ddi|dS)Nrrr)r)r)r;rrrrradd_attachmentzszMIMEPart.add_attachmentcCsg|_d|_dS)N)r5r7)r;rrrclear}szMIMEPart.clearcCsdd|jD|_d|_dS)NcSs&g|]\}}|jjds||fqS)zcontent-)r+r)rnr{rrrrsz*MIMEPart.clear_content..)r5r7)r;rrr clear_contentszMIMEPart.clear_content)N)FNNrrr)r)rr)rr)rr)rr)N)N)N)rrrr<r=r>rrrrrrrrrrrrrrrrrr __classcell__rr)rrrs0  .    rcseZdZfddZZS)rcs"tj||d|krd|d<dS)Nz MIME-Versionz1.0)rr)r;rr)rrrrszEmailMessage.set_content)rrrrrrr)rrrs)NT)__all__rererbiorrZemailrrZemail._policybaserr r r8Zemail._encoded_wordsr rjrcompiler!rr%r1r3rrrrrrrs4      " NW