
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3
ct„jØÐ  ã            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d€d�d‚dƒd„d…d†d‡dˆd‰dŠd‹dŒd�dŽd�d�dœ)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�r®G 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�rÎd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�r e>e;ƒZne=d2k�r„e;Z<e9�s„e<fZ9�q„W e9�sÊd‘Z9e9d Z?e6j@ƒ ZAe6j6d4eAe?�pêd5f ƒZBd6eAd7d8œ ZCd9eAeBffd“d•d—d@d?ddeCffd™d›d�dŸd¡dNf fdOf fdPf fdQf ffZDdDf fd£d¥d§d@dddeCffdPf fdXf ffZEdYdZ„ ZF�y&e<�rŠe*e<ƒZGne'e?ƒZGeGjHdk�rªeDd*d… ZDeGjId[eGjJ ƒ eGjId\eGjKf ƒ xeDD ]\ZLZ9eFeLe9ƒ �qÒW xJeFdAd¨ƒD ]<ZMejNd_eMƒZOeO�reOjPd*ƒZQneMj,ƒ d© ZQeFd`eQfƒ �qöW x\eED ]T\ZLZ9eFeLe9ƒZReLe9fd«k�r`�q<eRd¬ j,ƒ ZSeS�sv�q<eFdTdadbeSd­  dcfƒ �q<W eTddƒ W n.   eTdeƒ e�sÆeTdfe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'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„ Z4d�dfdg„Z5dhdi„ Z6djdk„ Z7dldm„ Z8dndo„ Z9dždqdr„Z:dsdt„ Z;dudv„ Z<dwdx„ Z=dydz„ Z>d{d|„ Z?d}d~„ Z@dd€„ ZAd�d‚„ ZBdƒd„„ ZCd…d†„ ZDd‡dˆ„ ZEd‰dŠ„ ZFd‹dŒ„ ZGd�dŽ„ ZHd�d�„ 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.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r„qt|| _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r¤q–t|tƒrºt	|| j
ƒ}tj|ƒrÌtd	ƒ‚|d | }q–W | 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 xŒx | jƒ �rž| j| �r€|S �q€W |�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|< núd }| 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-8é0   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ƒ }nät | tƒr¸y
| 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rÔt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,
#)



  



 
 