
    4bh                     f   	 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 	 ddlZdZg dZdZdZd	Zd
ZdZdZdZi 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i d$dd%dd&dd'dd(dd)dd*dd+dd,dd-dd.dd/dd0dd1dd2dd3dd4dddddddddd5Z ej6                  d6      Z ej6                  d7      Z ej6                  d8      Z ej6                  d9ej>                        Z  ej6                  d:      Z! ej6                  d;      Z" ej6                  d<      Z# ej6                  d=ej>                        Z$d9Z%d=Z& G d> d?      Z'er G d@ dAe'      Z(ejS                  dA        G dB dCe'      Z* G dD dE      Z+dFjY                  dG      Z- e.e-dHd       D  ci c]  \  } }|j_                         | dHz    c}} Z0dI Z1dJ Z2dK Z3dL Z4e5dMk(  rddl6Z6ddl7Z7	  e6jl                  ejp                  dHd dN      \  Z9Z:dZ=e9D ]!  \  Z>Z<e>dPk(  r	 e?e<      Ze>dQk(  se<Z=e:re=fZ:# e:sdRZ:e:d   Z@ e7j                         ZB e7jn                  dSeBdTe@xs dUdV      ZCdWeBdXdYz  ZDdZeBeCffd[d\d]d^d_ddeDffd`dadbdcdddedfdgdhfZEdidjdkdld^dddeDffdgdmfZFdn ZG	 e=r	 e*e=      ZHn e'e@      ZHeHj                  dok(  reEdHd ZEeHj                  dpeHj                  z         eHj                  dqeHj                         eED ]  \  ZMZ: eGeMe:         eGdrds      D ]F  ZN ej                  dteN      ZPePrePj                  dH      ZRneNjY                         du   ZR eGdveRf       H eFD ]>  \  ZMZ: eGeMe:      ZSeMe:fdkk7  reSdu   jY                         ZTeTs- eGdwddxeTdu   z  dyf       @  eUdz       yy# e$ r dZY w xY wc c}} w # e6jv                  $ rZ<dO\  Z9Z:Y dZ<[<dZ<[<ww xY w#   eUd{       es eUd|ejp                  d   z          xY w)}z2.58    N)datetimetimezone	timedelta)DEFAULT_BUFFER_SIZETF)IMAP4IMAP4_streamInternaldate2tupleInt2AP
ParseFlagsTime2Internaldate   
   i  )	IMAP4REV1r   i@B i   APPEND)AUTHSELECTEDAUTHENTICATE)NONAUTH
CAPABILITY)r   r   r   LOGOUTCHECK)r   CLOSECOPYCREATEDELETE	DELETEACLENABLE)r   EXAMINEEXPUNGEFETCHGETACLGETANNOTATIONGETQUOTAGETQUOTAROOTMYRIGHTSLISTLOGINr   LSUB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                      e Zd Z	  G d de      Z G d de      Z G d de      Zdedfd	Zd
 Z	d Z
d Zd Zd Zd Zd ZdedfdZd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd  Zd! Z d" Z!d# Z"d$ Z#d% Z$d& Z%d' Z&d( Z'dQd)Z(d* Z)d+ Z*d, Z+d- Z,dQd.Z-d/ Z.d0 Z/d1 Z0d2 Z1d3 Z2d4 Z3d5 Z4dRd6Z5d7 Z6d8 Z7d9 Z8d: Z9dSd;Z:d< Z;d= Z<d> Z=d? Z>d@ Z?dA Z@dB ZAdC ZBdD ZCdE ZDdF ZEdG ZFdH ZGdI ZHdTdJZIdK ZJdL ZKdM ZLdN ZMdO ZNdP ZOy)Ur   c                       e Zd Zy)IMAP4.errorN__name__
__module____qualname__     1/opt/python-3.12.12/usr/lib/python3.12/imaplib.pyerrorr?          rE   rG   c                       e Zd Zy)IMAP4.abortNr@   rD   rE   rF   abortrJ      rH   rE   rK   c                       e Zd Zy)IMAP4.readonlyNr@   rD   rE   rF   readonlyrM      rH   rE   rN    Nc                 N   t         | _        d| _        d | _        i | _        i | _        d| _        d| _        d| _        d| _	        | j                          | j                  |||       	 | j                          y # t        $ r" 	 | j                           # t        $ r Y  w xY ww xY w)Nr   rO   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timeouts       rF   __init__zIMAP4.__init__   s    

!"$%'"  % 			$g&	MMO 	   	s0   (A9 9	B$BB$	B B$B  B$c                     d| _         d| _        t        j                  t        t        j
                        | _        t        j                  t        t        j
                        | _        y )NFascii)	utf8_enabled	_encodingrecompile_LiteralASCIILiteral_Untagged_statusUntagged_statusrb   s    rF   r[   zIMAP4._mode_ascii   s?    ! zz(BHH5!zz*:BHHErE   c                     d| _         d| _        t        j                  t              | _        t        j                  t              | _        y )NTutf-8)ri   rj   rk   rl   rm   ro   rp   rq   rr   s    rF   
_mode_utf8zIMAP4._mode_utf8   s3      zz(+!zz*:;rE   c                    t        t        j                  dd            | _        t	        j
                  d| j                  z   dz   t        j                        | _        	 | j                         | _        d| j                   v rd| _        n1d| j                   v rd| _        n| j%                  | j                        | j'                          	 t*        D ]  }|| j(                  vr|| _         y  | j%                  d	      )
Ni   i  s   (?P<tag>s"   \d+) (?P<type>[A-Z]+) (?P<data>.*)PREAUTHr   OKr   zserver not IMAP4 compliant)r
   randomrandinttagprerk   rl   rn   tagre_cmd_log_len_cmd_log_idx_cmd_logrR   _mesg__version___get_responsewelcomerV   rS   rG   _get_capabilitiescapabilitiesAllowedVersionsPROTOCOL_VERSION)rb   versions     rF   r]   zIMAP4._connect   s     V^^D%89ZZ++!&@!ABD((L
  ))+///DJT,,,"DJ**T\\**  'Gd///$+D!	 ' jj566rE   c                 b    |t         v rt        | |j                               S t        d|z        )NzUnknown IMAP4 command: '%s')CommandsgetattrlowerAttributeError)rb   attrs     rF   __getattr__zIMAP4.__getattr__  s.    84..:TABBrE   c                     | S NrD   rr   s    rF   	__enter__zIMAP4.__enter__  s    rE   c                 d    | j                   dk(  ry 	 | j                          y # t        $ r Y y w xY wNr   )rS   logoutr`   )rb   argss     rF   __exit__zIMAP4.__exit__  s1    ::!	KKM 		s   # 	//c                 "   ||st        d      | j                  sd n| j                  }t        j                  d| | j                  | j                         || j                  f}|t        j                  ||      S t        j                  |      S )Nz0Non-blocking socket (timeout=0) is not supportedzimaplib.open)
ValueErrorrc   sysauditrd   socketcreate_connection)rb   re   rc   addresss       rF   _create_socketzIMAP4._create_socket&  s{     wOPP99t$))		.$		499=#++GW==''00rE   c                     	 || _         || _        | j                  |      | _        | j                  j	                  d      | _        y )Nrb)rc   rd   r   sockmakefilefilera   s       rF   r\   z
IMAP4.open3  s?    	
 		''0	II&&t,	rE   c                    	 t        |t              }| j                  j                  |      }||k  rTt	        |      |k(  rFt        |||z
        }|| j                  j                  |      z  }||z  }||k  rt	        |      |k(  rF|S r   )min_SAFE_BUF_SIZEr   readlen)rb   sizecursizedatadeltas        rF   r   z
IMAP4.read?  s    ,dN+yy~~g&nTg!50EDIINN5))DuG nTg!5 rE   c                     	 | j                   j                  t        dz         }t        |      t        kD  r| j	                  dt        z        |S )N   zgot more than %d bytes)r   readline_MAXLINEr   rG   rb   lines     rF   r   zIMAP4.readlineJ  sC    $yy!!(Q,/t9x**5@AArE   c                 j    	 t        j                  d| |       | j                  j                  |       y )Nzimaplib.send)r   r   r   sendallrb   r   s     rF   sendz
IMAP4.sendR  s'    "		.$-		$rE   c                    	 | j                   j                          	 | j                  j                  t        j
                         | j                  j                          y # t        $ r8}|j                  t        j                  k7  rt        |dd      dk7  r Y d }~Wd }~ww xY w# | j                  j                          w xY w)Nwinerrorr   i&'  )
r   closer   r_   r   	SHUT_RDWRr`   errnoENOTCONNr   )rb   excs     rF   r_   zIMAP4.shutdownX  s    .		
	IIv//0 IIOO  	 		U^^+3
A.%7	 IIOOs)   )A! !	B"*.BB% B""B% %Cc                     	 | j                   S r   )r   rr   s    rF   r   zIMAP4.socketh  s    	 yyrE   c                     	 d}| j                  dd g|      \  }}|d   r||fS | j                         \  }}| j                  |||      S )NRECENTrx   )_untagged_responsenooprb   nametypdats       rF   recentzIMAP4.recentt  s\    	 **4$>Sr78O99;S&&sC66rE   c                 H    	 | j                  |d g|j                               S r   )r   upper)rb   codes     rF   responsezIMAP4.response  s&    	 &&tdVTZZ\BBrE   c                     	 d}|sd}|r|d   |d   fdk7  rd|z  }nd }|rt        |      }nd }t        j                  t        |      }| j                  rd|z   dz   }|| _        | j                  ||||      S )	Nr   INBOXr   r   ()(%s)s   UTF8 (   ))r   MapCRLFsubCRLFri   rT   _simple_command)rb   mailboxflags	date_timemessager   rT   s          rF   appendzIMAP4.append  s    	 Gar#y0E))4II++dG,')D0G##D'5)DDrE   c                     	 |j                         }t        |      j                  | _        | j	                  d|      \  }}|dk7  r$| j                  |d   j                  dd            d| _        ||fS )Nr   rx   r   rt   replacer   )r   _AuthenticatorprocessrT   r   rG   decoderS   )rb   	mechanism
authobjectmechr   r   s         rF   authenticatezIMAP4.authenticate  st    	  
 &j199''=S$;**SW^^GY?@@
CxrE   c                 V    	 d}| j                  |      \  }}| j                  |||      S )Nr   r   r   r   s       rF   
capabilityzIMAP4.capability  s7    	0 ''-S&&sC66rE   c                 &    	 | j                  d      S )Nr   r   rr   s    rF   checkzIMAP4.check  s    	 ##G,,rE   c                 \    	 	 | j                  d      \  }}d| _        ||fS # d| _        w xY w)Nr   r   r   rS   rb   r   r   s      rF   r   zIMAP4.close  s;    		 ++G4HCDJCx  DJ   " 	+c                 *    	 | j                  d||      S )Nr   r   )rb   message_setnew_mailboxs      rF   copyz
IMAP4.copy  s    	 ##FKEErE   c                 (    	 | j                  d|      S )Nr   r   rb   r   s     rF   createzIMAP4.create      	 ##Hg66rE   c                 (    	 | j                  d|      S )Nr   r   r   s     rF   deletezIMAP4.delete  r   rE   c                 *    	 | j                  d||      S )Nr   r   )rb   r   whos      rF   	deleteaclzIMAP4.deleteacl  s    	 ##K#>>rE   c                     	 d| j                   vrt        j                  d      | j                  d|      \  }}|dk(  r"d|j	                         v r| j                          ||fS )Nr   zServer does not support ENABLErx   zUTF8=ACCEPT)r   r   rG   r   r   ru   )rb   r   r   r   s       rF   enablezIMAP4.enable  sh    	 4,,,++>??((:>	T$;=J,<,<,>>OODyrE   c                 V    	 d}| j                  |      \  }}| j                  |||      S )Nr   r   r   s       rF   expungezIMAP4.expunge  s7    	 ''-S&&sC66rE   c                 Z    	 d}| j                  |||      \  }}| j                  |||      S )Nr    r   )rb   r   message_partsr   r   r   s         rF   fetchzIMAP4.fetch"  s;    	 ''k=IS&&sC66rE   c                 T    	 | j                  d|      \  }}| j                  ||d      S )Nr!   ACLr   rb   r   r   r   s       rF   getaclzIMAP4.getacl1  s4    	 ''':S&&sC77rE   c                 X    	 | j                  d|||      \  }}| j                  ||d      S )Nr"   
ANNOTATIONr   )rb   r   entry	attributer   r   s         rF   getannotationzIMAP4.getannotation:  s8    	! ''%SS&&sC>>rE   c                 T    	 | j                  d|      \  }}| j                  ||d      S )Nr#   QUOTAr   )rb   rootr   r   s       rF   getquotazIMAP4.getquotaB  s4    	 ''
D9S&&sC99rE   c                     	 | j                  d|      \  }}| j                  ||d      \  }}| j                  ||d      \  }}|||gfS )Nr$   r  	QUOTAROOTr   )rb   r   r   r   quota	quotaroots         rF   getquotarootzIMAP4.getquotarootM  s_    	 ''@S,,S#w?
U00c;GYY&&&rE   c                 Z    	 d}| j                  |||      \  }}| j                  |||      S )Nr&   r   rb   	directorypatternr   r   r   s         rF   listz
IMAP4.listX  ;    	 ''iAS&&sC66rE   c                     	 | j                  d|| j                  |            \  }}|dk7  r| j                  |d         d| _        ||fS )Nr'   rx   r   r   )r   _quoterG   rS   )rb   userpasswordr   r   s        rF   loginzIMAP4.logind  sT    	 ''t{{87LMS$;**SW%%
CxrE   c                 Z    	 ||c| _         | _        | j                  d| j                        S )NzCRAM-MD5)r  r   r   _CRAM_MD5_AUTH)rb   r  r   s      rF   login_cram_md5zIMAP4.login_cram_md5r  s2    	 $( 	4=  T-@-@AArE   c                     	 dd l }t        | j                  t              r| j                  j	                  d      n| j                  }| j
                  dz   |j                  ||d      j                         z   S )Nr   rt    md5)hmac
isinstancer   strencoder  HMAC	hexdigest)rb   	challenger(  pwds       rF   r#  zIMAP4._CRAM_MD5_AUTH{  s\    ?0:4==#0Nt}}##G,26-- 	yy33	5!A!K!K!MMMrE   c                 b    	 d| _         | j                  d      \  }}| j                          ||fS r   )rS   r   r_   r   s      rF   r   zIMAP4.logout  s6    	 
''1SCxrE   c                 Z    	 d}| j                  |||      \  }}| j                  |||      S )Nr(   r   r  s         rF   lsubz
IMAP4.lsub  r  rE   c                 T    	 | j                  d|      \  }}| j                  ||d      S )Nr%   r   r  s       rF   myrightszIMAP4.myrights  s4    	 &&z7;C&&sC<<rE   c                 V    	 d}| j                  |      \  }}| j                  |||      S )Nr*   r   r   s       rF   	namespacezIMAP4.namespace  s7    	 ''-S&&sC66rE   c                 (    	 	 | j                  d      S )Nr+   )rR   _dump_urrV   r   rr   s    rF   r   z
IMAP4.noop  s    	  ##F++rE   c                 ^    	 d}| j                  |||||      \  }}| j                  ||d      S )Nr,   r    r   )rb   message_nummessage_partstartlengthr   r   r   s           rF   partialzIMAP4.partial  s@    	 ''k<PVWS&&sC99rE   c                 ,    	 d}| j                  d|      S )Nr-   r   )rb   r  r   s      rF   	proxyauthzIMAP4.proxyauth  s!    	 ##K66rE   c                 *    	 | j                  d||      S )Nr.   r   )rb   
oldmailbox
newmailboxs      rF   renamezIMAP4.rename  s    	 ##Hj*EErE   c                     	 d}|r:| j                   rt        j                  d       | j                  |d|g| \  }}n | j                  |g| \  }}| j	                  |||      S )Nr/   z'Non-None charset not valid in UTF8 modeCHARSET)ri   r   rG   r   r   )rb   charsetcriteriar   r   r   s         rF   searchzIMAP4.search  sy    	   kk"KLL+t++D)WPxPHC+t++D<8<HC&&sC66rE   c                    	 i | _         || _        |rd}nd}| j                  ||      \  }}|dk7  rd| _        ||fS d| _        d| j                   v r|s	 | j                  d|z        || j                   j                  dd g      fS )	Nr   r0   rx   r   r   	READ-ONLYz%s is not writableEXISTS)rV   rX   r   rS   rR   r8  rN   get)rb   r   rN   r   r   r   s         rF   selectzIMAP4.select  s    
	 #%#DD''g6S$;DJ8O
$111  -- 4w >??D++//4&AAArE   c                 ,    	 | j                  d|||      S )Nr1   r   )rb   r   r   whats       rF   setaclzIMAP4.setacl  s     	 ##HgsDAArE   c                 V    	  | j                   dg| \  }}| j                  ||d      S )Nr2   r
  r   )rb   r   r   r   s       rF   setannotationzIMAP4.setannotation  s9    	 (4''?$?S&&sC>>rE   c                 V    	 | j                  d||      \  }}| j                  ||d      S )Nr3   r  r   )rb   r  limitsr   r   s        rF   setquotazIMAP4.setquota  s6    	 ''
D&AS&&sC99rE   c                     	 d}|d   |d   fdk7  rd|z  } | j                   |||g| \  }}| j                  |||      S )Nr4   r   r   r   r   r   )rb   sort_criteriarG  search_criteriar   r   r   s          rF   sortz
IMAP4.sort$  se    	  !]2./9<"]2M'4''mWWWS&&sC66rE   c                    d}t         s| j                  d      | j                  r| j                  d      || j                  vr| j                  d      |t        j                         }| j                  |      \  }}|dk(  rd|j                  | j                  | j                        | _	        | j                  j                  d      | _        d| _        | j                          n| j                  d	      | j                  |||      S )
Nr5   zSSL support missingzTLS session already establishedzTLS not supported by serverrx   server_hostnamer   TzCouldn't establish TLS session)HAVE_SSLrG   rZ   rK   r   ssl_create_stdlib_contextr   wrap_socketr   rc   r   r   r   r   )rb   ssl_contextr   r   r   s        rF   starttlszIMAP4.starttls2  s    **233  **>??t(((**:;;446K''-S$;#//		@D		 0 KDI		**40DI$(D!""$**=>>&&sC66rE   c                 Z    	 d}| j                  |||      \  }}| j                  |||      S )Nr6   r   )rb   r   namesr   r   r   s         rF   statuszIMAP4.statusI  s=    	  ''gu=S&&sC66rE   c                 |    	 |d   |d   fdk7  rd|z  }| j                  d|||      \  }}| j                  ||d      S )Nr   r   r   r   r7   r    r   )rb   r   commandr   r   r   s         rF   storezIMAP4.storeU  sV    	 !HU2Y9,UNE''guMS&&sC99rE   c                 (    	 | j                  d|      S )Nr8   r   r   s     rF   	subscribezIMAP4.subscribe`  s    	 ##K99rE   c                 ^    	 d} | j                   |||g| \  }}| j                  |||      S )Nr9   r   )rb   threading_algorithmrG  rY  r   r   r   s          rF   threadzIMAP4.threadh  sC    	 '4''.A7]_]S&&sC66rE   c                 d   	 |j                         }|t        vr| j                  d|z        | j                  t        |   vr:| j                  d|d| j                  ddj	                  t        |               d} | j
                  ||g| \  }}|dv r|}nd}| j                  |||      S )	NzUnknown IMAP4 UID command: %scommand  illegal in state , only allowed in states , r:   )r/   r4   r9   r    )r   r   rG   rS   joinr   r   )rb   rh  r   r   r   r   s         rF   uidz	IMAP4.uidr  s    	 --/("**<wFGG::Xg..**%tzz"ii(9:< = = '4''g==S22DD&&sC66rE   c                 (    	 | j                  d|      S )Nr;   r   r   s     rF   unsubscribezIMAP4.unsubscribe  s    	 ##M7;;rE   c                 \    	 	 | j                  d      \  }}d| _        ||fS # d| _        w xY w)Nr<   r   r   )rb   r   r   s      rF   unselectzIMAP4.unselect  s<    		 ,,Z8ICDJDy  DJr   c                     	 |j                         }|t        vr| j                  ft        |<    | j                  |g| S r   )r   r   rS   r   rb   r   r   s      rF   xatomzIMAP4.xatom  sE    	 zz| x"jj]HTN#t##D0400rE   c                 d    |d}| j                   }	 ||v r||   j                  |       y |g||<   y NrE   )rV   rR   r   r   rM  r   )rb   r   r   urs       rF   _append_untaggedzIMAP4._append_untagged  s>    ;C$$ "9sGNN3eBsGrE   c                     | j                   j                  d      }|r.| j                  |d   j                  | j                  d            y )NBYEr   r   )rV   rM  rK   r   rj   )rb   byes     rF   
_check_byezIMAP4._check_bye  sB    %%))%0**SW^^DNNIFGG rE   c                    | j                   t        |   vrAd | _        | j                  d|d| j                   ddj	                  t        |               dD ]  }|| j
                  v s| j
                  |=   d| j
                  v r| j                  s| j                  d      | j                         }t        || j                        }|dz   |z   }|D ]3  }|t        |t              rt        || j                        }|dz   |z   }5 | j                  }|Qd | _        t        |      t        | j                        u r|}n'd }|t        d	t        |      z  | j                        z   }	 	 | j'                  |t(        z          ||S 	 | j/                         r"| j0                  |   r|S | j/                         r"r || j2                        }	 	 | j'                  |       | j'                  t(               |s	 |S t# t*        $ r}	| j-                  d
|	z        d }	~	ww xY w# t*        $ r}	| j-                  d
|	z        d }	~	ww xY w)Nrp  rq  rr  rs  rx   NOBADrK  z#mailbox status changed to READ-ONLY    z {%s}zsocket error: %s)rS   r   rT   rG   rt  rV   rX   rN   _new_tagbytesrj   r)  r*  type_commandr   rR   r   _logr   r   r`   rK   r   rU   rW   )
rb   r   r   r   tagr   argrT   	literatorvals
             rF   r  zIMAP4._command  s9   ::Xd^+DL**"DJJ"ii79 : :
 'Cd---++C0 ' $111  -- EFFmmoT4>>*TzD C{H#s#C0$;$D	  ,,DLG}T]] 33#	 	eGc'l$:DNNKK	7IIdTk" ?J $$&'',J $$& #D$>$>?;		'"		$ 
3   	7**/#566	72  ;jj!3c!9::;s0   ,G= &H" =	HHH"	I+H??Ic                 t   |dk(  }|s| j                          	 | j                  ||      \  }}|s| j                          |dk(  r| j                  |d|d|      ||fS # | j                  $ r}| j                  d|d|      d }~w| j                  $ r}| j                  d|d|      d }~ww xY w)Nr   )
expect_byez	command:  => r  z command error: r&  )r  _get_tagged_responserK   rG   )rb   r   r  r   r   r   r  s          rF   _command_completezIMAP4._command_complete  s    ("OO	@11#&1IIC
 OO%<**$TJKKDy zz 	@**D#>??zz 	@**D#>??	@s#   A# #B72B		B7B22B7c                     | j                         \  }}|d gk(  r| j                  d      t        |d   | j                        }|j	                         }t        |j                               | _        y )Nz"no CAPABILITY response from serverr   )r   rG   r*  rj   r   tuplesplitr   r   s      rF   r   zIMAP4._get_capabilities,  s]    ??$S4&=**ABB#b'4>>*iik!#))+.rE   c                    | j                         }| j                  | j                  |      r| j                  j	                  d      }|| j
                  vr| j                  d|z        | j                  j	                  d      }t        || j                        }| j                  j	                  d      }||gf| j
                  |<   nd }| j                  t        |      s7| j                  | j                  |      r| j                  j	                  d      }| j                  K| j                  t        |      r!| j                  j	                  d      | _        y | j                  d|z        | j                  j	                  d      }t        || j                        }| j                  j	                  d      }|d}|r|dz   |z   }| j                  | j                  |      rwt        | j                  j	                  d	            }	 | j#                  |      }| j%                  |||f       | j                         }| j                  | j                  |      rw| j%                  ||       |d
v rr| j                  t&        |      r\| j                  j	                  d      }t        || j                        }| j%                  || j                  j	                  d             	 |S )Nr  zunexpected tagged response: %rr  r   data2zunexpected response: %rrE   r  r   r  )	_get_line_matchr|   mogrouprU   rK   r*  rj   Untagged_responserq   ContinuationrW   ro   intrR   r   r   r  Response_code)rb   respr  r   r   dat2r   r   s           rF   r   zIMAP4._get_response5  s\    ~~ ;;tzz4(''--&C$...jj!AD!HII''--'Cc4>>*C''--'C),seD  %D ;;0$7;;t33T:77==1Dww ;;|T215v1FD.jj!:T!ABB''--'Cc4>>*C''--'C{#C3:,S ++dllC0 477==01 yy %%cC;7 nn&! ++dllC0$ !!#s+ %%$++mS*I''--'Cc4>>*C!!#tww}}V'<= rE   c                    	 | j                   |   }|| j                   |= |S |r$d}| j                  j                  |d       }|||fS | j                          	 | j	                          h# | j
                  $ r}	  d }~ww xY w)Nr  )rU   rV   popr  r   rK   rR   	print_log)rb   r  r  resultr   r  r  s          rF   r  zIMAP4._get_tagged_response  s    ))#.F!((---11#t<?:% OO""$/ 0 ::  	s   A* *B 9A;;B c                     | j                         }|s| j                  d      |j                  d      s| j                  d|z        |d d }	 |S )Nzsocket error: EOFr   z#socket error: unterminated line: %r)r   rK   endswithrR   r   r  r   s     rF   r  zIMAP4._get_line  sX    }}**011 }}W%**BTIJJCRy
 rE   c                 L    |j                  |      | _        	 | j                  d uS r   )matchr  rR   r   r  groups)rb   cress      rF   r  zIMAP4._match  s'    
 ))A, wwd""rE   c                     | j                   t        t        | j                        | j                        z   }| j                  dz   | _        d | j
                  |<   |S )Nr   )r{   r  r*  rY   rj   rU   )rb   r  s     rF   r  zIMAP4._new_tag  sH    kkE#dkk"2DNNCCkkAo$(S!
rE   c                 Z    |j                  dd      }|j                  dd      }d|z   dz   S )N\z\\"z\")r   )rb   r  s     rF   r  zIMAP4._quote  s0    kk$'kk#u%Sy3rE   c                 H    | j                  | | j                  |g|       S r   )r  r  r{  s      rF   r   zIMAP4._simple_command  s%    %%dMDMM$,F,FGGrE   c                 z    |dk(  r||fS || j                   vr|d gfS | j                   j                  |      }	 ||fS )Nr  )rV   r  rR   r   )rb   r   r   r   r   s        rF   r   zIMAP4._untagged_response  sQ    $;8Ot...;&&**40 DyrE   )z""*)r   Fr   )F)TrA   rB   rC   r^   rG   rK   rN   
IMAP4_PORTrf   r[   ru   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   r2  r4  r6  r   r>  r@  rD  rI  rN  rQ  rS  rV  rZ  rc  rf  ri  rk  rn  ru  rw  ry  r|  r  r  r  r  r   r   r  r  r  r  r  r   r   r   r8  r  r  rD   rE   rF   r   r      s   -^ !	 5Z 2F<'7TC1 T 	-  7"CE4:7-F77?
778?:'	7BN
	7=7,	:
7F7$B@B?:77.	7::772< 1,HJZ$/M`B&	#H
	 rE   r   c                   6    e Zd Z	 defddddZd ZdedfdZy)	IMAP4_SSLrO   N)rb  re   c                n    |t        j                         }|| _        t        j	                  | |||       y r   )r_  r`  rb  r   rf   )rb   rc   rd   rb  re   s        rF   rf   zIMAP4_SSL.__init__  s0    "!88:*DNN4tW5rE   c                 |    t         j                  | |      }| j                  j                  || j                        S )Nr\  )r   r   rb  ra  rc   )rb   re   r   s      rF   r   zIMAP4_SSL._create_socket%  s=    ''g6D##//@D		 0 K KrE   c                 6    	 t         j                  | |||       y r   )r   r\   ra   s       rF   r\   zIMAP4_SSL.open*  s    
 JJtT41rE   )rA   rB   rC   IMAP4_SSL_PORTrf   r   r\   rD   rE   rF   r  r    s1    	 !# 	6$($	6	K
 ^T 	2rE   r  c                   4    e Zd Z	 d ZddZd Zd Zd Zd Zy)	r   c                 <    || _         t        j                  |        y r   )rh  r   rf   )rb   rh  s     rF   rf   zIMAP4_stream.__init__A  s    trE   Nc                 >   	 d | _         d | _        d | _        d | _        t	        j
                  | j                  t        t        j                  t        j                  dd      | _	        | j                  j                  | _        | j                  j                  | _        y )NT)bufsizestdinstdoutshell	close_fds)rc   rd   r   r   
subprocessPopenrh  r   PIPEr   r  	writefiler  readfilera   s       rF   r\   zIMAP4_stream.openF  sv    	 				!'''//*//$( ++++rE   c                 :    	 | j                   j                  |      S r   )r  r   )rb   r   s     rF   r   zIMAP4_stream.readV  s    ,}}!!$''rE   c                 8    	 | j                   j                         S r   )r  r   rr   s    rF   r   zIMAP4_stream.readline[  s    $}}%%''rE   c                 p    	 | j                   j                  |       | j                   j                          y r   )r  writeflushr   s     rF   r   zIMAP4_stream.send`  s'    "T"rE   c                     	 | j                   j                          | j                  j                          | j                  j	                          y r   )r  r   r  r   waitrr   s    rF   r_   zIMAP4_stream.shutdownf  s5    .rE   )NNN)	rA   rB   rC   rf   r\   r   r   r   r_   rD   rE   rF   r   r   5  s%    
, (
(
rE   r   c                   &    e Zd Z	 d Zd Zd Zd Zy)r   c                     || _         y r   )r   )rb   mechinsts     rF   rf   z_Authenticator.__init__t  s	    	rE   c                 j    | j                  | j                  |            }|y| j                  |      S )N   *)r   r   r+  )rb   r   rets      rF   r   z_Authenticator.processw  s0    iiD)*;{{3rE   c                     d}t        |t              r|j                  d      }|r?t        |      dkD  r|d d }|dd  }n|}d}t	        j
                  |      }|r||d d z   }|r?|S )NrE   rt   0   r   )r)  r*  r+  r   binascii
b2a_base64)rb   inpouptes        rF   r+  z_Authenticator.encode}  s}     c3**W%C3x"}H"#h##A&AAcrFl  
rE   c                 2    |syt        j                  |      S r~  )r  
a2b_base64)rb   r  s     rF   r   z_Authenticator.decode  s    ""3''rE   N)rA   rB   rC   rf   r   r+  r   rD   rE   rF   r   r   n  s     0(rE   r   z0 Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Decr&  r   c           	         	 t         j                  |       }|sy 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
z  |
z   d
z  }|dk(  r| }||||||dddf	}t        j                  |      |z
  }t        j                  |      S )Nmonzonendayyearhourr   seczonehzonem<      -r   )	InternalDater  Mon2numr  r  calendartimegmtime	localtime)r  r  r  r  r  r  r  r   r  r  r  zonettutcs                 rF   r	   r	     s    
		D	!B
"((5/
"CHHWE
bhhuo
Crxx Drxx D
bhhuo
C
bhhuo
C!"E!"E "Hub D}u
S$S"b"	5B
//"

$C>>#rE   c                 v    	 d}d}t        t        |             } | rt        | d      \  } }|||dz    |z   }| r|S )NrE   s   ABCDEFGHIJKLMNOP   r   )r  absdivmod)numr  APmods       rF   r
   r
     sN    7
C'r
c#h-C
#r?SSUmc!  JrE   c                     	 t         j                  |       }|syt        |j                  d      j	                               S )NrD   r   )Flagsr  r  r  r  )r  r  s     rF   r   r     s6    7	T	B'"((*++rE   c                 <   	 t        | t        t        f      r3t        j                  | t
        j                        j                         }nt        | t              r1	 | j                  }t!        |      }t        | d d dt        |      i}nTt        | t              r| j"                  t%        d      | }n*t        | t&              r| d   | d   fdk(  r| S t%        d	      d
j)                  t*        |j,                           }|j/                  |      S # t        $ r t        j                  rZ| d   }|dk(  r+t        j                  t        j                  |             d   }t        j
                  t        j                  f|    }nt        j
                   }Y 2w xY w)N   r   )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   fromtimestampr   r  
astimezoner  	tm_gmtoffr   r  daylightr  mktimealtzoner   r  r   r*  formatMonthsmonthstrftime)r   dtgmtoffdstr   fmts         rF   r   r     sb   	 )c5\*##I$,LL22<*, 		Iu	%		(((F &)y!}=Xe_=	Ix	(#677	Is	#1im(D	(Q899
"
)
)&*:
;C;;s'  	(}}l"9..Y)?@CC==$,,7<<--	(s   D BFF__main__zd:s:)rD   rD   z-dz-s)rO   zIMAP password for z on 	localhostz: zJFrom: %(user)s@localhost%(lf)sSubject: IMAP4 test%(lf)s%(lf)sdata...%(lf)s
)r  lfr!  )r   )
/tmp/xxx 1)rD  )r  z/tmp/yyy)r   
/tmp/yyz 2r   r  )r  )z/tmpzyy*)rN  r  )rI  )NSUBJECTtest)r  )1z(FLAGS INTERNALDATE RFC822))ri  )r  FLAGSz
(\Deleted))r6  rD   )r  rD   )r   rD   )r   rD   )rN  rD   )r   )UIDVALIDITY)ru  )r/   ALL)r   )rL  )r   rD   c                     t         j                  | d|        t        t         |       | \  }}t         j                  | d|d|       |dk(  r|d   |S )Nr&  r  r  r   )Mr   r   )cmdr   r   r   s       rF   runr&  9  sP    	3%&"71c?D)S	c3/0$;c!f
rE   r   zPROTOCOL_VERSION = %szCAPABILITIES = r  )z/tmp/zyy%z.*"([^"]+)"$r   r   ru  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
)Vr   r  r   ry   rk   r   r  r   r  r  r   r   r   ior   r_  r^  ImportError__all__r   rQ   r  r  r   r   r   r   rl   r  r  r  rn   ro   r   r  r  rq   rm   rp   r   r  r   r   r   r  r  	enumerater+  r  r	   r
   r   r   rA   getoptgetpassargvoptlistr   rG   r  stream_commandoptr  rc   getuserUSERPASSWD	test_mesg	test_seq1	test_seq2r&  r$  rS   r   r   r   r%  mlr  r  r  pathr   ru  print)nr  s   00rF   <module>r;     sm  
,  K K K K K 2 2 "H8
 	
(  ,
,,
 	,
 	A	,

 	,
 	,
 	,
 	,,
 	,,
 	,,
 	
,
 	,,
 	,
 	,
 	,,
  	,!,
" 	,#,
$ 	,%,
& 	,',
( 	,),
* 	+,
, 	A-,
. 	,/,
0 	1,
2 	,3,
4 	A5,
6 	7,
8 		9,
: 	,;,
< 	=,
> 	,?,
@ 	,A,
B 	,C,
D 	,E,
F 	G,
H %,%,%%,%W,
` rzz01

45rzz   "**+RXX
6
"**^
$ 

DEBJJGH "**;RXXG "J ~ ~B$ #2E #2J NN;55 5r*( *(X 
<	A	A#	F&/qr
&;
<&;da188:ac>&;
<F	,%R z %chhqrlF; NC$;HED[ N 1  7D7??DW__tTEX[EXYZF\gkrv_wwItVn*dD)45)3,I$ !dD),-I)^,AdA77f!!"I	'!*<*<<=	q~~78!HCTN " f./B/2.B"((1+4B$4'"	 0 "HCc4.CDz77b'--/CBPR S " 	 { C/  Hv+ =` << j	   
hhqk 
 	s<   O O#	#O)  DP O O )P8PP%P0