???<!-- GIF89;a -->
123123123123
.....................................................................................................................................???<!-- GIF89;a -->
123123123123
.....................................................................................................................................3
i              2   @   s  d Z ddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
m
Z
mZmZ ddlmZ yddlZdZW n ek
r   dZY nX ddd	d
ddgZdZdZdZdZdgZdZdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~ddddddddddddddddddd)ZejdZejdZejdZejdejZejdZ ejdZ!ejdZ"ejdejZ#dZ$dZ%ejdZ&G d d dZ'erG d!d" d"e'Z(ej)d" G d#d de'Z*G d$d% d%Z+d&j,d'Z-d(d) e.e-d*d D Z/d+d	 Z0d,d
 Z1d-d Z2d.d Z3e4d/krddl5Z5ddl6Z6ye5j5ej7d*d d0\Z8Z9W n0 e5j:k
rx Z; zf f  Z8Z9W Y ddZ;[;X nX dZ<x@e8D ]8\Z=Z;e=d1kre>e;Zne=d2kre;Z<e9se<fZ9qW e9sdZ9e9d Z?e6j@ ZAe6j6d4eAe?pd5f ZBd6eAd7d8 ZCd9eAeBffdddd@d?ddeCffddddddNf fdOf fdPf fdQf ffZDdDf fdddd@dddeCffdPf fdXf ffZEdYdZ ZFy&e<re*e<ZGne'e?ZGeGjHdkreDd*d ZDeGjId[eGjJ  eGjId\eGjKf  xeDD ]\ZLZ9eFeLe9 qW xJeFdAdD ]<ZMejNd_eMZOeOreOjPd*ZQneMj, d ZQeFd`eQf qW x\eED ]T\ZLZ9eFeLe9ZReLe9fdkr`q<eRd j, ZSeSsvq<eFdTdadbeSd  dcf q<W eTdd W n.   eTde eseTdfej7d    Y nX dS )z2.58    N)datetimetimezone	timedelta)DEFAULT_BUFFER_SIZETFIMAP4IMAP4_streamInternaldate2tupleInt2AP
ParseFlagsTime2Internaldates   
   i  	IMAP4REV1i@B AUTHSELECTEDNONAUTHLOGOUT))APPENDAUTHENTICATE
CAPABILITYCHECKCLOSECOPYCREATEDELETE	DELETEACLENABLEEXAMINEEXPUNGEFETCHGETACLGETANNOTATIONGETQUOTAGETQUOTAROOTMYRIGHTSLISTLOGINr   LSUBZMOVE	NAMESPACENOOPPARTIAL	PROXYAUTHRENAMESEARCHSELECTSETACLSETANNOTATIONSETQUOTASORTSTARTTLSSTATUSSTORE	SUBSCRIBETHREADUIDUNSUBSCRIBEs   \+( (?P<data>.*))?s   .*FLAGS \((?P<flags>[^\)]*)\)s   .*INTERNALDATE "(?P<day>[ 0123][0-9])-(?P<mon>[A-Z][a-z][a-z])-(?P<year>[0-9][0-9][0-9][0-9]) (?P<hour>[0-9][0-9]):(?P<min>[0-9][0-9]):(?P<sec>[0-9][0-9]) (?P<zonen>[-+])(?P<zoneh>[0-9][0-9])(?P<zonem>[0-9][0-9])"s   .*{(?P<size>\d+)}$s
   \r\n|\r|\ns%   \[(?P<type>[A-Z-]+)( (?P<data>.*))?\]s$   \* (?P<type>[A-Z-]+)( (?P<data>.*))?s3   \* (?P<data>\d+) (?P<type>[A-Z-]+)( (?P<data2>.*))?s   [ -]c               @   s  e Zd ZG dd deZG dd deZG dd deZdef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ef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d.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Z d:d; Z!d<d= Z"d>d? Z#d@dA Z$dBdC Z%dDdE Z&dFdG Z'ddJdKZ(dLdM Z)dNdO Z*dPdQ Z+dRdS Z,ddTdUZ-dVdW Z.dXdY Z/dZd[ Z0d\d] Z1d^d_ Z2d`da Z3dbdc Z4ddfdgZ5dhdi Z6djdk Z7dldm Z8dndo Z9ddqdrZ:dsdt Z;dudv Z<dwdx Z=dydz Z>d{d| Z?d}d~ Z@dd ZAdd ZBdd ZCdd ZDdd ZEdd ZFdd ZGdd ZHdd ZIdd ZJdd ZKdd ZLdd ZMdd ZNdpS )r   c               @   s   e Zd ZdS )zIMAP4.errorN)__name__
__module____qualname__ r<   r<   /usr/lib64/python3.6/imaplib.pyerror   s    r>   c               @   s   e Zd ZdS )zIMAP4.abortN)r9   r:   r;   r<   r<   r<   r=   abort   s    r?   c               @   s   e Zd ZdS )zIMAP4.readonlyN)r9   r:   r;   r<   r<   r<   r=   readonly   s    r@    c             C   s   t | _d| _d | _i | _i | _d| _d| _d| _d| _	| j
  | j|| y| j  W n8 tk
r   y| j  W n tk
r   Y nX  Y nX d S )Nr   rA   Fr   )Debugdebugstateliteraltagged_commandsuntagged_responsescontinuation_responseis_readonlytagnum_tls_established_mode_asciiopen_connect	ExceptionshutdownOSError)selfhostportr<   r<   r=   __init__   s&    zIMAP4.__init__c             C   s0   d| _ d| _tjttj| _tjttj| _d S )NFascii)	utf8_enabled	_encodingrecompile_LiteralASCIILiteral_Untagged_statusUntagged_status)rR   r<   r<   r=   rL      s    zIMAP4._mode_asciic             C   s(   d| _ d| _tjt| _tjt| _d S )NTzutf-8)rW   rX   rY   rZ   r[   r]   r^   r_   )rR   r<   r<   r=   
_mode_utf8   s    zIMAP4._mode_utf8c             C   s   t tjdd| _tjd| j d tj| _| j | _	d| j
krHd| _nd| j
krZd| _n| j| j	| j  x tD ]}|| jkrqt|| _d S W | jd	d S )
Ni   i  s   (?P<tag>s"   \d+) (?P<type>[A-Z]+) (?P<data>.*)ZPREAUTHr   OKr   zserver not IMAP4 compliant)r	   randomZrandinttagprerY   rZ   r\   tagre_get_responseZwelcomerG   rD   r>   _get_capabilitiesAllowedVersionscapabilitiesPROTOCOL_VERSION)rR   versionr<   r<   r=   rN      s     




zIMAP4._connectc             C   s&   |t krt| |j S td| d S )NzUnknown IMAP4 command: '%s')CommandsgetattrlowerAttributeError)rR   attrr<   r<   r=   __getattr__	  s    zIMAP4.__getattr__c             C   s   | S )Nr<   )rR   r<   r<   r=   	__enter__  s    zIMAP4.__enter__c             G   s&   y| j   W n tk
r    Y nX d S )N)logoutrQ   )rR   argsr<   r<   r=   __exit__  s    zIMAP4.__exit__c             C   s    | j s
d n| j }tj|| jfS )N)rS   socketZcreate_connectionrT   )rR   rS   r<   r<   r=   _create_socket  s    zIMAP4._create_socketc             C   s(   || _ || _| j | _| jjd| _d S )Nrb)rS   rT   rv   sockmakefilefile)rR   rS   rT   r<   r<   r=   rM   #  s    
z
IMAP4.openc             C   s   | j j|S )N)rz   read)rR   sizer<   r<   r=   r{   /  s    z
IMAP4.readc             C   s.   | j jtd }t|tkr*| jdt |S )N   zgot more than %d bytes)rz   readline_MAXLINElenr>   )rR   liner<   r<   r=   r~   4  s    zIMAP4.readlinec             C   s   | j j| d S )N)rx   Zsendall)rR   datar<   r<   r=   send<  s    z
IMAP4.sendc             C   st   | j j  zXy| jjtj W n@ tk
r^ } z$|jtjkrNt	|dddkrN W Y d d }~X nX W d | jj  X d S )NZwinerrorr   i&'  )
rz   closerx   rP   ru   Z	SHUT_RDWRrQ   errnoZENOTCONNrl   )rR   excr<   r<   r=   rP   A  s    
zIMAP4.shutdownc             C   s   | j S )N)rx   )rR   r<   r<   r=   ru   Q  s    zIMAP4.socketc             C   sB   d}| j dd g|\}}|d r(||fS | j \}}| j |||S )NZRECENTra   r}   )_untagged_responsenoop)rR   nametypdatr<   r<   r=   recent]  s    	zIMAP4.recentc             C   s   | j |d g|j S )N)r   upper)rR   coder<   r<   r=   responsen  s    zIMAP4.responsec             C   sx   d}|sd}|r.|d |d
 fdkr2d| }nd }|r@t |}nd }tjt|}| jrbd| d	 }|| _| j||||S )Nr   INBOXr   r}   ()z(%s)s   UTF8 (   )r   )r   r   )r   MapCRLFsubCRLFrW   rE   _simple_command)rR   mailboxflags	date_timemessager   rE   r<   r<   r=   append|  s    

zIMAP4.appendc             C   sP   |j  }t|j| _| jd|\}}|dkrB| j|d jddd| _||fS )Nr   ra   r}   zutf-8replacer   r   )r   _AuthenticatorprocessrE   r   r>   decoderD   )rR   Z	mechanismZ
authobjectmechr   r   r<   r<   r=   authenticate  s    zIMAP4.authenticatec             C   s    d}| j |\}}| j|||S )Nr   )r   r   )rR   r   r   r   r<   r<   r=   
capability  s    zIMAP4.capabilityc             C   s
   | j dS )Nr   )r   )rR   r<   r<   r=   check  s    zIMAP4.checkc             C   s$   z| j d\}}W d d| _X ||fS )Nr   r   )r   rD   )rR   r   r   r<   r<   r=   r     s    zIMAP4.closec             C   s   | j d||S )Nr   )r   )rR   message_setZnew_mailboxr<   r<   r=   copy  s    z
IMAP4.copyc             C   s   | j d|S )Nr   )r   )rR   r   r<   r<   r=   create  s    zIMAP4.createc             C   s   | j d|S )Nr   )r   )rR   r   r<   r<   r=   delete  s    zIMAP4.deletec             C   s   | j d||S )Nr   )r   )rR   r   whor<   r<   r=   	deleteacl  s    zIMAP4.deleteaclc             C   sH   d| j krtjd| jd|\}}|dkr@d|j kr@| j  ||fS )Nr   zServer does not support ENABLEra   zUTF8=ACCEPT)rh   r   r>   r   r   r`   )rR   r   r   r   r<   r<   r=   enable  s    

zIMAP4.enablec             C   s    d}| j |\}}| j|||S )Nr   )r   r   )rR   r   r   r   r<   r<   r=   expunge  s    	zIMAP4.expungec             C   s$   d}| j |||\}}| j|||S )Nr   )r   r   )rR   r   Zmessage_partsr   r   r   r<   r<   r=   fetch  s    
zIMAP4.fetchc             C   s   | j d|\}}| j||dS )Nr   ZACL)r   r   )rR   r   r   r   r<   r<   r=   getacl  s    zIMAP4.getaclc             C   s"   | j d|||\}}| j||dS )Nr    
ANNOTATION)r   r   )rR   r   entryZ	attributer   r   r<   r<   r=   getannotation#  s    zIMAP4.getannotationc             C   s   | j d|\}}| j||dS )Nr!   QUOTA)r   r   )rR   rootr   r   r<   r<   r=   getquota+  s    zIMAP4.getquotac             C   s@   | j d|\}}| j||d\}}| j||d\}}|||gfS )Nr"   r   Z	QUOTAROOT)r   r   )rR   r   r   r   ZquotaZ	quotarootr<   r<   r=   getquotaroot6  s    zIMAP4.getquotaroot""*c             C   s$   d}| j |||\}}| j|||S )Nr$   )r   r   )rR   	directorypatternr   r   r   r<   r<   r=   listA  s    z
IMAP4.listc             C   s<   | j d|| j|\}}|dkr.| j|d d| _||fS )Nr%   ra   r}   r   r   )r   _quoter>   rD   )rR   userpasswordr   r   r<   r<   r=   loginM  s
    zIMAP4.loginc             C   s   || | _ | _| jd| jS )NzCRAM-MD5)r   r   r   _CRAM_MD5_AUTH)rR   r   r   r<   r<   r=   login_cram_md5[  s    zIMAP4.login_cram_md5c             C   sB   dd l }t| jtr | jjdn| j}| jd |j||dj  S )Nr   zutf-8 Zmd5)hmac
isinstancer   strencoder   ZHMACZ	hexdigest)rR   Z	challenger   pwdr<   r<   r=   r   d  s    zIMAP4._CRAM_MD5_AUTHc             C   sj   d| _ y| jd\}}W n(   ddtj d d  g }}Y nX | j  d| jkrbd| jd fS ||fS )Nr   NOz%s: %s   BYE)rD   r   sysexc_inforP   rG   )rR   r   r   r<   r<   r=   rr   l  s      "
zIMAP4.logoutc             C   s$   d}| j |||\}}| j|||S )Nr&   )r   r   )rR   r   r   r   r   r   r<   r<   r=   lsub|  s    z
IMAP4.lsubc             C   s   | j d|\}}| j||dS )Nr#   )r   r   )rR   r   r   r   r<   r<   r=   myrights  s    zIMAP4.myrightsc             C   s    d}| j |\}}| j|||S )Nr'   )r   r   )rR   r   r   r   r<   r<   r=   	namespace  s    zIMAP4.namespacec             C   s
   | j dS )Nr(   )r   )rR   r<   r<   r=   r     s    z
IMAP4.noopc             C   s(   d}| j |||||\}}| j||dS )Nr)   r   )r   r   )rR   Zmessage_numZmessage_partstartZlengthr   r   r   r<   r<   r=   partial  s    zIMAP4.partialc             C   s   d}| j d|S )Nr*   )r   )rR   r   r   r<   r<   r=   	proxyauth  s    	zIMAP4.proxyauthc             C   s   | j d||S )Nr+   )r   )rR   Z
oldmailboxZ
newmailboxr<   r<   r=   rename  s    zIMAP4.renamec             G   sT   d}|r2| j rtjd| j|d|f| \}}n| j|f| \}}| j|||S )Nr,   z'Non-None charset not valid in UTF8 modeCHARSET)rW   r   r>   r   r   )rR   charsetZcriteriar   r   r   r<   r<   r=   search  s    
zIMAP4.searchr   Fc             C   sx   i | _ || _|rd}nd}| j||\}}|dkr@d| _||fS d| _d| j krd| rd| jd| || j jdd gfS )	Nr   r-   ra   r   r   z	READ-ONLYz%s is not writableEXISTS)rG   rI   r   rD   r@   get)rR   r   r@   r   r   r   r<   r<   r=   select  s    
zIMAP4.selectc             C   s   | j d|||S )Nr.   )r   )rR   r   r   Zwhatr<   r<   r=   setacl  s    zIMAP4.setaclc             G   s    | j d| \}}| j||dS )Nr/   r   )r/   )r   r   )rR   rs   r   r   r<   r<   r=   setannotation  s    zIMAP4.setannotationc             C   s    | j d||\}}| j||dS )Nr0   r   )r   r   )rR   r   Zlimitsr   r   r<   r<   r=   setquota  s    zIMAP4.setquotac             G   sF   d}|d |d fdkr d| }| j |||f| \}}| j|||S )	Nr1   r   r}   r   r   z(%s)r   )r   r   )r   r   )rR   Zsort_criteriar   search_criteriar   r   r   r<   r<   r=   sort  s
    z
IMAP4.sortNc             C   s   d}t s| jd| jr"| jd|| jkr6| jd|d krFtj }| j|\}}|dkr|j| j	| j
d| _	| j	jd| _d| _| j  n
| jd	| j|||S )
Nr2   zSSL support missingzTLS session already establishedzTLS not supported by serverra   )server_hostnamerw   TzCouldn't establish TLS session)HAVE_SSLr>   rK   r?   rh   ssl_create_stdlib_contextr   wrap_socketrx   rS   ry   rz   rf   r   )rR   ssl_contextr   r   r   r<   r<   r=   starttls  s$    





zIMAP4.starttlsc             C   s$   d}| j |||\}}| j|||S )Nr3   )r   r   )rR   r   namesr   r   r   r<   r<   r=   status5  s    zIMAP4.statusc             C   s>   |d |d fd	krd| }| j d|||\}}| j||dS )
Nr   r}   r   r   z(%s)r4   r   r   )r   r   )r   r   )rR   r   commandr   r   r   r<   r<   r=   storeA  s    zIMAP4.storec             C   s   | j d|S )Nr5   )r   )rR   r   r<   r<   r=   	subscribeL  s    zIMAP4.subscribec             G   s*   d}| j |||f| \}}| j|||S )Nr6   )r   r   )rR   Zthreading_algorithmr   r   r   r   r   r<   r<   r=   threadT  s    zIMAP4.threadc             G   s   |j  }|tkr| jd| | jt| krL| jd|| jdjt| f d}| j||f| \}}|d	krt|}nd}| j|||S )
NzUnknown IMAP4 UID command: %sz9command %s illegal in state %s, only allowed in states %sz, r7   r,   r1   r6   r   )r,   r1   r6   )r   rk   r>   rD   joinr   r   )rR   r   rs   r   r   r   r<   r<   r=   uid^  s    z	IMAP4.uidc             C   s   | j d|S )Nr8   )r   )rR   r   r<   r<   r=   unsubscribew  s    zIMAP4.unsubscribec             G   s,   |j  }|tkr| jft|< | j|f| S )N)r   rk   rD   r   )rR   r   rs   r<   r<   r=   xatom  s    
zIMAP4.xatomc             C   s8   |d krd}| j }||kr*|| j| n
|g||< d S )N    )rG   r   )rR   r   r   Zurr<   r<   r=   _append_untagged  s    zIMAP4._append_untaggedc             C   s,   | j jd}|r(| j|d j| jdd S )Nr   r}   r   r   )rG   r   r?   r   rX   )rR   Zbyer<   r<   r=   
_check_bye  s    zIMAP4._check_byec       
      G   s  | j t| kr4d | _| jd|| j djt| f xdD ]}|| jkr:| j|= q:W d| jkrp| j rp| jd| j }t	|| j
}|d | }xJ|D ]B}|d krqt|trt	|| j
}tj|rtd	|d | }qW | j}|d k	r(d | _t|t| jkr|}nd }|t	d
t| | j
 }y| j|t  W n2 tk
rl }	 z| jd|	 W Y d d }	~	X nX |d kr||S xx | j r| j| r|S qW |r|| j}y| j| | jt W n2 tk
r }	 z| jd|	 W Y d d }	~	X nX |s~P q~W |S )Nz9command %s illegal in state %s, only allowed in states %sz, ra   r   BADz	READ-ONLYz#mailbox status changed to READ-ONLY    z*Control characters not allowed in commandsz {%s}zsocket error: %s)ra   r   r   )rD   rk   rE   r>   r   rG   rI   r@   _new_tagbytesrX   r   r   _control_charsr   
ValueErrortype_commandr   r   r   rQ   r?   re   rF   rH   )
rR   r   rs   r   tagr   argrE   Z	literatorvalr<   r<   r=   r     sb    




 


 



 zIMAP4._commandc             C   s   |dkr| j   y| j|\}}W nj | jk
rX } z| jd||f W Y d d }~X n6 | jk
r } z| jd||f W Y d d }~X nX |dkr| j   |dkr| jd|||f ||fS )Nr   zcommand: %s => %sr   z%s command error: %s %s)r   _get_tagged_responser?   r>   )rR   r   r   r   r   r   r<   r<   r=   _command_complete  s    "$zIMAP4._command_completec             C   sJ   | j  \}}|d gkr | jdt|d | j}|j }t|j | _d S )Nz"no CAPABILITY response from serverr}   r   )r   r>   r   rX   r   tuplesplitrh   )rR   r   r   r<   r<   r=   rf   	  s    

zIMAP4._get_capabilitiesc             C   s  | j  }| j| j|rp| jjd}|| jkr:| jd| | jjd}t|| j}| jjd}||gf| j|< nd }| jt	|s| j| j
|r| jjd}| jd kr| jt|r| jjd| _d S | jd| | jjd}t|| j}| jjd}|d krd}|r|d | }xH| j| j|r\t| jjd	}| j|}| j|||f | j  }qW | j|| |dkr| jt|r| jjd}t|| j}| j|| jjd |S )Nr   zunexpected tagged response: %rr   r   Zdata2zunexpected response: %rr   r   r|   ra   r   r   )ra   r   r   )	_get_line_matchrd   mogrouprF   r?   r   rX   Untagged_responser_   ContinuationrH   r]   intr{   r   Response_code)rR   respr   r   r   Zdat2r|   r   r<   r<   r=   re     sH    


  
zIMAP4._get_responsec             C   sd   x^| j | }|d k	r | j |= |S | j  y| j  W q | jk
rZ } z W Y d d }~X qX qW d S )N)rF   r   re   r?   )rR   r   resultr   r<   r<   r=   r   b  s    
zIMAP4._get_tagged_responsec             C   s>   | j  }|s| jd|jds.| jd| |d d }|S )Nzsocket error: EOFs   
z#socket error: unterminated line: %rr   )r~   r?   endswith)rR   r   r<   r<   r=   r  }  s    

zIMAP4._get_linec             C   s   |j || _| jd k	S )N)matchr  )rR   Zcresr<   r<   r=   r    s    zIMAP4._matchc             C   s2   | j tt| j| j }| jd | _d | j|< |S )Nr}   )rc   r   r   rJ   rX   rF   )rR   r   r<   r<   r=   r     s    
zIMAP4._new_tagc             C   s$   |j dd}|j dd}d| d S )N\z\\"z\")r   )rR   r   r<   r<   r=   r     s    zIMAP4._quotec             G   s   | j || j|f| S )N)r   r   )rR   r   rs   r<   r<   r=   r     s    zIMAP4._simple_commandc             C   s8   |dkr||fS || j kr$|d gfS | j j|}||fS )Nr   )rG   pop)rR   r   r   r   r   r<   r<   r=   r     s    

zIMAP4._untagged_response)r   r   )r   r   )r   F)N)Or9   r:   r;   rO   r>   r?   r@   
IMAP4_PORTrU   rL   r`   rN   rp   rq   rt   rv   rM   r{   r~   r   rP   ru   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rf   re   r   r  r  r   r   r   r   r<   r<   r<   r=   r      s   .*
		
	


 	

O	Pc               @   s6   e Zd ZdedddfddZdd ZdefddZdS )		IMAP4_SSLrA   Nc             C   s   |d k	r|d k	rt d|d k	r0|d k	r0t d|d k	s@|d k	rVdd l}|jdtd || _|| _|d krxtj||d}|| _t	j
| || d S )Nz8ssl_context and keyfile arguments are mutually exclusivez9ssl_context and certfile arguments are mutually exclusiver   zEkeyfile and certfile are deprecated, use a custom ssl_context insteadr   )certfilekeyfile)r   warningswarnDeprecationWarningr  r  r   r   r   r   rU   )rR   rS   rT   r  r  r   r  r<   r<   r=   rU     s    zIMAP4_SSL.__init__c             C   s   t j| }| jj|| jdS )N)r   )r   rv   r   r   rS   )rR   rx   r<   r<   r=   rv     s    
zIMAP4_SSL._create_socketc             C   s   t j| || d S )N)r   rM   )rR   rS   rT   r<   r<   r=   rM     s    zIMAP4_SSL.open)r9   r:   r;   IMAP4_SSL_PORTrU   rv   rM   r<   r<   r<   r=   r    s   r  c               @   s>   e Zd Zdd ZdddZdd Zdd	 Zd
d Zdd ZdS )r   c             C   s   || _ tj|  d S )N)r   r   rU   )rR   r   r<   r<   r=   rU   (  s    zIMAP4_stream.__init__Nc             C   sN   d | _ d | _d | _d | _tj| jttjtjddd| _	| j	j
| _| j	j| _d S )NT)bufsizestdinstdoutshellZ	close_fds)rS   rT   rx   rz   
subprocessPopenr   r   PIPEr   r  	writefiler  readfile)rR   rS   rT   r<   r<   r=   rM   -  s    
zIMAP4_stream.openc             C   s   | j j|S )N)r#  r{   )rR   r|   r<   r<   r=   r{   =  s    zIMAP4_stream.readc             C   s
   | j j S )N)r#  r~   )rR   r<   r<   r=   r~   B  s    zIMAP4_stream.readlinec             C   s   | j j| | j j  d S )N)r"  writeflush)rR   r   r<   r<   r=   r   G  s    zIMAP4_stream.sendc             C   s"   | j j  | jj  | jj  d S )N)r#  r   r"  r   wait)rR   r<   r<   r=   rP   M  s    

zIMAP4_stream.shutdown)NN)	r9   r:   r;   rU   rM   r{   r~   r   rP   r<   r<   r<   r=   r     s   
c               @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
r   c             C   s
   || _ d S )N)r   )rR   Zmechinstr<   r<   r=   rU   [  s    z_Authenticator.__init__c             C   s&   | j | j|}|d krdS | j|S )N   *)r   r   r   )rR   r   Zretr<   r<   r=   r   ^  s    z_Authenticator.processc             C   sr   d}t |tr|jd}xT|rlt|dkrD|d d }|dd  }n|}d}tj|}|r||d d  }qW |S )Nr   zutf-80   r}   r   )r   r   r   r   binasciiZ
b2a_base64)rR   inpZoupter<   r<   r=   r   d  s    	


z_Authenticator.encodec             C   s   |sdS t j|S )Nr   )r)  Z
a2b_base64)rR   r*  r<   r<   r=   r   |  s    z_Authenticator.decodeN)r9   r:   r;   rU   r   r   r   r<   r<   r<   r=   r   U  s   r   z0 Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Decr   c             C   s   i | ]\}}|d  |j  qS )r}   )r   ).0nr  r<   r<   r=   
<dictcomp>  s    r/  r}   c          	   C   s   t j| }|sd S t|jd }|jd}t|jd}t|jd}t|jd}t|jd}t|jd}t|jd}	t|jd	}
|	d
 |
 d
 }|dkr| }||||||dddf	}tj|| }tj|S )Nmonzonendayyearhourminseczonehzonem<      -r}   r   r   r   )	InternalDater  Mon2numr  r  calendarZtimegmtime	localtime)r
  r  r0  r1  r2  r3  r4  r5  r6  r7  r8  ZzoneZttutcr<   r<   r=   r     s$    

c             C   sD   d}d}t t| } x*| r>t| d\} }|||d  | }qW |S )Nr   s   ABCDEFGHIJKLMNOP   r}   )r  absdivmod)Znumr   ZAPmodr<   r<   r=   r	     s     c             C   s$   t j| }|sf S t|jdj S )Nr   )Flagsr  r   r  r  )r
  r  r<   r<   r=   r
     s    
c             C   s   t | ttfr"tj| tjj }nt | try
| j	}W nZ t
k
r   tjr| d }|dkrptjtj| d }tjtjf|  }ntj }Y nX t|d}t| d d dt|i}nNt | tr| jd krtd| }n,t | to| d | d fdk r| S td	d
jt|j }|j|S )N   r}   )Zseconds   tzinfozdate_time must be awarer   r  zdate_time not of a known typez"%d-{}-%Y %H:%M:%S %z"r   r   )r  r  )r   r  floatr   Zfromtimestampr   r@  Z
astimezoner   Z	tm_gmtoffrn   r>  Zdaylightr?  ZmktimeZaltzoner   rH  r   r   formatMonthsZmonthZstrftime)r   ZdtZgmtoffdstZdeltaZfmtr<   r<   r=   r     s0    




 __main__zd:s:z-dz-srA   zIMAP password for %s on %s: Z	localhostzJFrom: %(user)s@localhost%(lf)sSubject: IMAP4 test%(lf)s%(lf)sdata...%(lf)s
)r   Zlfr   r   
/tmp/xxx 1r   /tmp/yyyr   
/tmp/yyz 2r   r   /tmpyy*r   r   SUBJECTtestr   1(FLAGS INTERNALDATE RFC822)r   FLAGS
(\Deleted)r   r   r   r   r   UIDVALIDITYr   r,   ALLr   rr   c             C   sL   t jd| |f  tt | | \}}t jd| ||f  |dkrH|d |S )Nz%s %sz%s => %s %sr   r   )M_mesgrl   )cmdrs   r   r   r<   r<   r=   run   s     r_  zPROTOCOL_VERSION = %szCAPABILITIES = %r/tmp/yy%z.*"([^"]+)"$r   r   z%sz:(FLAGS INTERNALDATE RFC822.SIZE RFC822.HEADER RFC822.TEXT)z
All tests OK.z
Tests failed.z8
If you would like to see debugging output,
try: %s -d5
)r   r   )r   r   )r   )r   r   r   r   )r   )r   )r   )r   r   )r   r   )r   r   )r   )r   r   )r   )r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   )r   r   r   r   )r   r   )r   )r   r   )r   r   r   r   )r   )r   )r   r   )r   )r   r   )r   r   )r   r   )r   r   )r   )r   )r   r   )r   )r   r   )r   )r   )r   r   )rA   rO  )r   rb  rO  rP  )r   rc  rQ  )r   rd  rR  rS  )r   re  rQ  )r   rf  NrT  rU  )r   rg  rV  rW  )r   rh  rV  rX  rY  )r   ri  rZ  )r   rj  r,   r[  )r   rk  r   )r   rl  )r`  ra  r   r,   r[  )r   rm  r   r   )U__version__r)  r   rb   rY   ru   r  r   r>  r=  r   r   r   ior   r   r   ImportError__all__r   rB   r  r  rg   r   rk   rZ   r  rE  r;  r\   r]   r   r	  r  r_   r[   r^   r   r   r  r   r   r   r  rK  	enumerater<  r   r	   r
   r   r9   ZgetoptZgetpassargvZoptlistrs   r>   r   Zstream_commandoptr  rS   ZgetuserZUSERZPASSWDZ	test_mesgZ	test_seq1Z	test_seq2r_  r\  rD   r]  ri   rh   r^  Zmlr  r  r  pathr   r   printr<   r<   r<   r=   <module>   sF  H

	



	



        e4
9,
#)



  



 
 