
    z%i                     b   	 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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d/dd0dd1dd2dd3dddddddddd4Z ej4                  d5      Z ej4                  d6      Z ej4                  d7      Z ej4                  d8ej<                        Z ej4                  d9      Z  ej4                  d:      Z! ej4                  d;      Z" ej4                  d<ej<                        Z#d8Z$d<Z% G d= d>      Z&er G d? d@e&      Z'ejQ                  d@        G dA dBe&      Z) G dC dD      Z*dEjW                  dF      Z, e-e,dGd       D  ci c]  \  } }|j]                         | dGz    c}} Z/dH Z0dI Z1dJ Z2dK Z3e4dLk(  rddl5Z5ddl6Z6	  e5jj                  ejn                  dGd dM      \  Z8Z9dZ<e8D ]!  \  Z=Z;e=dOk(  r	 e>e;      Ze=dPk(  se;Z<e9re<fZ9# e9sdQZ9e9d   Z? e6j                         ZA e6jl                  dReAdSe?xs dTdU      ZBdVeAdWdXz  ZCdYeAeBffdZd[d\d]d^ddeCffd_d`dadbdcdddedfdgfZDdhdidjdkd]dddeCffdfdlfZEdm ZF	 e<r	 e)e<      ZGn e&e?      ZGeGj                  dnk(  reDdGd ZDeGj                  doeGj                  z         eGj                  dpeGj                         eDD ]  \  ZLZ9 eFeLe9         eFdqdr      D ]F  ZM ej                  dseM      ZOeOreOj                  dG      ZQneMjW                         dt   ZQ eFdueQf       H eED ]>  \  ZLZ9 eFeLe9      ZReLe9fdjk7  reRdt   jW                         ZSeSs- eFdvddweSdt   z  dxf       @  eTdy       yy# e$ r dZY w xY wc c}} w # e5jt                  $ rZ;dN\  Z8Z9Y dZ;[;dZ;[;ww xY w#   eTdz       es eTd{ejn                  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 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__     ;/home/uftp/.pyenv/versions/3.12.0/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.open0  s?    	
 		''0	II&&t,	rE   c                 :    	 | j                   j                  |      S r   )r   readrb   sizes     rF   r   z
IMAP4.read<  s    ,yy~~d##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_MAXLINElenrG   rb   lines     rF   r   zIMAP4.readlineA  sC    $yy!!(Q,/t9x**5@AArE   c                 j    	 t        j                  d| |       | j                  j                  |       y )Nzimaplib.send)r   r   r   sendallrb   datas     rF   sendz
IMAP4.sendI  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.shutdownO  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.socket_  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.recentk  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.getacl(  s4    	 ''':S&&sC77rE   c                 X    	 | j                  d|||      \  }}| j                  ||d      S )Nr"   
ANNOTATIONr   )rb   r   entry	attributer   r   s         rF   getannotationzIMAP4.getannotation1  s8    	! ''%SS&&sC>>rE   c                 T    	 | j                  d|      \  }}| j                  ||d      S )Nr#   QUOTAr   )rb   rootr   r   s       rF   getquotazIMAP4.getquota9  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.getquotarootD  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.listO  ;    	 ''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.login[  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_md5i  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_AUTHr  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.logoutz  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   r5  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_criteriarD  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.starttls)  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.status@  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.storeL  sV    	 !HU2Y9,UNE''guMS&&sC99rE   c                 (    	 | j                  d|      S )Nr8   r   r   s     rF   	subscribezIMAP4.subscribeW  s    	 ##K99rE   c                 ^    	 d} | j                   |||g| \  }}| j                  |||      S )Nr9   r   )rb   threading_algorithmrD  rV  r   r   r   s          rF   threadzIMAP4.thread_  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   re  r   r   r   r   s         rF   uidz	IMAP4.uidi  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   rJ  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   rJ  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)Nrm  rn  ro  rp  rx   NOBADrH  z#mailbox status changed to READ-ONLY    z {%s}zsocket error: %s)rS   r   rT   rG   rq  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  sC   ::Xd^+DL**"DJJ"ii79 : :
 ' 	1Cd---++C0	1 $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_response,  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  rx  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   r/  r1  r3  r   r;  r=  rA  rF  rK  rN  rP  rS  rW  r`  rc  rf  rh  rk  rr  rt  rv  ry  r}  r  r  r  r   r   r  r  r  r  r  r   r   r   r5  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)r_  re   c                n    |t        j                         }|| _        t        j	                  | |||       y r   )r\  r]  r_  r   rf   )rb   rc   rd   r_  re   s        rF   rf   zIMAP4_SSL.__init__  s0    "!88:*DNN4tW5rE   c                 |    t         j                  | |      }| j                  j                  || j                        S )NrY  )r   r   r_  r^  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   )re  r   rf   )rb   re  s     rF   rf   zIMAP4_stream.__init__8  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Popenre  r   PIPEr   r  	writefiler  readfilera   s       rF   r\   zIMAP4_stream.open=  sv    	 				!'''//*//$( ++++rE   c                 :    	 | j                   j                  |      S r   )r  r   r   s     rF   r   zIMAP4_stream.readM  s    ,}}!!$''rE   c                 8    	 | j                   j                         S r   )r  r   rr   s    rF   r   zIMAP4_stream.readlineR  s    $}}%%''rE   c                 p    	 | j                   j                  |       | j                   j                          y r   )r  writeflushr   s     rF   r   zIMAP4_stream.sendW  s'    "T"rE   c                     	 | j                   j                          | j                  j                          | j                  j	                          y r   )r  r   r  r   waitrr   s    rF   r_   zIMAP4_stream.shutdown]  s5    .rE   )NNN)	rA   rB   rC   rf   r\   r   r   r   r_   rD   rE   rF   r   r   ,  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__k  s	    	rE   c                 j    | j                  | j                  |            }|y| j                  |      S )N   *)r   r   r(  )rb   r   rets      rF   r   z_Authenticator.processn  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.encodet  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   e  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hourmin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dstdelta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)rA  )r  z/tmp/yyy)r   
/tmp/yyz 2r   r  )r  )z/tmpzyy*)rK  r  )rF  )NSUBJECTtest)r  )1z(FLAGS INTERNALDATE RFC822))rf  )r  FLAGSz
(\Deleted))r3  rD   )r   rD   )r   rD   )r   rD   )rK  rD   )r   )UIDVALIDITY)rr  )r/   ALL)r   )rI  )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%  0  sP    	3%&"71c?D)S	c3/0$;c!f
rE   r   zPROTOCOL_VERSION = %szCAPABILITIES = r  )z/tmp/zyy%z.*"([^"]+)"$r   r   rr  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
)Ur   r  r   ry   rk   r   r  r   r  r  r   r   r   ior   r\  r[  ImportError__all__r   rQ   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   rr  print)nr  s   00rF   <module>r:     sv  
,  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 x xv# #2E #2J NN;55 5r*( *(X 
<	A	A#	F&/qr
&;
<da188:ac>
<F	,%R z %chhqrlF; N 2C$;HED[ N 12 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'"		# " 		SHCc4.CDz77b'--/CBPR S		S 	 { q.  Hd+ =` << j	   
hhqk 
 	s<   O 
O!#O' >DP	 OO'P6PP	%P.