£Á°è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>
a
    XC?h                  +   @   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y   dZY n0 g dZd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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* Z0d+d, Z1d-d. Z2d/d0 Z3e4d1krddl5Z5ddl6Z6ze55ej7d(d d2\Z8Z9W n0 e5j:yj Z; zd3\Z8Z9W Y dZ;[;n
dZ;[;0 0 dZ<e8D ]8\Z=Z;e=d4kre>e;Zne=d5krte;Z<e9ste<fZ9qte9sd6Z9e9d Z?e6@ ZAe66d7eAe?pd8f ZBd9eAd:d; ZCd<eAeBffd=d>d?d@dAddeCffdBdCdDdEdFdGdHdIdJfZDdKdLdMdNd@dddeCffdIdOfZEdPdQ ZFze<r\e*e<ZGne'e?ZGeGjHdRkr|eDd(d ZDeGIdSeGjJ  eGIdTeGjKf  eDD ]\ZLZ9eFeLe9 qeFdUdVD ]<ZMeNdWeMZOeOreOPd(ZQneM, dX ZQeFdYeQf qeED ]T\ZLZ9eFeLe9ZReLe9fdMkr(qeRdX , ZSeSs>qeFdZd[d\eSdX  d]f qeTd^ W n.   eTd_ eseTd`ej7d    Y n0 dS )az2.58    N)datetimetimezone	timedelta)DEFAULT_BUFFER_SIZETF)IMAP4IMAP4_streamInternaldate2tupleInt2AP
ParseFlagsTime2Internaldate   
   i  )Z	IMAP4REV1r   i@B i   )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UNSUBSCRIBEUNSELECTs   \+( (?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d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d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/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Z d;d< Z!d=d> Z"d?d@ Z#dAdB Z$dCdD Z%dEdF Z&dGdH Z'ddKdLZ(dMdN Z)dOdP Z*dQdR Z+dSdT Z,ddUdVZ-dWdX Z.dYdZ Z/d[d\ Z0d]d^ Z1d_d` Z2dadb Z3dcdd Z4ddgdhZ5didj Z6dkdl Z7dmdn Z8dodp 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 ZHdddZIdd ZJdd ZKdd ZLdd ZMdd ZNdd ZOdS )r   c                   @   s   e Zd ZdS )zIMAP4.errorN__name__
__module____qualname__ r>   r>   ,/opt/alt/python39/lib64/python3.9/imaplib.pyerror       r@   c                   @   s   e Zd ZdS )zIMAP4.abortNr:   r>   r>   r>   r?   abort   rA   rB   c                   @   s   e Zd ZdS )zIMAP4.readonlyNr:   r>   r>   r>   r?   readonly   rA   rC    Nc                 C   s   t | _d| _d | _i | _i | _d| _d| _d| _d| _	| 
  | ||| z|   W n4 ty   z|   W n ty   Y n0  Y n0 d S )Nr   rD   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porttimeoutr>   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rV   r>   r>   r?   rO      s    zIMAP4._mode_asciic                 C   s(   d| _ d| _tt| _tt| _d S )NTutf-8)r\   r]   r^   r_   r`   rb   rc   rd   re   r>   r>   r?   
_mode_utf8   s    zIMAP4._mode_utf8c                 C   s   t tdd| _td| j d tj| _| 	 | _
d| jv rHd| _nd| jv rZd| _n| | j
|   tD ]}|| jvrqr|| _ 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_   ra   tagre__version___get_responseZwelcomerJ   rG   r@   _get_capabilitiesAllowedVersionscapabilitiesPROTOCOL_VERSION)rV   versionr>   r>   r?   rQ      s*    



zIMAP4._connectc                 C   s&   |t v rt| | S td| d S )NzUnknown IMAP4 command: '%s')CommandsgetattrlowerAttributeError)rV   attrr>   r>   r?   __getattr__  s    zIMAP4.__getattr__c                 C   s   | S Nr>   re   r>   r>   r?   	__enter__  s    zIMAP4.__enter__c                 G   s2   | j dkrd S z|   W n ty,   Y n0 d S Nr   )rG   logoutrT   )rV   argsr>   r>   r?   __exit__  s    
zIMAP4.__exit__c                 C   s`   |d ur|st d| jsd n| j}td| | j| j || jf}|d urVt||S t|S )Nz0Non-blocking socket (timeout=0) is not supportedzimaplib.open)
ValueErrorrW   sysauditrX   socketZcreate_connection)rV   rY   rW   Zaddressr>   r>   r?   _create_socket&  s    
zIMAP4._create_socketc                 C   s*   || _ || _| || _| jd| _d S )Nrb)rW   rX   r   sockmakefilefilerU   r>   r>   r?   rP   3  s    z
IMAP4.openc                 C   sV   t |t}| j|}||k rRt||krRt ||| }|| j|7 }||7 }q|S ry   )min_SAFE_BUF_SIZEr   readlen)rV   sizeZcursizedatadeltar>   r>   r?   r   ?  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_MAXLINEr   r@   rV   liner>   r>   r?   r   J  s    zIMAP4.readlinec                 C   s   t d| | | j| d S )Nzimaplib.send)r   r   r   ZsendallrV   r   r>   r>   r?   sendR  s    z
IMAP4.sendc              
   C   s   | j   zdz| jtj W nB ty` } z*|jtjkrLt	|dddkrL W Y d }~n
d }~0 0 W | j  n| j  0 d S )NZwinerrorr   i&'  )
r   closer   rS   r   Z	SHUT_RDWRrT   errnoZENOTCONNrt   )rV   excr>   r>   r?   rS   X  s    
zIMAP4.shutdownc                 C   s   | j S ry   )r   re   r>   r>   r?   r   h  s    zIMAP4.socketc                 C   sB   d}|  dd g|\}}|d r(||fS |  \}}|  |||S )NZRECENTrh   )_untagged_responsenooprV   nametypdatr>   r>   r?   recentt  s    	zIMAP4.recentc                 C   s   |  |d g| S ry   )r   upper)rV   coder>   r>   r?   response  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CRLFr\   rH   _simple_command)rV   mailboxflags	date_timemessager   rH   r>   r>   r?   append  s    

zIMAP4.appendc                 C   sP   |  }t|j| _| d|\}}|dkrB| |d ddd| _||fS )Nr   rh   r   rf   replacer   )r   _AuthenticatorprocessrH   r   r@   decoderG   )rV   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   re   r>   r>   r?   check  s    zIMAP4.checkc                 C   s*   z|  d\}}W d| _nd| _0 ||fS )Nr   r   r   rG   rV   r   r   r>   r>   r?   r     s    zIMAP4.closec                 C   s   |  d||S )Nr   r   )rV   message_setZnew_mailboxr>   r>   r?   copy  s    z
IMAP4.copyc                 C   s   |  d|S )Nr   r   rV   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   )rV   r   whor>   r>   r?   	deleteacl  s    zIMAP4.deleteaclc                 C   sH   d| j vrtd| d|\}}|dkr@d| v r@|   ||fS )Nr   zServer does not support ENABLErh   zUTF8=ACCEPT)rp   r   r@   r   r   rg   )rV   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   )rV   r   Zmessage_partsr   r   r   r>   r>   r?   fetch"  s    
zIMAP4.fetchc                 C   s   |  d|\}}| ||dS )Nr   ZACLr   rV   r   r   r   r>   r>   r?   getacl1  s    zIMAP4.getaclc                 C   s"   |  d|||\}}| ||dS )Nr    
ANNOTATIONr   )rV   r   entryZ	attributer   r   r>   r>   r?   getannotation:  s    zIMAP4.getannotationc                 C   s   |  d|\}}| ||dS )Nr!   QUOTAr   )rV   rootr   r   r>   r>   r?   getquotaB  s    zIMAP4.getquotac                 C   s@   |  d|\}}| ||d\}}| ||d\}}|||gfS )Nr"   r   Z	QUOTAROOTr   )rV   r   r   r   ZquotaZ	quotarootr>   r>   r?   getquotarootM  s    zIMAP4.getquotaroot""*c                 C   s$   d}|  |||\}}| |||S )Nr$   r   rV   Z	directorypatternr   r   r   r>   r>   r?   listX  s    z
IMAP4.listc                 C   s<   |  d|| |\}}|dkr.| |d d| _||fS )Nr%   rh   r   r   )r   _quoter@   rG   )rV   userpasswordr   r   r>   r>   r?   logind  s
    zIMAP4.loginc                 C   s   || | _ | _| d| jS )NzCRAM-MD5)r   r   r   _CRAM_MD5_AUTH)rV   r   r   r>   r>   r?   login_cram_md5r  s    zIMAP4.login_cram_md5c                 C   sB   dd l }t| jtr | jdn| j}| jd |||d  S )Nr   rf    Zmd5)hmac
isinstancer   strencoder   ZHMACZ	hexdigest)rV   Z	challenger   pwdr>   r>   r?   r   {  s
    zIMAP4._CRAM_MD5_AUTHc                 C   s$   d| _ | d\}}|   ||fS r{   )rG   r   rS   r   r>   r>   r?   r|     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   re   r>   r>   r?   r     s    z
IMAP4.noopc                 C   s(   d}|  |||||\}}| ||dS )Nr)   r   r   )rV   Zmessage_numZmessage_partstartZlengthr   r   r   r>   r>   r?   partial  s    zIMAP4.partialc                 C   s   d}|  d|S )Nr*   r   )rV   r   r   r>   r>   r?   	proxyauth  s    	zIMAP4.proxyauthc                 C   s   |  d||S )Nr+   r   )rV   Z
oldmailboxZ
newmailboxr>   r>   r?   rename  s    zIMAP4.renamec                 G   sX   d}|r4| j rtd| j|d|g|R  \}}n| j|g|R  \}}| |||S )Nr,   z'Non-None charset not valid in UTF8 modeCHARSET)r\   r   r@   r   r   )rV   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 v rb|sb| d| || j dd gfS )	Nr   r-   rh   r   r   	READ-ONLYz%s is not writableEXISTS)rJ   rL   r   rG   rC   get)rV   r   rC   r   r   r   r>   r>   r?   select  s    
zIMAP4.selectc                 C   s   |  d|||S )Nr.   r   )rV   r   r   Zwhatr>   r>   r?   setacl  s    zIMAP4.setaclc                 G   s$   | j dg|R  \}}| ||dS )Nr/   r   r   )rV   r}   r   r   r>   r>   r?   setannotation  s    zIMAP4.setannotationc                 C   s    |  d||\}}| ||dS )Nr0   r   r   )rV   r   Zlimitsr   r   r>   r>   r?   setquota  s    zIMAP4.setquotac                 G   sH   d}|d |d fdkr d| }| j |||g|R  \}}| |||S )Nr1   r   r   r   r   r   )rV   Zsort_criteriar   search_criteriar   r   r   r>   r>   r?   sort$  s
    z
IMAP4.sortc                 C   s   d}t s| d| jr"| d|| jvr6| d|d u 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 serverrh   Zserver_hostnamer   TzCouldn't establish TLS session)HAVE_SSLr@   rN   rB   rp   ssl_create_stdlib_contextr   wrap_socketr   rW   r   r   rn   r   )rV   ssl_contextr   r   r   r>   r>   r?   starttls2  s&    





zIMAP4.starttlsc                 C   s$   d}|  |||\}}| |||S )Nr3   r   )rV   r   namesr   r   r   r>   r>   r?   statusI  s    zIMAP4.statusc                 C   s>   |d |d fdkrd| }|  d|||\}}| ||dS )Nr   r   r   r   r4   r   r   )rV   r   commandr   r   r   r>   r>   r?   storeU  s    zIMAP4.storec                 C   s   |  d|S )Nr5   r   r   r>   r>   r?   	subscribe`  s    zIMAP4.subscribec                 G   s,   d}| j |||g|R  \}}| |||S )Nr6   r   )rV   Zthreading_algorithmr   r   r   r   r   r>   r>   r?   threadh  s    zIMAP4.threadc              	   G   s   |  }|tvr| d| | jt| vrL| d|| jdt| f d}| j||g|R  \}}|dv rv|}nd}| |||S )NzUnknown IMAP4 UID command: %s9command %s illegal in state %s, only allowed in states %s, r7   )r,   r1   r6   r   )r   rs   r@   rG   joinr   r   )rV   r   r}   r   r   r   r>   r>   r?   uidr  s    z	IMAP4.uidc                 C   s   |  d|S )Nr8   r   r   r>   r>   r?   unsubscribe  s    zIMAP4.unsubscribec                 C   s*   z|  d\}}W d| _nd| _0 ||fS )Nr9   r   r   )rV   r   r   r>   r>   r?   unselect  s    	zIMAP4.unselectc                 G   s.   |  }|tvr| jft|< | j|g|R  S ry   )r   rs   rG   r   rV   r   r}   r>   r>   r?   xatom  s    
zIMAP4.xatomc                 C   s8   |d u rd}| j }||v r*|| | n
|g||< d S NrA   )rJ   r   r   )rV   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   )rJ   r   rB   r   r]   )rV   byer>   r>   r?   
_check_bye  s    zIMAP4._check_byec           
   
   G   s  | j t| vr4d | _| d|| j dt| f dD ]}|| jv r8| j|= q8d| jv rj| jsj| d|  }t	|| j
}|d | }|D ]0}|d u rqt|trt	|| j
}|d | }q| j}|d ur
d | _t|t| ju r|}nd }|t	dt| | j
 }z| |t  W n4 tyP }	 z| d|	 W Y d }	~	n
d }	~	0 0 |d u r`|S |  r~| j| r`|S q`|r|| j}z| | | t W n4 ty }	 z| d|	 W Y d }	~	n
d }	~	0 0 |s`qq`|S )	Nr  r  rh   NOBADr   z#mailbox status changed to READ-ONLY    z {%s}zsocket error: %s)rG   rs   rH   r@   r  rJ   rL   rC   _new_tagbytesr]   r   r   type_commandr   r   r   rT   rB   rm   rI   rK   )
rV   r   r}   r   tagr   argrH   Z	literatorvalr>   r>   r?   r    s`    






$



$zIMAP4._commandc              
   C   s   |dk}|s|    z| j||d\}}W nn | jyb } z| d||f W Y d }~n@d }~0  | jy } z| d||f W Y d }~n
d }~0 0 |s|    |dkr| d|||f ||fS )Nr   )
expect_byezcommand: %s => %sr  z%s command error: %s %s)r  _get_tagged_responserB   r@   )rV   r   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   r]   r   tuplesplitrp   r   r>   r>   r?   rn   ,  s    

zIMAP4._get_capabilitiesc                 C   s  |   }| | j|rp| jd}|| jvr:| d| | jd}t|| j}| jd}||gf| j|< nd }| t	|s| | j
|r| jd}| jd u r| t|r| jd| _d S | d| | jd}t|| j}| jd}|d u rd}|r|d | }| | j|rZt| jd	}| |}| |||f |   }q| || |d
v r| t|r| jd}t|| j}| || jd |S )Nr  zunexpected tagged response: %rr  r   Zdata2zunexpected response: %rrA   r  r   r  )	_get_line_matchrk   mogrouprI   rB   r   r]   Untagged_responserd   ContinuationrK   rb   intr   r  Response_code)rV   respr  r   r   Zdat2r   r   r>   r>   r?   rm   5  sD    


zIMAP4._get_responsec              
   C   s   | j | }|d ur| j |= |S |rDd}| j|d }|d urD||fS |   z|   W q  | jy } z W Y d }~q d }~0 0 q d S )Nr  )rI   rJ   popr  rm   rB   )rV   r  r  resultr   r  r  r>   r>   r?   r    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   rB   endswithr   r>   r>   r?   r     s    

zIMAP4._get_linec                 C   s   | || _| jd uS ry   )matchr"  )rV   Zcresr>   r>   r?   r!    s    zIMAP4._matchc                 C   s2   | j tt| j| j }| jd | _d | j|< |S )Nr   )rj   r  r   rM   r]   rI   )rV   r  r>   r>   r?   r    s    
zIMAP4._new_tagc                 C   s$   | dd}| dd}d| d S )N\z\\"z\")r   )rV   r  r>   r>   r?   r     s    zIMAP4._quotec                 G   s   |  || j|g|R  S ry   )r  r  r	  r>   r>   r?   r     s    zIMAP4._simple_commandc                 C   s8   |dkr||fS || j vr$|d gfS | j |}||fS )Nr  )rJ   r)  )rV   r   r   r   r   r>   r>   r?   r     s    

zIMAP4._untagged_response)r   r   )r   r   )r   F)N)F)Tr;   r<   r=   rR   r@   rB   rC   
IMAP4_PORTrZ   rO   rg   rQ   rx   rz   r~   r   rP   r   r   r   rS   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  rn   rm   r  r   r!  r  r   r   r   _mesgZ_dump_urZ_logZ	print_logr>   r>   r>   r?   r      s   1*		
	


 	

M	P
!$r   c                   @   s:   e Zd ZdeddddfddZdd ZdedfddZdS )		IMAP4_SSLrD   Nc                 C   s   |d ur|d urt d|d ur0|d ur0t d|d us@|d urVdd l}|dtd || _|| _|d u 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)r   warningswarnDeprecationWarningr6  r5  r   r   r   r   rZ   )rV   rW   rX   r6  r5  r   rY   r7  r>   r>   r?   rZ   #  s"    zIMAP4_SSL.__init__c                 C   s   t | |}| jj|| jdS )Nr   )r   r   r   r   rW   )rV   rY   r   r>   r>   r?   r   7  s    zIMAP4_SSL._create_socketc                 C   s   t | ||| d S ry   )r   rP   rU   r>   r>   r?   rP   <  s    zIMAP4_SSL.open)r;   r<   r=   IMAP4_SSL_PORTrZ   r   rP   r>   r>   r>   r?   r3    s
   
r3  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 ry   )r   r   rZ   )rV   r   r>   r>   r?   rZ   S  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)rW   rX   r   r   
subprocessPopenr   r   PIPEr   r<  	writefiler=  readfilerU   r>   r>   r?   rP   X  s    
zIMAP4_stream.openc                 C   s   | j |S ry   )rC  r   )rV   r   r>   r>   r?   r   h  s    zIMAP4_stream.readc                 C   s
   | j  S ry   )rC  r   re   r>   r>   r?   r   m  s    zIMAP4_stream.readlinec                 C   s   | j | | j   d S ry   )rB  writeflushr   r>   r>   r?   r   r  s    zIMAP4_stream.sendc                 C   s"   | j   | j  | j  d S ry   )rC  r   rB  r   waitre   r>   r>   r?   rS   x  s    

zIMAP4_stream.shutdown)NNN)	r;   r<   r=   rZ   rP   r   r   r   rS   r>   r>   r>   r?   r   G  s   
r   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 ry   )r   )rV   Zmechinstr>   r>   r?   rZ     s    z_Authenticator.__init__c                 C   s&   |  | |}|d u rdS | |S )N   *)r   r   r   )rV   r   Zretr>   r>   r?   r     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 )NrA   rf   0   r   )r   r   r   r   binasciiZ
b2a_base64)rV   inpZoupter>   r>   r?   r     s    	


z_Authenticator.encodec                 C   s   |sdS t |S r  )rI  Z
a2b_base64)rV   rJ  r>   r>   r?   r     s    z_Authenticator.decodeN)r;   r<   r=   rZ   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>  rA   rO  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hourr   seczonehzonem<      -r   )	InternalDater-  Mon2numr#  r&  calendarZtimegmtime	localtime)r(  r"  rP  rQ  rR  rS  rT  r   rU  rV  rW  ZzoneZttutcr>   r>   r?   r     s$    

r   c                 C   s@   d}d}t t| } | r<t| d\} }|||d  | }q|S )NrA   s   ABCDEFGHIJKLMNOP   r   )r&  absdivmod)Znumr  ZAPmodr>   r>   r?   r	     s    r	   c                 C   s$   t | }|sdS t|d S )Nr>   r   )Flagsr-  r  r#  r  )r(  r"  r>   r>   r?   r
     s    
r
   c                 C   s  t | ttfr"t| tj }nt | trz
| j	}W nX t
y   tjr| d }|dkrntt| d }tjtjf|  }ntj }Y n0 t|d}t| d d dt|i}nLt | tr| jd u 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   )r0  r0  zdate_time not of a known typez"%d-{}-%Y %H:%M:%S %z")r   r&  floatr   Zfromtimestampr   r_  Z
astimezoner  	tm_gmtoffrv   r]  daylightr^  mktimealtzoner   rg  r   r   formatMonthsZmonthstrftime)r   ZdtZgmtoffZdstr   Zfmtr>   r>   r?   r     s2    





r   __main__zd:s:)r>   r>   z-dz-s)rD   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   )rr  z/tmp/yyy)r   
/tmp/yyz 2r   rt  )r   )z/tmpzyy*)r   rs  )r   )NZSUBJECTtest)r   )1z(FLAGS INTERNALDATE RFC822))r   )rv  FLAGSz
(\Deleted))r   r>   )r   r>   )r   r>   )r   r>   )r   r>   )r   )ZUIDVALIDITY)r  )r,   ZALL)r   )r   )r|   r>   c                 C   sL   t d| |f  tt | | \}}t d| ||f  |dkrH|d |S )Nz%s %sz%s => %s %sr  r   )Mr2  rt   )cmdr}   r   r   r>   r>   r?   runK  s
    rz  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
)Url   rI  r   ri   r^   r   r?  r   r]  r\  r   r   r   ior   r   r   ImportError__all__r   rE   r1  r:  ro   r   r   rs   r_   r%  rd  rZ  ra   rb   r   r'  r$  rd   r`   rc   r   r3  r   r   r   r  rn  	enumerater[  r   r	   r
   r   r;   ZgetoptZgetpassargvZoptlistr}   r@   r  Zstream_commandoptr&  rW   ZgetuserZUSERZPASSWDZ	test_mesgZ	test_seq1Z	test_seq2rz  rx  rG   r2  rq   rp   ry  Zmlr-  r"  r#  pathr   r  printr>   r>   r>   r?   <module>   sL  H
	0



	

         6
9,
#)










