MINI MINI MANI MO
3
\ @ s d dgZ ddlZddlZddlZddlmZmZ ddlmZ ddlm Z ddl
mZmZ ddlm
Z dd lmZ ejZd
ZejdZdd
ZdddZdd Zdd ZG dd d ZG dd deZG dd deZdS )MessageEmailMessage N)BytesIOStringIO)utils)errors)Policycompat32)charset)decode_bz; z[ \(\)<>@,;:\\"/\[\]\?=]c C s4 t | jd\}}}|s$|j d fS |j |j fS )N;)str partitionstrip)paramasepb r %/usr/lib64/python3.6/email/message.py_splitparam s r Tc C s |d k rt |dkrt|trL| d7 } tj|d |d |d }d| |f S y|jd W n2 tk
r | d7 } tj|dd}d| |f S X |stj|rd | tj |f S d| |f S n| S d S )
Nr * z%s=%sasciizutf-8 z%s="%s")
len
isinstancetupler Zencode_rfc2231encodeUnicodeEncodeError tspecialssearchquote)r valuer# r r r _formatparam' s
r% c C s dt | } g }x| d d dkr| dd } | jd}x<|dkrt| jdd|| jdd| d rt| jd|d }q:W |dk rt| }| d | }d|kr|jd}|d | j j d ||d d j }|j|j | |d } qW |S )Nr r r "z\"r =)r
findcountr indexr lowerappend)sZplistendfir r r _parseparamI s
*
,r1 c C s4 t | tr&| d | d tj| d fS tj| S d S )Nr r r )r r r unquote)r$ r r r
_unquotevalue] s
r3 c @ s e Zd ZefddZdd Zdcdd Zd
d Zdddd
Zdd Z dd Z
dd Zdd ZdeddZ
dfddZdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zdgd0d1Zd2d3 Zd4d5 Zdhd6d7Zd8d9 Zd:d; Zd<d= Z d>d? Z!d@dA Z"dBdC Z#dDdE Z$dFdG Z%didJdKZ&djdLdMZ'dkdPdQZ(dldRdSZ)dmdTdUZ*dndVdWZ+dodXdYZ,dZd[ Z-dpd\d]Z.dqd^d_Z/d`da Z0ddbl1m2Z2 dS )rr c C s: || _ g | _d | _d | _d | _d | _| _g | _d| _d S )Nz
text/plain) policy_headers _unixfrom_payload_charsetZpreambleZepiloguedefects
_default_type)selfr4 r r r __init__x s zMessage.__init__c C s | j S )N) as_string)r; r r r __str__ s zMessage.__str__Fr Nc C sJ ddl m} |d kr| jn|}t }||d||d}|j| |d |j S )Nr ) GeneratorF)mangle_from_maxheaderlenr4 )unixfrom)email.generatorr? r4 r flattengetvalue)r; rB rA r4 r? fpgr r r r= s zMessage.as_stringc C s | j S )N)as_bytes)r; r r r __bytes__ s zMessage.__bytes__c C sH ddl m} |d kr| jn|}t }||d|d}|j| |d |j S )Nr )BytesGeneratorF)r@ r4 )rB )rC rJ r4 r rD rE )r; rB r4 rJ rF rG r r r rH s zMessage.as_bytesc C s t | jtS )N)r r7 list)r; r r r is_multipart s zMessage.is_multipartc C s
|| _ d S )N)r6 )r; rB r r r set_unixfrom s zMessage.set_unixfromc C s | j S )N)r6 )r; r r r get_unixfrom s zMessage.get_unixfromc C sF | j d kr|g| _ n.y| j j| W n tk
r@ tdY nX d S )Nz=Attach is not valid on a message with a non-multipart payload)r7 r, AttributeError TypeError)r; payloadr r r attach s
zMessage.attachc C s | j r(|rd S |d kr| jS | j| S |d k rPt| jt rPtdt| j | j}t| jddj }t|trt j
|r|jdd}|sy|j| j
ddd}W n tk
r |jdd}Y nX n6|ry|jd}W n tk
r |jd}Y nX |s|S |d kr tj|S |d
krbtdj|j \}}x|D ]}| jj| | qFW |S |dkrt|} t }
ytj| |
dd |
j S tjk
r |S X t|tr|S |S )NzExpected list, got %szcontent-transfer-encodingr r surrogateescaper
replacezraw-unicode-escapezquoted-printablebase64
x-uuencodeuuencodeuuex-uueT)quiet)rW rX rY rZ )rL r7 r rK rP typer
getr+ r Z_has_surrogatesr decode get_paramLookupErrorUnicodeErrorquopriZdecodestringr join
splitlinesr4 Z
handle_defectr uurE Error)r; r0 r^ rQ cteZbpayloadr$ r9 ZdefectZin_fileZout_filer r r get_payload sV "
zMessage.get_payloadc C sp t |dr:|d kr|| _d S t|ts.t|}|j|j}t |drT|jdd| _n|| _|d k rl| j| d S )Nr r^ r rS )hasattrr7 r Charsetr output_charsetr^ set_charset)r; rQ r
r r r set_payload/ s
zMessage.set_payloadc C s |d kr| j d d | _d S t|ts.t|}|| _d| krH| jdd d| krf| jdd|j d n| jd|j ||j kr|j| j| _d| kr|j }y|| W nj t
k
r | j}|ry|jdd }W n tk
r |j|j
}Y nX |j|| _| jd| Y nX d S )
Nr
zMIME-Versionz1.0zContent-Typez
text/plain)r
zContent-Transfer-Encodingr rS ) del_paramr8 r rj
add_headerZget_output_charset set_paramZbody_encoder7 Zget_body_encodingrP r ra rk )r; r
rg rQ r r r rl C s8
zMessage.set_charsetc C s | j S )N)r8 )r; r r r get_charsetr s zMessage.get_charsetc C s
t | jS )N)r r5 )r; r r r __len__z s zMessage.__len__c C s
| j |S )N)r] )r; namer r r __getitem__~ s zMessage.__getitem__c C sv | j j|}|r\|j }d}x>| jD ]4\}}|j |kr$|d7 }||kr$tdj||q$W | jj| j j|| d S )Nr r z/There may be at most {} {} headers in a message)r4 Zheader_max_countr+ r5
ValueErrorformatr, header_store_parse)r; rs valZ max_countZlnamefoundkvr r r __setitem__ s zMessage.__setitem__c C sD |j }g }x,| jD ]"\}}|j |kr|j||f qW || _d S )N)r+ r5 r, )r; rs
newheadersrz r{ r r r __delitem__ s zMessage.__delitem__c C s |j dd | jD kS )Nc S s g | ]\}}|j qS r )r+ ).0rz r{ r r r
<listcomp> s z(Message.__contains__.<locals>.<listcomp>)r+ r5 )r; rs r r r __contains__ s zMessage.__contains__c c s x| j D ]\}}|V qW d S )N)r5 )r; Zfieldr$ r r r __iter__ s zMessage.__iter__c C s dd | j D S )Nc S s g | ]\}}|qS r r )r rz r{ r r r r s z Message.keys.<locals>.<listcomp>)r5 )r; r r r keys s zMessage.keysc s fdd j D S )Nc s g | ]\}} j j||qS r )r4 header_fetch_parse)r rz r{ )r; r r r s z"Message.values.<locals>.<listcomp>)r5 )r; r )r; r values s
zMessage.valuesc s fdd j D S )Nc s"