o
     JAfԷ                     @   s   	 d dgZ ddlZddlZddlZddlmZmZ ddlmZ ddlm	Z	 ddl
mZmZ ddlmZ dd	lmZ ejZd
ZedZdd ZdddZdd Zdd ZG dd  d ZG dd deZG dd deZdS )MessageEmailMessage    N)BytesIOStringIO)utils)errors)Policycompat32charset)decode_bz; z[ \(\)<>@,;:\\"/\[\]\?=]c                 C   s4   t | d\}}}|s| d fS | | fS )N;)str	partitionstrip)paramasepb r   $/usr/lib/python3.10/email/message.py_splitparam   s   r   Tc                 C   s   	 |d ur_t |dkr_t|tr'| d7 } t|d |d |d }d| |f S z|d W n tyH   | d7 } t|dd}d| |f  Y S w |sPt|rYd	| t	|f S d| |f S | S )
Nr   *      %s=%sasciizutf-8 z%s="%s")
len
isinstancetupler   Zencode_rfc2231encodeUnicodeEncodeError	tspecialssearchquote)r   valuer%   r   r   r   _formatparam'   s"   
r'   c                 C   s  dt |  } g }| d d dkr| dd  } | d}|dkrK| dd|| dd| d rK| d|d }|dkrK| dd|| dd| d s/|dk rSt| }| d | }d|v rx|d}|d |   d ||d d    }||  | |d  } | d d dks|S )Nr   r   r   "z\"r   =)r   findcountr   indexr   lowerappend)sZplistendfir   r   r   _parseparamI   s$   
((
,r3   c                 C   s0   t | tr| d | d t| d fS t| S )Nr   r   r   )r   r    r   unquote)r&   r   r   r   _unquotevalue]   s   

r5   c                   @   s  e Zd Z	 efddZdd Zdcdd	Zd
d ZddddZdd Z	dd Z
dd Zdd ZdeddZdfddZdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zdfd0d1Zd2d3 Zd4d5 Zdfd6d7Zd8d9 Zd:d; Zd<d= Z d>d? Z!d@dA Z"dBdC Z#dDdE Z$dFdG Z%dgdJdKZ&	H	IdgdLdMZ'	I	dhdPdQZ(didRdSZ)djdTdUZ*dfdVdWZ+dfdXdYZ,dZd[ Z-dfd\d]Z.dfd^d_Z/d`da Z0ddbl1m2Z2 dS )kr   c                 C   s:   || _ g | _d | _d | _d | _d  | _| _g | _d| _d S )N
text/plain)	policy_headers	_unixfrom_payload_charsetZpreambleZepiloguedefects_default_type)selfr7   r   r   r   __init__x   s   
zMessage.__init__c                 C   
   	 |   S N)	as_stringr>   r   r   r   __str__      zMessage.__str__Fr   Nc                 C   sL   	 ddl m} |d u r| jn|}t }||d||d}|j| |d | S )Nr   )	GeneratorF)mangle_from_maxheaderlenr7   unixfrom)email.generatorrF   r7   r   flattengetvalue)r>   rJ   rH   r7   rF   fpgr   r   r   rB      s   zMessage.as_stringc                 C   r@   rA   )as_bytesrC   r   r   r   	__bytes__   rE   zMessage.__bytes__c                 C   sJ   	 ddl m} |d u r| jn|}t }||d|d}|j| |d | S )Nr   )BytesGeneratorF)rG   r7   rI   )rK   rR   r7   r   rL   rM   )r>   rJ   r7   rR   rN   rO   r   r   r   rP      s   zMessage.as_bytesc                 C   s   	 t | jtS rA   )r   r:   listrC   r   r   r   is_multipart   s   zMessage.is_multipartc                 C   s
   || _ d S rA   r9   )r>   rJ   r   r   r   set_unixfrom   s   
zMessage.set_unixfromc                 C   s   | j S rA   rU   rC   r   r   r   get_unixfrom   s   zMessage.get_unixfromc                 C   sB   	 | j d u r|g| _ d S z	| j | W d S  ty    tdw )Nz=Attach is not valid on a message with a non-multipart payload)r:   r.   AttributeError	TypeError)r>   payloadr   r   r   attach   s   
zMessage.attachc                 C   s  	 |   r|r	d S |d u r| jS | j| S |d ur(t| jts(tdt| j | j}t| dd }t|tr|t	
|rd|dd}|scz|| ddd}W n( tyb   |dd}Y nw n|r|z|d}W n ty{   |d}Y nw |s|S |d	krt|S |d
krtd| \}}|D ]	}| j| | q|S |dv rt|}	t }
ztj|	|
dd |
 W S  tjy   | Y S w t|tr|S |S )NzExpected list, got %szcontent-transfer-encodingr   r   surrogateescaper   replaceraw-unicode-escapezquoted-printablebase64    )z
x-uuencodeZuuencodeZuuezx-uueT)quiet)rT   r:   r   rS   rY   typer   getr-   r   Z_has_surrogatesr!   decode	get_paramLookupErrorUnicodeErrorquopriZdecodestringr   join
splitlinesr7   Zhandle_defectr   uurM   Error)r>   r2   rd   rZ   cteZbpayloadr&   r<   ZdefectZin_fileZout_filer   r   r   get_payload   s`   !





zMessage.get_payloadc                 C   sv   	 t |dr|d u r|| _d S t|tst|}||j}t |dr+|dd| _n|| _|d ur9| | d S d S )Nr!   rd   r   r\   )hasattrr:   r   Charsetr!   output_charsetrd   set_charset)r>   rZ   r   r   r   r   set_payload/  s   


zMessage.set_payloadc                 C   s  	 |d u r|  d d | _d S t|tst|}|| _d| vr%| dd d| vr4| jdd| d n| d|  || krI|| j| _d| vr|	 }z||  W d S  t
y   | j}|r|z|dd	}W n ty{   ||j}Y nw ||| _| d| Y d S w d S )
Nr   MIME-Version1.0Content-Typer6   r
   zContent-Transfer-Encodingr   r\   )	del_paramr;   r   rp   
add_headerZget_output_charset	set_paramZbody_encoder:   Zget_body_encodingrY   r!   rg   rq   )r>   r   rm   rZ   r   r   r   rr   C  sB   

zMessage.set_charsetc                 C      	 | j S rA   )r;   rC   r   r   r   get_charsetr  s   zMessage.get_charsetc                 C   s   	 t | jS rA   )r   r8   rC   r   r   r   __len__z  s   
zMessage.__len__c                 C   s   	 |  |S rA   )rc   r>   namer   r   r   __getitem__~  s   
zMessage.__getitem__c                 C   st   	 | j |}|r-| }d}| jD ]\}}| |kr,|d7 }||kr,td||q| j| j || d S )Nr   r   z/There may be at most {} {} headers in a message)r7   Zheader_max_countr-   r8   
ValueErrorformatr.   header_store_parse)r>   r~   valZ	max_countZlnamefoundkvr   r   r   __setitem__  s   zMessage.__setitem__c                 C   sB   	 |  }g }| jD ]\}}|  |kr|||f q
|| _d S rA   )r-   r8   r.   )r>   r~   
newheadersr   r   r   r   r   __delitem__  s   
zMessage.__delitem__c                 C   s   |  dd | jD v S )Nc                 S   s   g | ]\}}|  qS r   )r-   .0r   r   r   r   r   
<listcomp>  s    z(Message.__contains__.<locals>.<listcomp>)r-   r8   r}   r   r   r   __contains__  s   zMessage.__contains__c                 c   s    | j D ]\}}|V  qd S rA   r8   )r>   Zfieldr&   r   r   r   __iter__  s   zMessage.__iter__c                 C   s   	 dd | j D S )Nc                 S   s   g | ]\}}|qS r   r   r   r   r   r   r     s    z Message.keys.<locals>.<listcomp>r   rC   r   r   r   keys  s   zMessage.keysc                       	  fdd j D S )Nc                    s   g | ]\}} j ||qS r   r7   header_fetch_parser   rC   r   r   r     s    z"Message.values.<locals>.<listcomp>r   rC   r   rC   r   values     
zMessage.valuesc                    r   )Nc                    s"   g | ]\}}| j ||fqS r   r   r   rC   r   r   r     s    z!Message.items.<locals>.<listcomp>r   rC   r   rC   r   items  r   zMessage.itemsc                 C   s<   	 |  }| jD ]\}}|  |kr| j||  S q|S rA   )r-   r8   r7   r   )r>   r~   failobjr   r   r   r   r   rc     s   zMessage.getc                 C   s   	 | j ||f d S rA   )r8   r.   )r>   r~   r&   r   r   r   set_raw  s   zMessage.set_rawc                 C   s   	 t | j S rA   )iterr8   copyrC   r   r   r   	raw_items  s   zMessage.raw_itemsc                 C   sJ   	 g }|  }| jD ]\}}|  |kr|| j|| q
|s#|S |S rA   )r-   r8   r.   r7   r   )r>   r~   r   r   r   r   r   r   r   get_all  s   zMessage.get_allc                 K   sr   	 g }|  D ]\}}|d u r||dd q|t|dd| q|d ur0|d| t|| |< d S )N_-r   )r   r.   r]   r'   insert	SEMISPACEri   )r>   _name_valueZ_paramspartsr   r   r   r   r   rx     s   zMessage.add_headerc                 C   s\   	 |  }ttt| j| jD ]\}\}}|  |kr)| j||| j|<  d S qt|rA   )r-   zipranger   r8   r7   r   KeyError)r>   r   r   r2   r   r   r   r   r   replace_header!  s   "zMessage.replace_headerc                 C   sJ   	 t  }| d|}||u r|  S t|d  }|ddkr#dS |S )Ncontent-typer   /r   r6   )objectrc   get_default_typer   r-   r+   )r>   missingr&   ctyper   r   r   get_content_type4  s   zMessage.get_content_typec                 C      	 |   }|dd S )Nr   r   r   splitr>   r   r   r   r   get_content_maintypeL     zMessage.get_content_maintypec                 C   r   )Nr   r   r   r   r   r   r   get_content_subtypeU  r   zMessage.get_content_subtypec                 C   rz   rA   r=   rC   r   r   r   r   ^  s   zMessage.get_default_typec                 C   s   	 || _ d S rA   r   r   r   r   r   set_default_typeg  s   
zMessage.set_default_typec           	   	   C   s   t  }| ||}||u r|S g }t|D ]+}z|dd\}}| }| }W n ty8   | }d}Y nw |||f qt|}|S )Nr)   r   r   )	r   rc   r3   r   r   r   r.   r   Zdecode_params)	r>   r   headerr   r&   paramspr~   r   r   r   r   _get_params_preservep  s"   
zMessage._get_params_preserver   Tc                 C   s6   	 t  }| ||}||u r|S |rdd |D S |S )Nc                 S   s   g | ]
\}}|t |fqS r   )r5   r   r   r   r   r     s    z&Message.get_params.<locals>.<listcomp>)r   r   )r>   r   r   r4   r   r   r   r   r   
get_params  s   zMessage.get_paramsc                 C   sP   	 || vr|S |  ||D ]\}}| | kr%|r!t|  S |  S q|S rA   )r   r-   r5   )r>   r   r   r   r4   r   r   r   r   r   re     s   zMessage.get_paramrv   r   c                 C   s  	 t |ts|r|||f}|| vr| dkrd}n| |}| j||ds;|s/t|||}n=t|t|||g}n1d}| j||dD ]'\}	}
d}|	 | krYt|||}nt|	|
|}|sd|}qDt||g}qD|| |kr|r}| 	|| d S | |= || |< d S d S )Nr   r6   )r   r   r   r4   )
r   r    r-   rc   re   r'   r   ri   r   r   )r>   r   r&   r   requoter   languager]   r   Z	old_param	old_valueZappend_paramr   r   r   ry     s:   

zMessage.set_paramc                 C   s   	 || vrd S d}| j ||dD ] \}}| | kr0|s%t|||}qt|t|||g}q|| |krA| |= || |< d S d S )Nr   r   )r   r-   r'   r   ri   rc   )r>   r   r   r   Z	new_ctyper   r   r   r   r   rw     s    
zMessage.del_paramc                 C   s   	 | ddks
t| dkr| d= d| d< || vr!|| |< d S | j||d}| |= || |< |dd  D ]\}}| |||| q5d S )Nr   r   r   zmime-versionru   rt   r   )r+   r   r-   r   ry   )r>   rb   r   r   r   r   r   r   r   r   set_type  s   zMessage.set_typec                 C   sF   	 t  }| d|d}||u r| d|d}||u r|S t| S )Nfilenamecontent-dispositionr~   r   )r   re   r   collapse_rfc2231_valuer   )r>   r   r   r   r   r   r   get_filename&  s   zMessage.get_filenamec                 C   s.   	 t  }| d|}||u r|S t| S )Nboundary)r   re   r   r   rstrip)r>   r   r   r   r   r   r   get_boundary6  s   zMessage.get_boundaryc                 C   s  	 t  }| |d}||u rtdg }d}|D ]\}}| dkr/|dd| f d}q|||f q|sB|dd| f g }| jD ]=\}	}
|	 dkr}g }|D ]\}}
|
dkrc|| qU|d||
f  qUt|}|| j	
|	| qG||	|
f qG|| _d S )	Nr   zNo Content-Type header foundFr   z"%s"Tr   r   )r   r   r   ZHeaderParseErrorr-   r.   r8   r   ri   r7   r   )r>   r   r   r   Z	newparamsZfoundpZpkZpvr   hr   r   r   r   r   r   r   set_boundaryC  s4   	


zMessage.set_boundaryc              	   C   s   	 t  }| d|}||u r|S t|tr9|d pd}z|d d}t||}W n ttfy8   |d }Y nw z
|d W | S  tyN   | Y S w )Nr   r   zus-asciir   r^   )	r   re   r   r    r!   r   rf   rg   r-   )r>   r   r   r   ZpcharsetrP   r   r   r   get_content_charsetq  s&   
zMessage.get_content_charsetc                    s   	  fdd|   D S )Nc                    s   g | ]}|  qS r   )r   )r   partr   r   r   r     s    z(Message.get_charsets.<locals>.<listcomp>walk)r>   r   r   r   r   get_charsets  s   zMessage.get_charsetsc                 C   s,   	 |  d}|d u rd S t|d  }|S )Nr   r   )rc   r   r-   )r>   r&   c_dr   r   r   get_content_disposition  s   
zMessage.get_content_dispositionr   )Fr   N)FN)NFrA   )Nr   T)rv   TNr   F)r   T)rv   T)3__name__
__module____qualname__r	   r?   rD   rB   rQ   rP   rT   rV   rW   r[   rn   rs   rr   r{   r|   r   r   r   r   r   r   r   r   rc   r   r   r   rx   r   r   r   r   r   r   r   r   re   ry   rw   r   r   r   r   r   r   r   Zemail.iteratorsr   r   r   r   r   r   i   sh    



Z/


				

"

3

 

.
c                       s   e Zd Zd/ fdd	Zd0 fdd	Zdd Zd	d
 Zdd Zd1ddZh dZ	dd Z
dd ZddddZddddZdd Zd/ddZd/ddZd/d d!Zdd"d#d$Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Z  ZS )2MIMEPartNc                    s(   |d u rddl m} |}t | d S )Nr   )default)Zemail.policyr   superr?   )r>   r7   r   	__class__r   r   r?     s   zMIMEPart.__init__Fc                    s2   	 |d u r| j n|}|d u r|j}t |||S rA   )r7   Zmax_line_lengthr   rB   )r>   rJ   rH   r7   r   r   r   rB     s
   
zMIMEPart.as_stringc                 C   s   | j | jjdddS )NT)utf8r7   )rB   r7   ZclonerC   r   r   r   rD     s   zMIMEPart.__str__c                 C   s    |  d}|d u rdS |jdkS )Nr   F
attachment)rc   Zcontent_disposition)r>   r   r   r   r   is_attachment  s   
zMIMEPart.is_attachmentc           	      c   s   |  rd S | d\}}|dkr"||v r |||fV  d S |dks*|  s,d S |dkrB| D ]}| ||E d H  q4d S d|v rN|d|fV  d }|d}|rh| D ]}|d |krg|} nq[|d u rx| }|rv|d nd }|d ur| ||E d H  d S d S )Nr   text	multipartrelatedstart
content-idr   )	r   r   r   r,   rT   
iter_parts
_find_bodyre   rn   )	r>   r   preferencelistmaintypesubtypeZsubpart	candidater   Zsubpartsr   r   r   r     s<   
zMIMEPart._find_bodyr   htmlplainc                 C   sF   	 t |}d }| | |D ]\}}||k r |}|}|dkr  |S q|S )Nr   )r   r   )r>   r   Z	best_priobodyZprior   r   r   r   get_body  s   	 zMIMEPart.get_body>   )r   r   )r   r   )r   alternative)r   r   c           
      c   s    	 |   d\}}|dks|dkrd S |  }z| }W n
 ty)   Y d S w |dkrf|dkrf| d}|rZd}g }|D ]}|d|krKd}q?|| q?|rZ|E d H  d S |d	 |E d H  d S g }	|D ]#}|  d\}}||f| j	v r|
 s||	vr|	| qj|V  qjd S )
Nr   r   r   r   r   Fr   Tr   )r   r   rn   r   rX   re   rc   r.   pop_body_typesr   )
r>   r   r   rZ   r   r   r   Zattachmentsr   seenr   r   r   iter_attachments  sJ   





zMIMEPart.iter_attachmentsc                 c   s"    	 |   r|  E d H  d S d S rA   )rT   rn   rC   r   r   r   r   =  s
   zMIMEPart.iter_parts)content_managerc                O   s(   |d u r| j j}|j| g|R i |S rA   )r7   r   get_contentr>   r   argskwr   r   r   r   E  s   zMIMEPart.get_contentc                O   s,   |d u r| j j}|j| g|R i | d S rA   )r7   r   set_contentr   r   r   r   r   J  s   zMIMEPart.set_contentc           
      C   s   |   dkr|  }||f }||v rtd||g }g }| jD ]\}}| dr5|||f q"|||f q"|rSt| | j	d}	||	_| j
|	_
|	g| _
ng | _
|| _d| | d< |d urk| d| d S d S )Nr   zCannot convert {} to {}content-r   z
multipart/rv   r   )r   r   r   r   r8   r-   
startswithr.   rb   r7   r:   ry   )
r>   r   Zdisallowed_subtypesr   Zexisting_subtypeZkeep_headersZpart_headersr~   r&   r   r   r   r   _make_multipartO  s0   

zMIMEPart._make_multipartc                 C      |  dd| d S )Nr   )r   mixedr   r>   r   r   r   r   make_relatedj     zMIMEPart.make_relatedc                 C   r   )Nr   )r   r   r   r   r   r   make_alternativem  r  zMIMEPart.make_alternativec                 C   r   )Nr   r   r   r   r   r   r   
make_mixedp  r  zMIMEPart.make_mixed)_dispc                O   sj   |   dks|  |krt| d|   t| | jd}|j|i | |r.d|vr.||d< | | d S )Nr   Zmake_r   r   zContent-Disposition)r   r   getattrrb   r7   r   r[   )r>   Z_subtyper  r   r   r   r   r   r   _add_multiparts  s   zMIMEPart._add_multipartc                 O       | j dg|R ddi| d S )Nr   r  Zinliner  r>   r   r   r   r   r   add_related}      zMIMEPart.add_relatedc                 O   s   | j dg|R i | d S )Nr   r	  r
  r   r   r   add_alternative  s   zMIMEPart.add_alternativec                 O   r  )Nr   r  r   r	  r
  r   r   r   add_attachment  r  zMIMEPart.add_attachmentc                 C   s   g | _ d | _d S rA   r8   r:   rC   r   r   r   clear  s   
zMIMEPart.clearc                 C   s   dd | j D | _ d | _d S )Nc                 S   s&   g | ]\}}|  d s||fqS )r   )r-   r   )r   nr   r   r   r   r     s    z*MIMEPart.clear_content.<locals>.<listcomp>r  rC   r   r   r   clear_content  s   
zMIMEPart.clear_contentrA   )FNN)r   )r   r   r   r?   rB   rD   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r  r  __classcell__r   r   r   r   r     s,    
7



r   c                       s   e Zd Z fddZ  ZS )r   c                    s*   t  j|i | d| vrd| d< d S d S )Nrt   ru   )r   r   r
  r   r   r   r     s   zEmailMessage.set_content)r   r   r   r   r  r   r   r   r   r     s    )NT)__all__rerk   rh   ior   r   Zemailr   r   Zemail._policybaser   r	   r   r;   Zemail._encoded_wordsr   rp   r   compiler#   r   r'   r3   r5   r   r   r   r   r   r   r   <module>   s8   


"      N `