£Á°èZ¨Ä…–K§‚«“ô4“ÒÙ´dîfUÙÃÅ WKbyÊ¦•êŽ…È®FÒ¿ÊÎóCozá¬S@6{Í:›œêZÌ:Š•_%:¢¾¾~;‘Ã~èŠ©ÊÇí`ÔÑ©úë™µ'5I¿fš×WO%ø9¾«¾DK|€ùÍD”Ýs]nHÕ¶ê×Ó¼ãžªéUWŸÈË%DÒÕ¬ï‘]/Åcx  ‰ï2ß]ä6G[]S£ÔÏ¯rs{úëóµmÒï#UQxo·õÞCe]"±/aÙ&Eã4ú9Jé_ÞåëdãöKë)AÞ                  ¯¹ægƒÛowÐø^d™ý½ßB7áyMä9ÜÖUã
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
<html>
B
    YI~d,              *   @   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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rG 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rddl4Z4ddl5Z5ye44ej6d*d d0\Z7Z8W n. e4j9k
rl Z: zd1\Z7Z8W ddZ:[:X Y nX dZ;x@e7D ]8\Z<Z:e<d2kre=e:Zne<d3krxe:Z;e8sxe;fZ8qxW e8sd4Z8e8d Z>e5? Z@e55d5e@e>pd6f 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y&e;rbe)e;ZFne&e>ZFeFjGdPkreCd*d ZCeFHdQeFjI  eFHdReFjJf  xeCD ]\ZKZ8eEeKe8 qW xJeEdSdTD ]<ZLeMdUeLZNeNreNOd*ZPneL+ dV ZPeEdWePf qW x\eDD ]T\ZKZ8eEeKe8ZQeKe8fdKkr8qeQdV + ZReRsNqeEdXdYdZeRdV  d[f qW eSd\ W n.   eSd] eseSd^ej6d    Y nX dS )_z2.58    N)datetimetimezone	timedelta)DEFAULT_BUFFER_SIZETFIMAP4IMAP4_streamInternaldate2tupleInt2AP
ParseFlagsTime2Internaldates   
   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'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;   ,/opt/alt/python37/lib64/python3.7/imaplib.pyerror   s    r=   c               @   s   e Zd ZdS )zIMAP4.abortN)r8   r9   r:   r;   r;   r;   r<   abort   s    r>   c               @   s   e Zd ZdS )zIMAP4.readonlyN)r8   r9   r:   r;   r;   r;   r<   readonly   s    r?    c             C   s   t | _d| _d | _i | _i | _d| _d| _d| _d| _	| 
  | || y|   W n8 tk
r   y|   W n tk
r   Y nX  Y nX d S )Nr   r@   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)rQ   r;   r;   r<   rK      s    zIMAP4._mode_asciic             C   s(   d| _ d| _tt| _tt| _d S )NTzutf-8)rV   rW   rX   rY   rZ   r\   r]   r^   )rQ   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	|   x tD ]}|| jkrqt|| _d S W | 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tagprerX   rY   r[   tagre_get_responseZwelcomerF   rC   r=   _get_capabilitiesAllowedVersionscapabilitiesPROTOCOL_VERSION)rQ   versionr;   r;   r<   rM      s     




zIMAP4._connectc             C   s&   |t krt| | S td| d S )NzUnknown IMAP4 command: '%s')CommandsgetattrlowerAttributeError)rQ   attrr;   r;   r<   __getattr__	  s    zIMAP4.__getattr__c             C   s   | S )Nr;   )rQ   r;   r;   r<   	__enter__  s    zIMAP4.__enter__c             G   s&   y|    W n tk
r    Y nX d S )N)logoutrP   )rQ   argsr;   r;   r<   __exit__  s    zIMAP4.__exit__c             C   s    | j s
d n| j }t|| jfS )N)rR   socketZcreate_connectionrS   )rQ   rR   r;   r;   r<   _create_socket  s    zIMAP4._create_socketc             C   s(   || _ || _|  | _| jd| _d S )Nrb)rR   rS   ru   sockmakefilefile)rQ   rR   rS   r;   r;   r<   rL   #  s    
z
IMAP4.openc             C   s   | j |S )N)ry   read)rQ   sizer;   r;   r<   rz   /  s    z
IMAP4.readc             C   s.   | j td }t|tkr*| dt |S )N   zgot more than %d bytes)ry   readline_MAXLINElenr=   )rQ   liner;   r;   r<   r}   4  s    zIMAP4.readlinec             C   s   | j | d S )N)rw   Zsendall)rQ   datar;   r;   r<   send<  s    z
IMAP4.sendc          
   C   st   | j   zXy| jtj W n@ tk
r^ } z"|jtjkrNt	|dddkrN W d d }~X Y nX W d | j  X d S )NZwinerrorr   i&'  )
ry   closerw   rO   rt   Z	SHUT_RDWRrP   errnoZENOTCONNrk   )rQ   excr;   r;   r<   rO   A  s    
zIMAP4.shutdownc             C   s   | j S )N)rw   )rQ   r;   r;   r<   rt   Q  s    zIMAP4.socketc             C   sB   d}|  dd g|\}}|d r(||fS |  \}}|  |||S )NZRECENTr`   )_untagged_responsenoop)rQ   nametypdatr;   r;   r<   recent]  s    	zIMAP4.recentc             C   s   |  |d g| S )N)r   upper)rQ   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t|}| jrbd| d }|| _| ||||S )	Nr   INBOXr   r   )()z(%s)s   UTF8 (   ))r   MapCRLFsubCRLFrV   rD   _simple_command)rQ   mailboxflags	date_timemessager   rD   r;   r;   r<   append|  s    

zIMAP4.appendc             C   sP   |  }t|j| _| d|\}}|dkrB| |d ddd| _||fS )Nr   r`   r   zutf-8replacer   )r   _AuthenticatorprocessrD   r   r=   decoderC   )rQ   Z	mechanismZ
authobjectmechr   r   r;   r;   r<   authenticate  s    zIMAP4.authenticatec             C   s    d}|  |\}}| |||S )Nr   )r   r   )rQ   r   r   r   r;   r;   r<   
capability  s    zIMAP4.capabilityc             C   s
   |  dS )Nr   )r   )rQ   r;   r;   r<   check  s    zIMAP4.checkc             C   s$   z|  d\}}W d d| _X ||fS )Nr   r   )r   rC   )rQ   r   r   r;   r;   r<   r     s    zIMAP4.closec             C   s   |  d||S )Nr   )r   )rQ   message_setZnew_mailboxr;   r;   r<   copy  s    z
IMAP4.copyc             C   s   |  d|S )Nr   )r   )rQ   r   r;   r;   r<   create  s    zIMAP4.createc             C   s   |  d|S )Nr   )r   )rQ   r   r;   r;   r<   delete  s    zIMAP4.deletec             C   s   |  d||S )Nr   )r   )rQ   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 ENABLEr`   zUTF8=ACCEPT)rg   r   r=   r   r   r_   )rQ   r   r   r   r;   r;   r<   enable  s    

zIMAP4.enablec             C   s    d}|  |\}}| |||S )Nr   )r   r   )rQ   r   r   r   r;   r;   r<   expunge  s    	zIMAP4.expungec             C   s$   d}|  |||\}}| |||S )Nr   )r   r   )rQ   r   Zmessage_partsr   r   r   r;   r;   r<   fetch  s    
zIMAP4.fetchc             C   s   |  d|\}}| ||dS )Nr   ZACL)r   r   )rQ   r   r   r   r;   r;   r<   getacl  s    zIMAP4.getaclc             C   s"   |  d|||\}}| ||dS )Nr   
ANNOTATION)r   r   )rQ   r   entryZ	attributer   r   r;   r;   r<   getannotation#  s    zIMAP4.getannotationc             C   s   |  d|\}}| ||dS )Nr    QUOTA)r   r   )rQ   rootr   r   r;   r;   r<   getquota+  s    zIMAP4.getquotac             C   s@   |  d|\}}| ||d\}}| ||d\}}|||gfS )Nr!   r   Z	QUOTAROOT)r   r   )rQ   r   r   r   ZquotaZ	quotarootr;   r;   r<   getquotaroot6  s    zIMAP4.getquotaroot""*c             C   s$   d}|  |||\}}| |||S )Nr#   )r   r   )rQ   	directorypatternr   r   r   r;   r;   r<   listA  s    z
IMAP4.listc             C   s<   |  d|| |\}}|dkr.| |d d| _||fS )Nr$   r`   r   r   )r   _quoter=   rC   )rQ   userpasswordr   r   r;   r;   r<   loginM  s
    zIMAP4.loginc             C   s   || | _ | _| d| jS )NzCRAM-MD5)r   r   r   _CRAM_MD5_AUTH)rQ   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   zutf-8 Zmd5)hmac
isinstancer   strencoder   ZHMACZ	hexdigest)rQ   Z	challenger   pwdr;   r;   r<   r   d  s    zIMAP4._CRAM_MD5_AUTHc             C   sj   d| _ y| d\}}W n(   ddt d d  g }}Y nX |   d| jkrbd| jd fS ||fS )Nr   NOz%s: %s   BYE)rC   r   sysexc_inforO   rF   )rQ   r   r   r;   r;   r<   rq   l  s      "
zIMAP4.logoutc             C   s$   d}|  |||\}}| |||S )Nr%   )r   r   )rQ   r   r   r   r   r   r;   r;   r<   lsub|  s    z
IMAP4.lsubc             C   s   |  d|\}}| ||dS )Nr"   )r   r   )rQ   r   r   r   r;   r;   r<   myrights  s    zIMAP4.myrightsc             C   s    d}|  |\}}| |||S )Nr&   )r   r   )rQ   r   r   r   r;   r;   r<   	namespace  s    zIMAP4.namespacec             C   s
   |  dS )Nr'   )r   )rQ   r;   r;   r<   r     s    z
IMAP4.noopc             C   s(   d}|  |||||\}}| ||dS )Nr(   r   )r   r   )rQ   Zmessage_numZmessage_partstartlengthr   r   r   r;   r;   r<   partial  s    zIMAP4.partialc             C   s   d}|  d|S )Nr)   )r   )rQ   r   r   r;   r;   r<   	proxyauth  s    	zIMAP4.proxyauthc             C   s   |  d||S )Nr*   )r   )rQ   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)rV   r   r=   r   r   )rQ   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,   r`   r   r   z	READ-ONLYz%s is not writableEXISTS)rF   rH   r   rC   r?   get)rQ   r   r?   r   r   r   r;   r;   r<   select  s    
zIMAP4.selectc             C   s   |  d|||S )Nr-   )r   )rQ   r   r   Zwhatr;   r;   r<   setacl  s    zIMAP4.setaclc             G   s    | j d| \}}| ||dS )Nr.   r   )r.   )r   r   )rQ   rr   r   r   r;   r;   r<   setannotation  s    zIMAP4.setannotationc             C   s    |  d||\}}| ||dS )Nr/   r   )r   r   )rQ   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 )Nr0   r   r   )r   r   z(%s))r   r   )rQ   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 )
Nr1   zSSL support missingzTLS session already establishedzTLS not supported by serverr`   )server_hostnamerv   TzCouldn't establish TLS session)HAVE_SSLr=   rJ   r>   rg   ssl_create_stdlib_contextr   wrap_socketrw   rR   rx   ry   re   r   )rQ   ssl_contextr   r   r   r;   r;   r<   starttls  s$    





zIMAP4.starttlsc             C   s$   d}|  |||\}}| |||S )Nr2   )r   r   )rQ   r   namesr   r   r   r;   r;   r<   status5  s    zIMAP4.statusc             C   s>   |d |d fdkrd| }|  d|||\}}| ||dS )Nr   r   )r   r   z(%s)r3   r   )r   r   )rQ   r   commandr   r   r   r;   r;   r<   storeA  s    zIMAP4.storec             C   s   |  d|S )Nr4   )r   )rQ   r   r;   r;   r<   	subscribeL  s    zIMAP4.subscribec             G   s*   d}| j |||f| \}}| |||S )Nr5   )r   r   )rQ   Zthreading_algorithmr   r   r   r   r   r;   r;   r<   threadT  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: %sz9command %s illegal in state %s, only allowed in states %sz, r6   )r+   r0   r5   r   )r   rj   r=   rC   joinr   r   )rQ   r   rr   r   r   r   r;   r;   r<   uid^  s    z	IMAP4.uidc             C   s   |  d|S )Nr7   )r   )rQ   r   r;   r;   r<   unsubscribew  s    zIMAP4.unsubscribec             G   s,   |  }|tkr| jft|< | j|f| S )N)r   rj   rC   r   )rQ   r   rr   r;   r;   r<   xatom  s    
zIMAP4.xatomc             C   s8   |d krd}| j }||kr*|| | n
|g||< d S )N    )rF   r   )rQ   r   r   urr;   r;   r<   _append_untagged  s    zIMAP4._append_untaggedc             C   s,   | j d}|r(| |d | jdd S )Nr   r   r   )rF   r   r>   r   rW   )rQ   Zbyer;   r;   r<   
_check_bye  s    zIMAP4._check_byec       
   
   G   s  | j t| kr4d | _| d|| j dt| f xdD ]}|| jkr:| j|= q:W d| jkrn| jsn| d|  }t	|| j
}|d | }x8|D ]0}|d krqt|trt	|| j
}|d | }qW | j}|d k	rd | _t|t| jkr|}nd }|t	dt| | j
 }y| |t  W n2 tk
rV }	 z| d|	 W d d }	~	X Y nX |d krf|S xx |  r| j| rj|S qjW |r|| j}y| | | t W n2 tk
r }	 z| d|	 W d d }	~	X Y nX |shP qhW |S )	Nz9command %s illegal in state %s, only allowed in states %sz, )r`   r   BADz	READ-ONLYz#mailbox status changed to READ-ONLY    z {%s}zsocket error: %s)rC   rj   rD   r=   r   rF   rH   r?   _new_tagbytesrW   r   r   type_commandr   r   r   rP   r>   rd   rE   rG   )
rQ   r   rr   r   tagr   argrD   Z	literatorvalr;   r;   r<   r     s^    




 

 



 zIMAP4._commandc          
   C   s   |dkr|    y| |\}}W nj | jk
rX } z| d||f W d d }~X Y n6 | jk
r } z| d||f W d d }~X Y nX |dkr|    |dkr| d|||f ||fS )Nr   zcommand: %s => %sr   z%s command error: %s %s)r   _get_tagged_responser>   r=   )rQ   r   r   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   rW   r   tuplesplitrg   )rQ   r   r   r;   r;   r<   re     s    

zIMAP4._get_capabilitiesc             C   s  |   }| | j|rp| jd}|| jkr:| d| | jd}t|| j}| jd}||gf| j|< nd }| 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 | }xH| | j|r\t| jd	}| |}| |||f |   }qW | || |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`   r   r   )	_get_line_matchrc   mogrouprE   r>   r   rW   Untagged_responser^   ContinuationrG   r\   intrz   r   Response_code)rQ   respr   r   r   Zdat2r{   r   r;   r;   r<   rd     sH    


  
zIMAP4._get_responsec          
   C   sd   x^| j | }|d k	r | j |= |S |   y|   W q | jk
rZ } z W d d }~X Y qX qW d S )N)rE   r   rd   r>   )rQ   r   resultr   r;   r;   r<   r   `  s    
zIMAP4._get_tagged_responsec             C   s>   |   }|s| d|ds.| d| |d d }|S )Nzsocket error: EOFs   
z#socket error: unterminated line: %r)r}   r>   endswith)rQ   r   r;   r;   r<   r  {  s    

zIMAP4._get_linec             C   s   | || _| jd k	S )N)matchr  )rQ   Zcresr;   r;   r<   r    s    zIMAP4._matchc             C   s2   | j tt| j| j }| jd | _d | j|< |S )Nr|   )rb   r   r   rI   rW   rE   )rQ   r   r;   r;   r<   r     s    
zIMAP4._new_tagc             C   s$   | dd}| dd}d| d S )N\z\\"z\")r   )rQ   r   r;   r;   r<   r     s    zIMAP4._quotec             G   s   |  || j|f| S )N)r   r   )rQ   r   rr   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   )rF   pop)rQ   r   r   r   r   r;   r;   r<   r     s    

zIMAP4._untagged_response)r   r   )r   r   )r   F)N)Or8   r9   r:   rN   r=   r>   r?   
IMAP4_PORTrT   rK   r_   rM   ro   rp   rs   ru   rL   rz   r}   r   rO   rt   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   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   r   r   re   rd   r   r  r  r   r   r   r   r;   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_SSLr@   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 insteadr   )certfilekeyfile)
ValueErrorwarningswarnDeprecationWarningr  r  r   r   r   r   rT   )rQ   rR   rS   r  r  r   r  r;   r;   r<   rT     s    zIMAP4_SSL.__init__c             C   s   t | }| jj|| jdS )N)r   )r   ru   r   r   rR   )rQ   rw   r;   r;   r<   ru   
  s    
zIMAP4_SSL._create_socketc             C   s   t | || d S )N)r   rL   )rQ   rR   rS   r;   r;   r<   rL     s    zIMAP4_SSL.open)r8   r9   r:   IMAP4_SSL_PORTrT   ru   rL   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 )N)r   r   rT   )rQ   r   r;   r;   r<   rT   &  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)rR   rS   rw   ry   
subprocessPopenr   r   PIPEr   r  	writefiler  readfile)rQ   rR   rS   r;   r;   r<   rL   +  s    
zIMAP4_stream.openc             C   s   | j |S )N)r#  rz   )rQ   r{   r;   r;   r<   rz   ;  s    zIMAP4_stream.readc             C   s
   | j  S )N)r#  r}   )rQ   r;   r;   r<   r}   @  s    zIMAP4_stream.readlinec             C   s   | j | | j   d S )N)r"  writeflush)rQ   r   r;   r;   r<   r   E  s    zIMAP4_stream.sendc             C   s"   | j   | j  | j  d S )N)r#  r   r"  r   wait)rQ   r;   r;   r<   rO   K  s    

zIMAP4_stream.shutdown)NN)	r8   r9   r:   rT   rL   rz   r}   r   rO   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   )rQ   Zmechinstr;   r;   r<   rT   Y  s    z_Authenticator.__init__c             C   s&   |  | |}|d krdS | |S )N   *)r   r   r   )rQ   r   retr;   r;   r<   r   \  s    z_Authenticator.processc             C   sr   d}t |tr|d}xT|rlt|dkrD|d d }|dd  }n|}d}t|}|r||d d  }qW |S )Nr   zutf-80   r   )r   r   r   r   binasciiZ
b2a_base64)rQ   inpZoupter;   r;   r<   r   b  s    	


z_Authenticator.encodec             C   s   |sdS t |S )Nr   )r*  Z
a2b_base64)rQ   r+  r;   r;   r<   r   z  s    z_Authenticator.decodeN)r8   r9   r:   rT   r   r   r   r;   r;   r;   r<   r   S  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    r0  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  r1  r2  r3  r4  r5  r6  r7  r8  r9  Zzone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 | }|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 }nt | try
| 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rt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   rB  Z
astimezoner   Z	tm_gmtoffrm   r?  Zdaylightr@  ZmktimeZaltzoner   rJ  r  r   formatMonthsZmonthZstrftime)r   ZdtZgmtoffdstZdeltaZfmtr;   r;   r<   r     s0    




__main__zd:s:)r;   r;   z-dz-s)r@   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   )z
/tmp/xxx 1)r   )z
/tmp/xxx 1z/tmp/yyy)r   )z
/tmp/yyz 2r   z
/tmp/yyz 2)r   )z/tmpzyy*)r   )z
/tmp/yyz 2)r   )NZSUBJECTZtest)r   )1z(FLAGS INTERNALDATE RFC822))r   )rQ  FLAGSz
(\Deleted))r   r;   )r   r;   )r   r;   )r   r;   )r   r;   )r   )ZUIDVALIDITY)r   )r+   ZALL)r   )r   )rq   r;   c             C   sL   t d| |f  tt | | \}}t d| ||f  |dkrH|d |S )Nz%s %sz%s => %s %sr   r   )M_mesgrk   )cmdrr   r   r   r;   r;   r<   run  s     rV  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
)T__version__r*  r   ra   rX   rt   r  r   r?  r>  r   r   r   ior   r   r   ImportError__all__r   rA   r  r  rf   r~   rj   rY   r  rG  r<  r[   r\   r   r  r  r^   rZ   r]   r   r  r   r   r   r   rM  	enumerater=  r   r	   r
   r   r8   ZgetoptZgetpassargvZoptlistrr   r=   r   Zstream_commandoptr  rR   ZgetuserZUSERZPASSWDZ	test_mesgZ	test_seq1Z	test_seq2rV  rS  rC   rT  rh   rg   rU  mlr  r  r  pathr   r   printr;   r;   r;   r<   <module>   sD  H

	



	


        c4
9,
#)



  

 
 