<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>

]              Y   @   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 Wn e k
 r d Z Yn Xd d d	 d
 d d g Z d Z d Z d Z d Z d d f Z d Z d d d f d d f d d d d d f d d f d d f d d f d d d f d d d f d d d f d d f d  d d f d! d f d" d f d# d d f d$ d d f d% d d f d& d d f d' d d f d( d d f d) d f d d d d d f d* d d f d+ d d f d, d d d d f d- d f d. d f d/ d d f d0 d f d1 d d f d2 d d f d3 d d f d4 d d f d5 d f d6 d f d7 d d f d8 d f d9 d d f d: d f d; d f d< d d f i( Z e j d=  Z e j d>  Z e j d?  Z e j d@ e j  Z e j dA  Z  e j dB  Z! e j dC  Z" e j dD e j  Z# d@ Z$ dD Z% GdE d   d  Z& e rGdF dG   dG e&  Z' e j( dG  GdH d   d e&  Z) GdI dJ   dJ  Z* dK j+ dL  Z, dM dN   e- e, dO d   D Z. dP d	   Z/ dQ d
   Z0 dR d   Z1 dS d   Z2 e3 dT k rXd d l4 Z4 d d l5 Z5 y) e4 j4 e j6 dO d  dU  \ Z7 Z8 Wn: e4 j9 k
 rZ: z f  f  f \ Z7 Z8 WYd d Z: [: Xn Xd Z; xQ e7 D]I \ Z< Z: e< dV k re= e:  Z n" e< dW k re: Z; e8 re; f Z8 qWe8 r$dX f Z8 e8 d Z> e5 j?   Z@ e5 j5 dY e@ e> pOdZ f  ZA d[ d\ e@ d] d^ i ZB d_ e@ eA f f d` da f f db da dc f f d dd f f de dd d d eB f f df dg dh f f di dd f f dj d dk dl f f dm dn do f f dp dn dq dr f f ds f  f dt f  f du f  f dv f  f f ZC di f  f dw dx f f dy d0 dz f f dw d{ f f de d d d eB f f du f  f d| f  f f ZD d} d~   ZE ye; re) e;  ZF n e& e>  ZF eF jG d k reC dO d  ZC eF jH d eF jI  eF jH d eF jJ f  x! eC D] \ ZK Z8 eE eK e8  qWxh eE df d d f  D]Q ZL e jM d eL  ZN eN rseN jO dO  ZP n eL j+   dO ZP eE d eP f  qCWx~ eD D]v \ ZK Z8 eE eK e8  ZQ eK e8 f dy d0 dz f f k rqeQ dO j+   ZR eR rqeE dy d" d eR dO d f  qWeS d  Wn1 eS d  e rPeS d e j6 d    Yn Xd S)z2.58    N)datetimetimezone	timedelta)DEFAULT_BUFFER_SIZETFIMAP4IMAP4_streamInternaldate2tupleInt2AP
ParseFlagsTime2Internaldates   
   i  Z	IMAP4REV1i@B APPENDAUTHSELECTEDAUTHENTICATENONAUTH
CAPABILITYLOGOUTCHECKCLOSECOPYCREATEDELETE	DELETEACLENABLEEXAMINEEXPUNGEFETCHGETACLGETANNOTATIONGETQUOTAGETQUOTAROOTMYRIGHTSLISTLOGINLSUB	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 Gd d   d e  Z Gd d   d e  Z Gd d   d e  Z d e 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 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 d0 d1   Z d2 d3   Z d4 d5   Z d6 d7   Z d8 d9   Z  d: d;   Z! d< d=   Z" d> d?   Z# d@ dA   Z$ dB dC   Z% dD dE   Z& dF dG   Z' dH dI dJ dK  Z( dL dM   Z) dN dO   Z* dP dQ   Z+ dR dS   Z, dH dI dT dU  Z- dV dW   Z. dX dY   Z/ dZ d[   Z0 d\ d]   Z1 d^ d_   Z2 d` da   Z3 db dc   Z4 dd de df dg  Z5 dh di   Z6 dj dk   Z7 dl dm   Z8 dn do   Z9 dp dq dr  Z: ds dt   Z; du dv   Z< dw dx   Z= dy dz   Z> d{ d|   Z? d} d~   Z@ d d   ZA d d   ZB d d   ZC d d   ZD d d   ZE d d   ZF d d   ZG d d   ZH d d   ZI d d   ZJ d d   ZK d d   ZL d d   ZM d d   ZN dp S)r   c               @   s   e  Z d  Z d S)zIMAP4.errorN)__name__
__module____qualname__ r;   r;   ,/opt/alt/python35/lib64/python3.5/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 |  _	 |  j
   |  j | |  y |  j   Wn8 t k
 r y |  j   Wn t k
 r Yn X  Yn Xd  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   sF   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)rQ   r;   r;   r<   rK      s    		zIMAP4._mode_asciic             C   s:   d |  _  d |  _ t j t  |  _ t j 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 j d d   |  _ t j d |  j d t j  |  _ |  j   |  _	 d |  j
 k rh d |  _ n- d |  j
 k r d |  _ n |  j |  j	   |  j   x* t D]" } | |  j k r q | |  _ d  SW|  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	   random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   s3   | t  k r t |  | j    St 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 |  j    Wn t k
 r" Yn Xd  S)N)logoutrP   )rQ   argsr;   r;   r<   __exit__	  s    zIMAP4.__exit__c             C   s   t  j |  j |  j f  S)N)socketcreate_connectionrR   rS   )rQ   r;   r;   r<   _create_socket  s    zIMAP4._create_socketc             C   s:   | |  _  | |  _ |  j   |  _ |  j j d  |  _ d  S)Nrb)rR   rS   rw   sockmakefilefile)rQ   rR   rS   r;   r;   r<   rL     s    		z
IMAP4.openc             C   s   |  j  j |  S)N)r{   read)rQ   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)r{   readline_MAXLINElenr=   )rQ   liner;   r;   r<   r   '  s    zIMAP4.readlinec             C   s   |  j  j |  d  S)N)ry   sendall)rQ   datar;   r;   r<   send/  s    z
IMAP4.sendc             C   s   |  j  j   zp y |  j j t j  WnR t k
 r{ } z2 | j t j k ri t	 | d d  d k ri   WYd  d  } ~ Xn XWd  |  j j   Xd  S)Nwinerrorr   i&'  )
r{   closery   rO   ru   	SHUT_RDWRrP   errnoZENOTCONNrl   )rQ   excr;   r;   r<   rO   4  s    zIMAP4.shutdownc             C   s   |  j  S)N)ry   )rQ   r;   r;   r<   ru   D  s    zIMAP4.socketc             C   s]   d } |  j  d d  g |  \ } } | d r8 | | f S|  j   \ } } |  j  | | |  S)NZRECENTr`   r~   )_untagged_responsenoop)rQ   nametypdatr;   r;   r<   recentP  s    	

zIMAP4.recentc             C   s   |  j  | d  g | j    S)N)r   upper)rQ   coder;   r;   r<   responsea  s    zIMAP4.responsec             C   s   d } | s d } | r? | d | d
 f d k rE d | } n d  } | rZ t  |  } n d  } t j t |  } |  j r d | d	 } | |  _ |  j | | | |  S)Nr   INBOXr   r~   ()z(%s)s   UTF8 (   )r   )r   r   )r   MapCRLFsubCRLFrV   rD   _simple_command)rQ   mailboxflags	date_timemessager   rD   r;   r;   r<   appendo  s    		zIMAP4.appendc             C   st   | j    } t |  j |  _ |  j d |  \ } } | d k ra |  j | d j d d    d |  _ | | f S)Nr   r`   r~   zutf-8replacer   r   )r   _AuthenticatorprocessrD   r   r=   decoderC   )rQ   Z	mechanismZ
authobjectmechr   r   r;   r;   r<   authenticate  s    	zIMAP4.authenticatec             C   s.   d } |  j  |  \ } } |  j | | |  S)Nr   )r   r   )rQ   r   r   r   r;   r;   r<   
capability  s    zIMAP4.capabilityc             C   s   |  j  d  S)Nr   )r   )rQ   r;   r;   r<   check  s    zIMAP4.checkc             C   s0   z |  j  d  \ } } Wd  d |  _ X| | f S)Nr   r   )r   rC   )rQ   r   r   r;   r;   r<   r     s    
zIMAP4.closec             C   s   |  j  d | |  S)Nr   )r   )rQ   message_setZnew_mailboxr;   r;   r<   copy  s    z
IMAP4.copyc             C   s   |  j  d |  S)Nr   )r   )rQ   r   r;   r;   r<   create  s    zIMAP4.createc             C   s   |  j  d |  S)Nr   )r   )rQ   r   r;   r;   r<   delete  s    zIMAP4.deletec             C   s   |  j  d | |  S)Nr   )r   )rQ   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 ENABLEr`   zUTF8=ACCEPT)rh   r   r=   r   r   r_   )rQ   r   r   r   r;   r;   r<   enable  s    
zIMAP4.enablec             C   s.   d } |  j  |  \ } } |  j | | |  S)Nr   )r   r   )rQ   r   r   r   r;   r;   r<   expunge  s    	zIMAP4.expungec             C   s4   d } |  j  | | |  \ } } |  j | | |  S)Nr   )r   r   )rQ   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   )rQ   r   r   r   r;   r;   r<   getacl  s    zIMAP4.getaclc             C   s1   |  j  d | | |  \ } } |  j | | d  S)Nr   
ANNOTATION)r   r   )rQ   r   entryZ	attributer   r   r;   r;   r<   getannotation  s    zIMAP4.getannotationc             C   s+   |  j  d |  \ } } |  j | | d  S)Nr    QUOTA)r   r   )rQ   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   )rQ   r   r   r   ZquotaZ	quotarootr;   r;   r<   getquotaroot)  s    zIMAP4.getquotarootz""*c             C   s4   d } |  j  | | |  \ } } |  j | | |  S)Nr#   )r   r   )rQ   	directorypatternr   r   r   r;   r;   r<   list4  s    z
IMAP4.listc             C   sV   |  j  d | |  j |   \ } } | d k rC |  j | d   d |  _ | | f S)Nr$   r`   r~   r   r   )r   _quoter=   rC   )rQ   userpasswordr   r   r;   r;   r<   login@  s
    $	zIMAP4.loginc             C   s&   | | |  _  |  _ |  j d |  j  S)NzCRAM-MD5)r   r   r   _CRAM_MD5_AUTH)rQ   r   r   r;   r;   r<   login_cram_md5N  s    zIMAP4.login_cram_md5c             C   s]   d d  l  } t |  j t  r0 |  j j d  n |  j } |  j d | j | | d  j   S)Nr   zutf-8 md5)hmac
isinstancer   strencoder   ZHMAC	hexdigest)rQ   Z	challenger   pwdr;   r;   r<   r   W  s    $	zIMAP4._CRAM_MD5_AUTHc             C   s   d |  _  y |  j d  \ } } Wn, d d t j   d  d  g } } Yn X|  j   d |  j k r{ d |  j d f S| | f S)Nr   NOz%s: %s   BYE)rC   r   sysexc_inforO   rF   )rQ   r   r   r;   r;   r<   rr   _  s    	  )
zIMAP4.logoutc             C   s4   d } |  j  | | |  \ } } |  j | | |  S)Nr%   )r   r   )rQ   r   r   r   r   r   r;   r;   r<   lsubo  s    z
IMAP4.lsubc             C   s+   |  j  d |  \ } } |  j | | d  S)Nr"   )r   r   )rQ   r   r   r   r;   r;   r<   myrightsz  s    zIMAP4.myrightsc             C   s.   d } |  j  |  \ } } |  j | | |  S)Nr&   )r   r   )rQ   r   r   r   r;   r;   r<   	namespace  s    zIMAP4.namespacec             C   s   |  j  d  S)Nr'   )r   )rQ   r;   r;   r<   r     s    z
IMAP4.noopc             C   s:   d } |  j  | | | | |  \ } } |  j | | 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 } |  j  d |  S)Nr)   )r   )rQ   r   r   r;   r;   r<   	proxyauth  s    	zIMAP4.proxyauthc             C   s   |  j  d | |  S)Nr*   )r   )rQ   Z
oldmailboxZ
newmailboxr;   r;   r<   rename  s    zIMAP4.renamec             G   sp   d } | rE |  j  r$ t j d   |  j | d | |  \ } } n |  j | |  \ } } |  j | | |  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   s   i  |  _  | |  _ | r! d } n d } |  j | |  \ } } | d k r^ d |  _ | | f Sd |  _ d |  j  k r | r |  j d |   | |  j  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   |  j  d | | |  S)Nr-   )r   )rQ   r   r   Zwhatr;   r;   r<   setacl  s    zIMAP4.setaclc             G   s+   |  j  d |  \ } } |  j | | d  S)Nr.   r   )r   r   )rQ   rs   r   r   r;   r;   r<   setannotation  s    zIMAP4.setannotationc             C   s.   |  j  d | |  \ } } |  j | | d  S)Nr/   r   )r   r   )rQ   r   Zlimitsr   r   r;   r;   r<   setquota  s    zIMAP4.setquotac             G   s[   d } | d | d f d k r* d | } |  j  | | | |  \ } } |  j | | |  S)	Nr0   r   r~   r   r   z(%s)r   )r   r   )r   r   )rQ   Zsort_criteriar   search_criteriar   r   r   r;   r;   r<   sort  s
    
z
IMAP4.sortNc             C   s   d } t  s |  j d   |  j r3 |  j d   | |  j k rQ |  j d   | d  k ri t j   } |  j |  \ } } | d k r | j |  j	 d |  j
 |  _	 |  j	 j d  |  _ d |  _ |  j   n |  j d	   |  j | | |  S)
Nr1   zSSL support missingzTLS session already establishedzTLS not supported by serverr`   server_hostnamerx   TzCouldn't establish TLS session)HAVE_SSLr=   rJ   r>   rh   ssl_create_stdlib_contextr   wrap_socketry   rR   rz   r{   rf   r   )rQ   ssl_contextr   r   r   r;   r;   r<   starttls  s$    		zIMAP4.starttlsc             C   s4   d } |  j  | | |  \ } } |  j | | |  S)Nr2   )r   r   )rQ   r   namesr   r   r   r;   r;   r<   status(  s    zIMAP4.statusc             C   sU   | d | d f d	 k r$ d | } |  j  d | | |  \ } } |  j | | d  S)
Nr   r~   r   r   z(%s)r3   r   r   )r   r   )r   r   )rQ   r   commandr   r   r   r;   r;   r<   store4  s    
zIMAP4.storec             C   s   |  j  d |  S)Nr4   )r   )rQ   r   r;   r;   r<   	subscribe?  s    zIMAP4.subscribec             G   s7   d } |  j  | | | |  \ } } |  j | | |  S)Nr5   )r   r   )rQ   Zthreading_algorithmr   r   r   r   r   r;   r;   r<   threadG  s    zIMAP4.threadc             G   s   | j    } | t k r+ |  j d |   |  j t | k rj |  j d | |  j d j t |  f   d } |  j | | |  \ } } | d	 k r | } n d } |  j | | |  S)
NzUnknown IMAP4 UID command: %sz9command %s illegal in state %s, only allowed in states %sz, r6   r+   r0   r5   r   )r+   r0   r5   )r   rk   r=   rC   joinr   r   )rQ   r   rs   r   r   r   r;   r;   r<   uidQ  s    			z	IMAP4.uidc             C   s   |  j  d |  S)Nr7   )r   )rQ   r   r;   r;   r<   unsubscribej  s    zIMAP4.unsubscribec             G   s8   | j    } | t k r( |  j f t | <|  j | |  S)N)r   rk   rC   r   )rQ   r   rs   r;   r;   r<   xatomr  s    
zIMAP4.xatomc             C   sL   | d  k r d } |  j  } | | k r; | | j |  n | g | | <d  S)N    )rF   r   )rQ   r   r   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   )rF   r   r>   r   rW   )rQ   Zbyer;   r;   r<   
_check_bye  s    zIMAP4._check_byec       
      G   s  |  j  t | k rH d  |  _ |  j d | |  j  d j t |  f   x' d D] } | |  j k rO |  j | =qO Wd |  j k r |  j r |  j d   |  j   } t	 | |  j
  } | d | } xL | D]D } | d  k r q t | t  rt	 | |  j
  } | d | } q W|  j } | d  k	 r}d  |  _ t |  t |  j  k rW| } n& d  } | t	 d	 t |  |  j
  } y |  j | t  Wn8 t k
 r}	 z |  j d
 |	   WYd  d  }	 ~	 Xn X| d  k r| Sx x! |  j   r|  j | r| SqW| r| |  j  } y |  j |  |  j t  Wn8 t k
 rq}	 z |  j d
 |	   WYd  d  }	 ~	 Xn X| sPqW| 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)r`   r   r   )rC   rk   rD   r=   r   rF   rH   r?   _new_tagbytesrW   r   r   type_commandr   r   r   rP   r>   re   rE   rG   )
rQ   r   rs   r   tagr   argrD   Z	literatorvalr;   r;   r<   r     s^    			
 			 &&zIMAP4._commandc             C   s   | d k r |  j    y |  j |  \ } } Wn |  j k
 rr } z |  j d | | f   WYd  d  } ~ XnA |  j k
 r } z |  j d | | f   WYd  d  } ~ Xn 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=   )rQ   r   r   r   r   r  r;   r;   r<   _command_complete  s    
+,
zIMAP4._command_completec             C   sk   |  j    \ } } | d  g k r0 |  j d   t | d |  j  } | j   } t | j    |  _ d  S)Nz"no CAPABILITY response from serverr~   r   )r   r=   r   rW   r   tuplesplitrh   )rQ   r   r   r;   r;   r<   rf     s    zIMAP4._get_capabilitiesc             C   sc  |  j    } |  j |  j |  r |  j j d  } | |  j k rU |  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 r0|  j t |  r|  j j d  |  _ d  S|  j d |   |  j j d  } t | |  j  } |  j j d  } | d  k rxd } | r| d | } xb |  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}   r`   r   r   )r`   r   r   )	_get_line_matchrd   mogrouprE   r>   r   rW   Untagged_responser^   ContinuationrG   r\   intr|   r   Response_code)rQ   respr   r   r   Zdat2r}   r   r;   r;   r<   re     sH      zIMAP4._get_responsec             C   sx   xq |  j  | } | d  k	 r* |  j  | =| S|  j   y |  j   Wq |  j k
 ro } z   WYd  d  } ~ Xq Xq Wd  S)N)rE   r   re   r>   )rQ   r   resultr  r;   r;   r<   r  S  s    

zIMAP4._get_tagged_responsec             C   sW   |  j    } | s! |  j d   | j d  sC |  j d |   | d  d  } | S)Nzsocket error: EOFs   
z#socket error: unterminated line: %rr   )r   r>   endswith)rQ   r   r;   r;   r<   r  n  s    zIMAP4._get_linec             C   s   | j  |  |  _ |  j d  k	 S)N)matchr	  )rQ   Zcresr;   r;   r<   r    s    zIMAP4._matchc             C   sC   |  j  t t |  j  |  j  } |  j d |  _ d  |  j | <| S)Nr~   )rc   r   r   rI   rW   rE   )rQ   r   r;   r;   r<   r     s    "zIMAP4._new_tagc             C   s0   | j  d d  } | j  d d  } d | d S)N\z\\"z\")r   )rQ   r  r;   r;   r<   r     s    zIMAP4._quotec             G   s   |  j  | |  j | |   S)N)r  r   )rQ   r   rs   r;   r;   r<   r     s    zIMAP4._simple_commandc             C   sN   | d k r | | f S| |  j  k r2 | d  g f S|  j  j |  } | | f S)Nr   )rF   pop)rQ   r   r   r   r   r;   r;   r<   r     s    
zIMAP4._untagged_response)Or8   r9   r:   rN   r=   r>   r?   
IMAP4_PORTrT   rK   r_   rM   rp   rq   rt   rw   rL   r|   r   r   rO   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   .*
			
 	
M	Pc               @   sI   e  Z d  Z d e d d d d d  Z d d   Z d e d d  Z d S)		IMAP4_SSLr@   Nc             C   s   | d  k	 r$ | d  k	 r$ t  d   | d  k	 rH | d  k	 rH t  d   | |  _ | |  _ | d  k r~ t j d | d |  } | |  _ t j |  | |  d  S)Nz8ssl_context and keyfile arguments are mutually exclusivez9ssl_context and certfile arguments are mutually exclusivecertfilekeyfile)
ValueErrorr  r  r   r   r   r   rT   )rQ   rR   rS   r  r  r   r;   r;   r<   rT     s    				zIMAP4_SSL.__init__c             C   s(   t  j |   } |  j j | d |  j S)Nr   )r   rw   r   r   rR   )rQ   ry   r;   r;   r<   rw     s    zIMAP4_SSL._create_socketc             C   s   t  j |  | |  d  S)N)r   rL   )rQ   rR   rS   r;   r;   r<   rL     s    zIMAP4_SSL.open)r8   r9   r:   IMAP4_SSL_PORTrT   rw   rL   r;   r;   r;   r<   r    s   	r  c               @   s^   e  Z d  Z d d   Z d 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   rT   )rQ   r   r;   r;   r<   rT     s    	zIMAP4_stream.__init__Nc             C   s   d  |  _  d  |  _ d  |  _ d  |  _ t j |  j d t d t j d t j d d d d |  _	 |  j	 j
 |  _ |  j	 j |  _ d  S)NbufsizestdinstdoutshellT	close_fds)rR   rS   ry   r{   
subprocessPopenr   r   PIPEr   r  	writefiler   readfile)rQ   rR   rS   r;   r;   r<   rL     s    				zIMAP4_stream.openc             C   s   |  j  j |  S)N)r'  r|   )rQ   r}   r;   r;   r<   r|   +  s    zIMAP4_stream.readc             C   s   |  j  j   S)N)r'  r   )rQ   r;   r;   r<   r   0  s    zIMAP4_stream.readlinec             C   s!   |  j  j |  |  j  j   d  S)N)r&  writeflush)rQ   r   r;   r;   r<   r   5  s    zIMAP4_stream.sendc             C   s+   |  j  j   |  j j   |  j j   d  S)N)r'  r   r&  r   wait)rQ   r;   r;   r<   rO   ;  s    zIMAP4_stream.shutdown)	r8   r9   r:   rT   rL   r|   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   I  s    z_Authenticator.__init__c             C   s5   |  j  |  j |   } | d  k r( d S|  j |  S)N   *)r   r   r   )rQ   r   retr;   r;   r<   r   L  s    z_Authenticator.processc             C   s   d } t  | t  r$ | j d  } xt | r t |  d k rb | d  d  } | d d   } n | } d } t j |  } | r' | | d  d  } q' W| S)Nr   zutf-80   r~   r   )r   r   r   r   binasciiZ
b2a_base64)rQ   inpZoupter;   r;   r<   r   R  s    		z_Authenticator.encodec             C   s   | s
 d St  j |  S)Nr   )r.  Z
a2b_base64)rQ   r/  r;   r;   r<   r   j  s    z_Authenticator.decodeN)r8   r9   r:   rT   r   r   r   r;   r;   r;   r<   r   C  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>p  s   	 r4  r~   c          	   C   s4  t  j |   } | s d  St | 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	  r5  r6  r7  r8  r9  r:  r;  r<  r=  Zzonettutcr;   r;   r<   r   r  s$    !c             C   s\   d } d } t  t |    }  x7 |  rW t |  d  \ }  } | | | d  | } q! W| S)Nr   s   ABCDEFGHIJKLMNOP   r~   )r  absdivmod)numr  ZAPmodr;   r;   r<   r	     s     	c             C   s2   t  j |   } | s f  St | j d  j    S)Nr   )Flagsr  r  r
  r  )r  r	  r;   r;   r<   r
     s    c             C   s  t  |  t t f  r3 t j |  t j  j   } n0t  |  t  r y |  j	 } Wnq t
 k
 r t j r |  d } | d k r t j t j |    d } t j t j f | } n
 t j } Yn Xt d |  } t |  d  d  d t |   } nl t  |  t  r*|  j d  k r!t d   |  } n9 t  |  t  rW|  d |  d f d k rW|  St 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   rF  Z
astimezoner  	tm_gmtoffrn   rC  daylightrD  mktimealtzoner   rO  r  r   formatMonthsZmonthstrftime)r   ZdtZgmtoffdstZdeltafmtr;   r;   r<   r     s0    		
%	)__main__zd:s:z-dz-sr@   zIMAP password for %s on %s: 	localhostzJFrom: %(user)s@localhost%(lf)sSubject: IMAP4 test%(lf)s%(lf)sdata...%(lf)sr   Zlf
r   r   z
/tmp/xxx 1r   z/tmp/yyyz
/tmp/yyz 2r   r   z/tmpzyy*r   r   ZSUBJECTZtestr   1z(FLAGS INTERNALDATE RFC822)r   FLAGSz
(\Deleted)r   r   r   r   r   ZUIDVALIDITYr   ZALLr   rr   c             C   sf   t  j d |  | f  t t  |   |   \ } } t  j d |  | | f  | d k rb | d  | S)Nz%s %sz%s => %s %sr   r   )M_mesgrl   )cmdrs   r   r   r;   r;   r<   run  s     
rb  zPROTOCOL_VERSION = %szCAPABILITIES = %rz/tmp/zyy%z.*"([^"]+)"$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   ru   r#  r   rC  rB  r   r   r   ior   r   r   ImportError__all__r   rA   r  r  rg   r   rk   rY   r  rL  r@  r[   r\   r   r  r  r^   rZ   r]   r   r  r   r   r   r  rV  	enumeraterA  r   r	   r
   r   r8   ZgetoptZgetpassargvZoptlistrs   r=   r  Zstream_commandoptr  rR   ZgetuserZUSERZPASSWDZ	test_mesgZ	test_seq1Z	test_seq2rb  r_  rC   r`  ri   rh   ra  mlr  r	  r
  pathr   r   printr;   r;   r;   r<   <module>   s:  l
																		    [19,##))%  	
					  
