???<!-- GIF89;a -->
123123123123
.....................................................................................................................................???<!-- GIF89;a -->
123123123123
.....................................................................................................................................U
    e5dfÑ  ã                *   @   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 z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dZdZddddddddddddddddddddddddddddddddddddddddddœ)Ze d¡Ze d¡Ze d¡Ze dej¡Ze d¡Z e d¡Z!e d¡Z"e dej¡Z#dZ$dZ%G d d„ dƒZ&er¤G d!d"„ d"e&ƒZ'e (d"¡ G d#d„ de&ƒZ)G d$d%„ d%ƒZ*d& +d'¡Z,d(d)„ e-e,d*d… ƒD ƒZ.d+d	„ Z/d,d
„ Z0d-d„ Z1d.d„ Z2e3d/kr–ddl4Z4ddl5Z5ze4 4ej6d*d… d0¡\Z7Z8W n. e4j9k
rl Z: zd1\Z7Z8W 5 dZ:[:X Y nX dZ;e7D ]8\Z<Z:e<d2kr’e=e:ƒZne<d3krve:Z;e8sve;fZ8qve8sºd4Z8e8d Z>e5 ?¡ Z@e5 5d5e@e>pÚd6f ¡ZAd7e@d8d9œ ZBd:e@eAffd;d<d=d>d?ddeBffd@dAdBdCdDdEdFdGdHfZCdIdJdKdLd>dddeBffdGdMfZDdNdO„ ZEze;r^e)e;ƒZFne&e>ƒZFeFjGdPkr~eCd*d… ZCeF HdQeFjI ¡ eF HdReFjJf ¡ eCD ]\ZKZ8eEeKe8ƒ q¤eEdSdTƒD ]<ZLe MdUeL¡ZNeNræeN Od*¡ZPneL +¡ dV ZPeEdWePfƒ qÄeDD ]T\ZKZ8eEeKe8ƒZQeKe8fdKkr*qeQdV  +¡ ZReRs@qeEdXdYdZeRdV  d[fƒ qeSd\ƒ W n.   eSd]ƒ esŽeSd^ej6d  ƒ ‚ Y nX dS )_z2.58é    N)ÚdatetimeÚtimezoneÚ	timedelta)ÚDEFAULT_BUFFER_SIZETFÚIMAP4ÚIMAP4_streamÚInternaldate2tupleÚInt2APÚ
ParseFlagsÚTime2Internaldateó   
é   iá  )Z	IMAP4REV1r   i@B )ÚAUTHÚSELECTED)ÚNONAUTH)r   r   r   ÚLOGOUT)r   )r   ))Ú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>.*))?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'd›dJdK„Z(dLdM„ Z)dNdO„ Z*dPdQ„ Z+dRdS„ Z,dœdTdU„Z-dVdW„ Z.dXdY„ Z/dZd[„ Z0d\d]„ Z1d^d_„ Z2d`da„ Z3dbdc„ Z4ddfdg„Z5dhdi„ Z6djdk„ Z7dldm„ Z8dndo„ Z9dždqdr„Z:dsdt„ Z;dudv„ Z<dwdx„ Z=dydz„ Z>d{d|„ Z?d}d~„ Z@dd€„ ZAdd‚„ ZBdƒd„„ ZCd…d†„ ZDd‡dˆ„ ZEd‰dŠ„ ZFd‹dŒ„ ZGdŸddŽ„ZHdd„ ZId‘d’„ ZJd“d”„ ZKd•d–„ ZLd—d˜„ ZMd™dš„ ZNdpS ) r   c                   @   s   e Zd ZdS )zIMAP4.errorN©Ú__name__Ú
__module__Ú__qualname__© r=   r=   ú/usr/lib64/python3.8/imaplib.pyÚerror´   s    r?   c                   @   s   e Zd ZdS )zIMAP4.abortNr9   r=   r=   r=   r>   Úabortµ   s    r@   c                   @   s   e Zd ZdS )zIMAP4.readonlyNr9   r=   r=   r=   r>   Úreadonly¶   s    rA   Ú c                 C   s”   t | _d| _d | _i | _i | _d| _d| _d| _d| _	|  
¡  |  ||¡ z|  ¡  W n8 tk
rŽ   z|  ¡  W n tk
r†   Y nX ‚ Y nX d S )Nr   rB   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 ttj¡| _t ttj¡| _d S )NFÚascii)	Úutf8_enabledÚ	_encodingÚreÚcompileÚ_LiteralÚASCIIÚLiteralÚ_Untagged_statusÚUntagged_status©rT   r=   r=   r>   rM   Ñ   s    zIMAP4._mode_asciic                 C   s(   d| _ d| _t t¡| _t t¡| _d S )NTúutf-8)rY   rZ   r[   r\   r]   r_   r`   ra   rb   r=   r=   r>   Ú
_mode_utf8Ø   s    zIMAP4._mode_utf8c                 C   sœ   t t dd¡ƒ| _t d| j d tj¡| _|  	¡ | _
d| jkrHd| _nd| jkrZd| _n|  | j
¡‚|  ¡  tD ]}|| jkr‚qr|| _ d S |  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Útagprer[   r\   r^   ÚtagreÚ__version__Ú_get_responseZwelcomerH   rE   r?   Ú_get_capabilitiesÚAllowedVersionsÚcapabilitiesÚPROTOCOL_VERSION)rT   Úversionr=   r=   r>   rO   ß   s*    ÿþþ



zIMAP4._connectc                 C   s&   |t krt| | ¡ ƒS td| ƒ‚d S )NzUnknown IMAP4 command: '%s')ÚCommandsÚgetattrÚlowerÚAttributeError)rT   Úattrr=   r=   r>   Ú__getattr__	  s    zIMAP4.__getattr__c                 C   s   | S ©Nr=   rb   r=   r=   r>   Ú	__enter__  s    zIMAP4.__enter__c                 G   s4   | j dkrd S z|  ¡  W n tk
r.   Y nX d S ©Nr   )rE   ÚlogoutrR   )rT   Úargsr=   r=   r>   Ú__exit__  s    
zIMAP4.__exit__c                 C   s4   | j s
d n| j }t d| | j | j¡ t || jf¡S )Nzimaplib.open)rU   ÚsysÚauditrV   ÚsocketZcreate_connection)rT   rU   r=   r=   r>   Ú_create_socket  s    zIMAP4._create_socketc                 C   s(   || _ || _|  ¡ | _| j d¡| _d S )NÚrb)rU   rV   r   ÚsockÚmakefileÚfilerS   r=   r=   r>   rN   '  s    
z
IMAP4.openc                 C   s   | j  |¡S rv   )rƒ   Úread©rT   Úsizer=   r=   r>   r„   3  s    z
IMAP4.readc                 C   s.   | j  td ¡}t|ƒtkr*|  dt ¡‚|S )Né   zgot more than %d bytes)rƒ   ÚreadlineÚ_MAXLINEÚlenr?   ©rT   Úliner=   r=   r>   rˆ   8  s    zIMAP4.readlinec                 C   s   t  d| |¡ | j |¡ d S )Nzimaplib.send)r|   r}   r   Zsendall©rT   Údatar=   r=   r>   Úsend@  s    z
IMAP4.sendc              
   C   st   | j  ¡  zXz| j tj¡ W n@ tk
r^ } z"|jtjkrNt	|ddƒdkrN‚ W 5 d }~X Y nX W 5 | j ¡  X d S )NZwinerrorr   i&'  )
rƒ   Úcloser   rQ   r~   Z	SHUT_RDWRrR   ÚerrnoZENOTCONNrq   )rT   Úexcr=   r=   r>   rQ   F  s    
ÿzIMAP4.shutdownc                 C   s   | j S rv   )r   rb   r=   r=   r>   r~   V  s    zIMAP4.socketc                 C   sB   d}|   dd g|¡\}}|d r(||fS |  ¡ \}}|   |||¡S )NZRECENTre   éÿÿÿÿ)Ú_untagged_responseÚnoop©rT   ÚnameÚtypÚdatr=   r=   r>   Úrecentb  s    	zIMAP4.recentc                 C   s   |   |d g| ¡ ¡S rv   )r”   Úupper)rT   Úcoder=   r=   r>   Úresponses  s    zIMAP4.responsec                 C   sx   d}|sd}|r.|d |d fdkr2d| }nd }|r@t |ƒ}nd }t t|¡}| jrbd| d }|| _|  ||||¡S )	Nr   ÚINBOXr   r“   ©ú(ú)ú(%s)s   UTF8 (ó   ))r   ÚMapCRLFÚsubÚCRLFrY   rF   Ú_simple_command)rT   ÚmailboxÚflagsÚ	date_timeÚmessager—   rF   r=   r=   r>   Úappend  s    

zIMAP4.appendc                 C   sP   |  ¡ }t|ƒj| _|  d|¡\}}|dkrB|  |d  dd¡¡‚d| _||fS )Nr   re   r“   rc   Úreplacer   )r›   Ú_AuthenticatorÚprocessrF   r§   r?   ÚdecoderE   )rT   Z	mechanismZ
authobjectÚmechr˜   r™   r=   r=   r>   Úauthenticate›  s    zIMAP4.authenticatec                 C   s    d}|   |¡\}}|  |||¡S )Nr   ©r§   r”   r–   r=   r=   r>   Ú
capability¸  s    zIMAP4.capabilityc                 C   s
   |   d¡S )Nr   ©r§   rb   r=   r=   r>   ÚcheckÁ  s    zIMAP4.checkc                 C   s$   z|  d¡\}}W 5 d| _ X ||fS )Nr   r   )rE   r§   ©rT   r˜   r™   r=   r=   r>   r   É  s    zIMAP4.closec                 C   s   |   d||¡S )Nr   rµ   )rT   Úmessage_setZnew_mailboxr=   r=   r>   ÚcopyØ  s    z
IMAP4.copyc                 C   s   |   d|¡S )Nr   rµ   ©rT   r¨   r=   r=   r>   Úcreateà  s    zIMAP4.createc                 C   s   |   d|¡S )Nr   rµ   rº   r=   r=   r>   Údeleteè  s    zIMAP4.deletec                 C   s   |   d||¡S )Nr   rµ   )rT   r¨   Úwhor=   r=   r>   Ú	deleteaclï  s    zIMAP4.deleteaclc                 C   sH   d| j krt d¡‚|  d|¡\}}|dkr@d| ¡ kr@|  ¡  ||fS )Nr   zServer does not support ENABLEre   zUTF8=ACCEPT)rm   r   r?   r§   r›   rd   )rT   r´   r˜   rŽ   r=   r=   r>   Úenableö  s    

zIMAP4.enablec                 C   s    d}|   |¡\}}|  |||¡S )Nr   r³   r–   r=   r=   r>   Úexpunge  s    	zIMAP4.expungec                 C   s$   d}|   |||¡\}}|  |||¡S )Nr   r³   )rT   r¸   Zmessage_partsr—   r˜   r™   r=   r=   r>   Úfetch  s    
zIMAP4.fetchc                 C   s   |   d|¡\}}|  ||d¡S )Nr   ZACLr³   ©rT   r¨   r˜   r™   r=   r=   r>   Úgetacl  s    zIMAP4.getaclc                 C   s"   |   d|||¡\}}|  ||d¡S )Nr    Ú
ANNOTATIONr³   )rT   r¨   ÚentryZ	attributer˜   r™   r=   r=   r>   Úgetannotation(  s    zIMAP4.getannotationc                 C   s   |   d|¡\}}|  ||d¡S )Nr!   ÚQUOTAr³   )rT   Úrootr˜   r™   r=   r=   r>   Úgetquota0  s    zIMAP4.getquotac                 C   s@   |   d|¡\}}|  ||d¡\}}|  ||d¡\}}|||gfS )Nr"   rÇ   Z	QUOTAROOTr³   )rT   r¨   r˜   r™   ZquotaZ	quotarootr=   r=   r>   Úgetquotaroot;  s    zIMAP4.getquotarootú""Ú*c                 C   s$   d}|   |||¡\}}|  |||¡S )Nr$   r³   ©rT   Z	directoryÚpatternr—   r˜   r™   r=   r=   r>   ÚlistF  s    z
IMAP4.listc                 C   s<   |   d||  |¡¡\}}|dkr.|  |d ¡‚d| _||fS )Nr%   re   r“   r   )r§   Ú_quoter?   rE   )rT   ÚuserÚpasswordr˜   r™   r=   r=   r>   ÚloginR  s
    zIMAP4.loginc                 C   s   || | _ | _|  d| j¡S )NzCRAM-MD5)rÑ   rÒ   r²   Ú_CRAM_MD5_AUTH)rT   rÑ   rÒ   r=   r=   r>   Úlogin_cram_md5`  s    zIMAP4.login_cram_md5c                 C   sB   dd l }t| jtƒr | j d¡n| j}| jd | ||d¡ ¡  S )Nr   rc   ú Zmd5)ÚhmacÚ
isinstancerÒ   ÚstrÚencoderÑ   ZHMACZ	hexdigest)rT   Z	challenger×   Úpwdr=   r=   r>   rÔ   i  s
    ÿzIMAP4._CRAM_MD5_AUTHc                 C   s$   d| _ |  d¡\}}|  ¡  ||fS rx   )rE   r§   rQ   r·   r=   r=   r>   ry   q  s    zIMAP4.logoutc                 C   s$   d}|   |||¡\}}|  |||¡S )Nr&   r³   rÍ   r=   r=   r>   Úlsub~  s    z
IMAP4.lsubc                 C   s   |   d|¡\}}|  ||d¡S )Nr#   r³   rÂ   r=   r=   r>   Úmyrights‰  s    zIMAP4.myrightsc                 C   s    d}|   |¡\}}|  |||¡S )Nr'   r³   r–   r=   r=   r>   Ú	namespace‘  s    zIMAP4.namespacec                 C   s
   |   d¡S )Nr(   rµ   rb   r=   r=   r>   r•   ›  s    z
IMAP4.noopc                 C   s(   d}|   |||||¡\}}|  ||d¡S )Nr)   r   r³   )rT   Zmessage_numZmessage_partÚstartZlengthr—   r˜   r™   r=   r=   r>   Úpartial¦  s    zIMAP4.partialc                 C   s   d}|   d|¡S )Nr*   rµ   )rT   rÑ   r—   r=   r=   r>   Ú	proxyauth²  s    	zIMAP4.proxyauthc                 C   s   |   d||¡S )Nr+   rµ   )rT   Z
oldmailboxZ
newmailboxr=   r=   r>   Úrename¿  s    zIMAP4.renamec                 G   sT   d}|r2| j rt d¡‚| j|d|f|žŽ \}}n| j|f|žŽ \}}|  |||¡S )Nr,   z'Non-None charset not valid in UTF8 modeÚCHARSET)rY   r   r?   r§   r”   )rT   ÚcharsetZcriteriar—   r˜   r™   r=   r=   r>   ÚsearchÇ  s    
zIMAP4.searchrž   Fc                 C   sv   i | _ || _|rd}nd}|  ||¡\}}|dkr@d| _||fS d| _d| j krb|sb|  d| ¡‚|| j  dd g¡fS )	Nr   r-   re   r   r   ú	READ-ONLYz%s is not writableÚEXISTS)rH   rJ   r§   rE   rA   Úget)rT   r¨   rA   r—   r˜   r™   r=   r=   r>   ÚselectÙ  s    
ÿzIMAP4.selectc                 C   s   |   d|||¡S )Nr.   rµ   )rT   r¨   r½   Zwhatr=   r=   r>   Úsetaclù  s    zIMAP4.setaclc                 G   s    | j d|žŽ \}}|  ||d¡S )Nr/   rÄ   )r/   r³   )rT   rz   r˜   r™   r=   r=   r>   Úsetannotation  s    zIMAP4.setannotationc                 C   s    |   d||¡\}}|  ||d¡S )Nr0   rÇ   r³   )rT   rÈ   Zlimitsr˜   r™   r=   r=   r>   Úsetquota	  s    zIMAP4.setquotac                 G   sF   d}|d |d fdkr d| }| j |||f|žŽ \}}|  |||¡S )Nr1   r   r“   rŸ   r¢   r³   )rT   Zsort_criteriarä   Úsearch_criteriar—   r˜   r™   r=   r=   r>   Úsort  s
    z
IMAP4.sortNc                 C   s¦   d}t s|  d¡‚| jr"|  d¡‚|| jkr6|  d¡‚|d krFt ¡ }|  |¡\}}|dkrŽ|j| j	| j
d| _	| j	 d¡| _d| _|  ¡  n
|  d	¡‚|  |||¡S )
Nr2   zSSL support missingzTLS session already establishedzTLS not supported by serverre   ©Zserver_hostnamer€   TzCouldn't establish TLS session)ÚHAVE_SSLr?   rL   r@   rm   ÚsslÚ_create_stdlib_contextr§   Úwrap_socketr   rU   r‚   rƒ   rk   r”   )rT   Ússl_contextr—   r˜   r™   r=   r=   r>   Ústarttls   s&    



ÿ

zIMAP4.starttlsc                 C   s$   d}|   |||¡\}}|  |||¡S )Nr3   r³   )rT   r¨   Únamesr—   r˜   r™   r=   r=   r>   Ústatus7  s    zIMAP4.statusc                 C   s>   |d |d fdkrd| }|   d|||¡\}}|  ||d¡S )Nr   r“   rŸ   r¢   r4   r   r³   )rT   r¸   Úcommandr©   r˜   r™   r=   r=   r>   ÚstoreC  s    zIMAP4.storec                 C   s   |   d|¡S )Nr5   rµ   rº   r=   r=   r>   Ú	subscribeN  s    zIMAP4.subscribec                 G   s*   d}| j |||f|žŽ \}}|  |||¡S )Nr6   r³   )rT   Zthreading_algorithmrä   rí   r—   r˜   r™   r=   r=   r>   ÚthreadV  s    zIMAP4.threadc              	   G   s†   |  ¡ }|tkr|  d| ¡‚| jt| krL|  d|| jd t| ¡f ¡‚d}| j||f|žŽ \}}|dkrt|}nd}|  |||¡S )NzUnknown IMAP4 UID command: %sú9command %s illegal in state %s, only allowed in states %sú, r7   )r,   r1   r6   r   )r›   rp   r?   rE   Újoinr§   r”   )rT   rø   rz   r—   r˜   r™   r=   r=   r>   Úuid`  s    ÿþz	IMAP4.uidc                 C   s   |   d|¡S )Nr8   rµ   rº   r=   r=   r>   Úunsubscribey  s    zIMAP4.unsubscribec                 G   s,   |  ¡ }|tkr| jft|< | j|f|žŽ S rv   )r›   rp   rE   r§   ©rT   r—   rz   r=   r=   r>   Úxatom  s    
zIMAP4.xatomc                 C   s8   |d krd}| j }||kr*||  |¡ n
|g||< d S ©Nó    )rH   rŠ   r¬   )rT   r˜   r™   Zurr=   r=   r>   Ú_append_untagged—  s    zIMAP4._append_untaggedc                 C   s,   | j  d¡}|r(|  |d  | jd¡¡‚d S )NÚBYEr“   r­   )rH   rè   r@   r°   rZ   )rT   Úbyer=   r=   r>   Ú
_check_bye¥  s    zIMAP4._check_byec           
   
   G   sê  | j t| kr4d | _|  d|| j d t| ¡f ¡‚dD ]}|| jkr8| j|= q8d| jkrj| jsj|  d¡‚|  ¡ }t	|| j
ƒ}|d | }|D ]0}|d krœqŽt|tƒr²t	|| j
ƒ}|d | }qŽ| j}|d k	r
d | _t|ƒt| jƒkrî|}nd }|t	dt|ƒ | j
ƒ }z|  |t ¡ W n2 tk
rN }	 z|  d|	 ¡‚W 5 d }	~	X Y nX |d kr^|S |  ¡ r|| j| r^|S q^|rŒ|| jƒ}z|  |¡ |  t¡ W n2 tk
rÖ }	 z|  d|	 ¡‚W 5 d }	~	X Y nX |s^qæq^|S )	Nrü   rý   ©re   ÚNOÚBADræ   z#mailbox status changed to READ-ONLYó    z {%s}zsocket error: %s)rE   rp   rF   r?   rþ   rH   rJ   rA   Ú_new_tagÚbytesrZ   rØ   rÙ   ÚtypeÚ_commandrŠ   r   r¦   rR   r@   rj   rG   rI   )
rT   r—   rz   r˜   ÚtagrŽ   ÚargrF   Z	literatorÚvalr=   r=   r>   r  «  sb    ÿþ


ÿ
 

 



 zIMAP4._commandc              
   C   sÆ   |dk}|s|   ¡  z| j||d\}}W nj | jk
r` } z|  d||f ¡‚W 5 d }~X Y n6 | jk
r” } z|  d||f ¡‚W 5 d }~X Y nX |s¢|   ¡  |dkr¾|  d|||f ¡‚||fS )Nr   )Ú
expect_byezcommand: %s => %sr  z%s command error: %s %s)r  Ú_get_tagged_responser@   r?   )rT   r—   r  ry   r˜   rŽ   r  r=   r=   r>   Ú_command_completeø  s    "$zIMAP4._command_completec                 C   sJ   |   ¡ \}}|d gkr |  d¡‚t|d | jƒ}| ¡ }t| ¡ ƒ| _d S )Nz"no CAPABILITY response from serverr“   )r´   r?   rÙ   rZ   r›   ÚtupleÚsplitrm   r·   r=   r=   r>   rk   
  s    

zIMAP4._get_capabilitiesc                 C   s®  |   ¡ }|  | j|¡rp| j d¡}|| jkr:|  d| ¡‚| j d¡}t|| jƒ}| j d¡}||gf| j|< nöd }|  t	|¡sš|  | j
|¡rš| j d¡}| jd krÐ|  t|¡rÂ| j d¡| _d S |  d| ¡‚| j d¡}t|| jƒ}| j d¡}|d krd}|r|d | }|  | j|¡rZt| j d	¡ƒ}|  |¡}|  |||f¡ |   ¡ }q|  ||¡ |d
krª|  t|¡rª| j d¡}t|| jƒ}|  || j d¡¡ |S )Nr  zunexpected tagged response: %rr  rŽ   Zdata2zunexpected response: %rr  r  r†   r	  )Ú	_get_lineÚ_matchrh   ÚmoÚgrouprG   r@   rÙ   rZ   ÚUntagged_responsera   ÚContinuationrI   r_   Úintr„   r  ÚResponse_code)rT   Úrespr  r˜   r™   Zdat2r†   rŽ   r=   r=   r>   rj     sH    


  
zIMAP4._get_responsec              
   C   s†   | j | }|d k	r| j |= |S |rDd}| j |d ¡}|d k	rD||fS |  ¡  z|  ¡  W q  | jk
r~ } z‚ W 5 d }~X Y q X q d S )Nr  )rG   rH   Úpopr  rj   r@   )rT   r  r  Úresultr˜   r  r  r=   r=   r>   r  c  s    
zIMAP4._get_tagged_responsec                 C   s>   |   ¡ }|s|  d¡‚| d¡s.|  d| ¡‚|d d… }|S )Nzsocket error: EOFr   z#socket error: unterminated line: %réþÿÿÿ)rˆ   r@   Úendswithr‹   r=   r=   r>   r  „  s    

zIMAP4._get_linec                 C   s   |  |¡| _| jd k	S rv   )Úmatchr  )rT   ZcreÚsr=   r=   r>   r  —  s    zIMAP4._matchc                 C   s2   | j tt| jƒ| jƒ }| jd | _d | j|< |S )Nr‡   )rg   r  rÙ   rK   rZ   rG   )rT   r  r=   r=   r>   r  £  s    
zIMAP4._new_tagc                 C   s$   |  dd¡}|  dd¡}d| d S )Nú\z\\ú"z\")r­   )rT   r  r=   r=   r>   rÐ   «  s    zIMAP4._quotec                 G   s   |   || j|f|žŽ ¡S rv   )r  r  r  r=   r=   r>   r§   ³  s    zIMAP4._simple_commandc                 C   s8   |dkr||fS || j kr$|d gfS | j  |¡}||fS )Nr
  )rH   r"  )rT   r˜   r™   r—   rŽ   r=   r=   r>   r”   ¸  s    

zIMAP4._untagged_response)rË   rÌ   )rË   rÌ   )rž   F)N)F)Sr:   r;   r<   rP   r?   r@   rA   Ú
IMAP4_PORTrW   rM   rd   rO   ru   rw   r{   r   rN   r„   rˆ   r   rQ   r~   rš   r   r¬   r²   r´   r¶   r   r¹   r»   r¼   r¾   r¿   rÀ   rÁ   rÃ   rÆ   rÉ   rÊ   rÏ   rÓ   rÕ   rÔ   ry   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  rk   rj   r  r  r  r  rÐ   r§   r”   Ú_mesgZ_dump_urZ_logZ	print_logr=   r=   r=   r>   r   †   s–   .*		
	


 	

M	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_SSLrB   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}| dtd¡ || _|| _|d krxtj||d}|| _t	 
| ||¡ 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 insteadé   )ÚcertfileÚkeyfile)Ú
ValueErrorÚwarningsÚwarnÚDeprecationWarningr/  r.  rñ   rò   rô   r   rW   )rT   rU   rV   r/  r.  rô   r1  r=   r=   r>   rW   ÿ  s$     ÿÿzIMAP4_SSL.__init__c                 C   s   t  | ¡}| jj|| jdS )Nrï   )r   r   rô   ró   rU   )rT   r   r=   r=   r>   r     s    
ÿzIMAP4_SSL._create_socketc                 C   s   t  | ||¡ d S rv   )r   rN   rS   r=   r=   r>   rN     s    zIMAP4_SSL.open)r:   r;   r<   ÚIMAP4_SSL_PORTrW   r   rN   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 | ¡ d S rv   )rø   r   rW   )rT   rø   r=   r=   r>   rW   /  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)rU   rV   r   rƒ   Ú
subprocessÚPopenrø   r   ÚPIPEr¯   r6  Ú	writefiler7  ÚreadfilerS   r=   r=   r>   rN   4  s      ý
zIMAP4_stream.openc                 C   s   | j  |¡S rv   )r=  r„   r…   r=   r=   r>   r„   D  s    zIMAP4_stream.readc                 C   s
   | j  ¡ S rv   )r=  rˆ   rb   r=   r=   r>   rˆ   I  s    zIMAP4_stream.readlinec                 C   s   | j  |¡ | j  ¡  d S rv   )r<  ÚwriteÚflushr   r=   r=   r>   r   N  s    zIMAP4_stream.sendc                 C   s"   | j  ¡  | j ¡  | j ¡  d S rv   )r=  r   r<  r¯   Úwaitrb   r=   r=   r>   rQ   T  s    

zIMAP4_stream.shutdown)NN)	r:   r;   r<   rW   rN   r„   rˆ   r   rQ   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 rv   )r±   )rT   Zmechinstr=   r=   r>   rW   b  s    z_Authenticator.__init__c                 C   s&   |   |  |¡¡}|d krdS |  |¡S )Nó   *)r±   r°   rÚ   )rT   rŽ   Zretr=   r=   r>   r¯   e  s    z_Authenticator.processc                 C   sn   d}t |tƒr| d¡}|rjt|ƒdkrB|d d… }|dd … }n|}d}t |¡}|r||d d…  }q|S )Nr  rc   é0   r“   )rØ   rÙ   rÚ   rŠ   ÚbinasciiZ
b2a_base64)rT   ÚinpZoupÚtÚer=   r=   r>   rÚ   k  s    	


z_Authenticator.encodec                 C   s   |sdS t  |¡S r  )rC  Z
a2b_base64)rT   rD  r=   r=   r>   r°   ƒ  s    z_Authenticator.decodeN)r:   r;   r<   rW   r¯   rÚ   r°   r=   r=   r=   r>   r®   \  s   r®   z0 Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov DecrÖ   c                 C   s   i | ]\}}|  ¡ |d  “qS )r‡   )rÚ   )Ú.0Únr'  r=   r=   r>   Ú
<dictcomp>‰  s      rI  r‡   c              	   C   sØ   t  | ¡}|sd S t| d¡ }| d¡}t| d¡ƒ}t| d¡ƒ}t| d¡ƒ}t| d¡ƒ}t| d¡ƒ}t| d¡ƒ}	t| d	¡ƒ}
|	d
 |
 d
 }|dkrª| }||||||dddf	}t |¡| }t |¡S )NÚmonÚzonenÚdayÚyearÚhourÚminÚsecÚzonehÚzonemé<   ó   -r“   )	ÚInternalDater&  ÚMon2numr  r  ÚcalendarZtimegmÚtimeÚ	localtime)r!  r  rJ  rK  rL  rM  rN  rO  rP  rQ  rR  ZzoneZttÚutcr=   r=   r>   r   ‹  s$    

c                 C   s@   d}d}t t| ƒƒ} | r<t| dƒ\} }|||d … | }q|S )Nr  s   ABCDEFGHIJKLMNOPé   r‡   )r  ÚabsÚdivmod)Znumr  ZAPÚmodr=   r=   r>   r	   ®  s     c                 C   s$   t  | ¡}|sdS t| d¡ ¡ ƒS )Nr=   r©   )ÚFlagsr&  r  r  r  )r!  r  r=   r=   r>   r
   »  s    
c                 C   s  t | ttfƒr"t | tj¡ ¡ }nât | tƒr¸z
| j	}W nZ t
k
r   tjr„| d }|dkrpt t | ¡¡d }tjtjf|  }ntj }Y nX t|d}t| d d… dt|ƒiŽ}nLt | tƒrÚ| jd krÔtdƒ‚| }n*t | tƒrü| d | d fdkrü| S td	ƒ‚d
 t|j ¡}| |¡S )Né   r“   )Zsecondsé   Útzinfozdate_time must be awarer   )r)  r)  zdate_time not of a known typez"%d-{}-%Y %H:%M:%S %z")rØ   r  Úfloatr   Zfromtimestampr   rZ  Z
astimezoner  Ú	tm_gmtoffrs   rX  ÚdaylightrY  ÚmktimeÚaltzoner   rb  r0  rÙ   ÚformatÚMonthsZmonthÚstrftime)rª   ZdtZgmtoffZdstZdeltaZfmtr=   r=   r>   r   Æ  s2    ÿ





Ú__main__zd:s:)r=   r=   z-dz-s)rB   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 1)râ   )rm  z/tmp/yyy)r   ©ú
/tmp/yyz 2r¬   ro  )rÏ   )z/tmpzyy*)ré   rn  )rå   )NZSUBJECTZtest)rÁ   )Ú1z(FLAGS INTERNALDATE RFC822))rù   )rp  ÚFLAGSz
(\Deleted))rÞ   r=   )rÀ   r=   )rš   r=   )r   r=   )ré   r=   )r   )ZUIDVALIDITY)rÿ   )r,   ZALL)r   )rç   )ry   r=   c                 C   sL   t  d| |f ¡ tt | ƒ|Ž \}}t  d| ||f ¡ |dkrH|d ‚|S )Nz%s %sz%s => %s %sr
  r   )ÚMr+  rq   )Úcmdrz   r˜   r™   r=   r=   r>   Úrun'  s     rt  r   zPROTOCOL_VERSION = %szCAPABILITIES = %rrÏ   )z/tmp/zyy%z.*"([^"]+)"$r“   r¼   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
)Tri   rC  r‘   rf   r[   r~   r9  r|   rX  rW  r   r   r   Úior   rñ   rð   ÚImportErrorÚ__all__r¦   rC   r*  r4  rl   r‰   rp   r\   r  r_  rU  r^   r_   r¤   r   r  ra   r]   r`   r   r,  r¬   r   r®   r  ri  Ú	enumeraterV  r   r	   r
   r   r:   ZgetoptZgetpassÚargvZoptlistrz   r?   r  Zstream_commandÚoptr  rU   ZgetuserZUSERZPASSWDZ	test_mesgZ	test_seq1Z	test_seq2rt  rr  rE   r+  rn   rm   rs  Zmlr&  r  r  Úpathr™   rÿ   Úprintr=   r=   r=   r>   Ú<module>   sX  H
  ÿ	Ö/



	

 ÿ        l4
9,
#)



 
 
òù

 
 ÿ
ý