
    =OgQ                     j   	 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n# e$ r dZY nw xY w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j        d5          Z ej        d6          Z ej        d7          Z ej        d8ej                  Z ej        d9          Z  ej        d:          Z! ej        d;          Z" ej        d<ej                  Z#d8Z$d<Z% G d= d>          Z&er# G d? d@e&          Z'e(                    d@            G dA dBe&          Z) G dC dD          Z*dE+                    dF          Z,dG  e-e,dHd                   D             Z.dI Z/dJ Z0dK Z1dL Z2e3dMk    r?ddl4Z4ddl5Z5	  e4j4        ej6        dHd         dN          \  Z7Z8n# e4j9        $ rZ:dO\  Z7Z8Y dZ:[:ndZ:[:ww xY wdZ;e7D ]$\  Z<Z:e<dPk    r e=e:          Ze<dQk    re:Z;e8se;fZ8%e8sdRZ8e8d         Z> e5j?                    Z@ e5j5        dSe@dTe>pdUdV          ZAdWe@dXdYz  ZBdZe@eAffd[d\d]d^d_ddeBffd`dadbdcdddedfdgdhfZCdidjdkdld^dddeBffdgdmfZDdn ZE	 e;r e)e;          ZFn e&e>          ZFeFjG        dok    r
eCdHd         ZCeFH                    dpeFjI        z             eFH                    dqeFjJ                   eCD ]\  ZKZ8 eEeKe8            eEdrds          D ]RZL ejM        dteL          ZNeNreNO                    dH          ZPneL+                                du         ZP eEdvePf           SeDD ]O\  ZKZ8 eEeKe8          ZQeKe8fdkk    reQdu         +                                ZReRs7 eEdwddxeRdu         z  dyf           P eSdz           dS #   eSd{           es eSd|ej6        d         z              xY wdS )}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'dYd+Z(d, Z)d- Z*d. Z+d/ Z,dYd0Z-d1 Z.d2 Z/d3 Z0d4 Z1d5 Z2d6 Z3d7 Z4dZd:Z5d; Z6d< Z7d= Z8d> Z9d[d?Z:d@ Z;dA Z<dB Z=dC Z>dD Z?dE Z@dF ZAdG ZBdH ZCdI ZDdJ ZEdK ZFdL ZGdM ZHd\dNZIdO ZJdP ZKdQ ZLdR ZMdS ZNdT ZOdS )]r   c                       e Zd ZdS )IMAP4.errorN__name__
__module____qualname__      /usr/lib64/python3.11/imaplib.pyerrorr?                rE   rG   c                       e Zd ZdS )IMAP4.abortNr@   rD   rE   rF   abortrJ      rH   rE   rK   c                       e Zd ZdS )IMAP4.readonlyNr@   rD   rE   rF   readonlyrM      rH   rE   rN    Nc                 x   t           | _        d| _        d | _        i | _        i | _        d| _        d| _        d| _        d| _	        | 
                                 |                     |||           	 |                                  d S # t          $ r( 	 |                                  n# t          $ r Y n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&&&	MMOOOOO 	 	 	   	s0   1B 
B9B'&B9'
B41B93B44B9c                     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rb   s    rF   r[   zIMAP4._mode_ascii   sC    ! z(BH55!z*:BHEErE   c                     d| _         d| _        t          j        t                    | _        t          j        t                    | _        d S )NTutf-8)ri   rj   rk   rl   rm   ro   rp   rq   rr   s    rF   
_mode_utf8zIMAP4._mode_utf8   s;      z(++!z*:;;rE   c                    t          t          j        dd                    | _        t	          j        d| j        z   dz   t          j                  | _        	 |                                 | _        d| j        v rd| _        n+d| j        v rd| _        n|                     | j                  |                                  	 t*          D ]}|| j        vr|| _         d S |                     d          )Ni   i  s   (?P<tag>s"   \d+) (?P<type>[A-Z]+) (?P<data>.*)F
   r      zimaplib version %sznew IMAP4 connection, tag=%sPREAUTHr   OKr      zCAPABILITIES: 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899Z+!&@!ABD(L L
	I ))++///DJJT,,,"DJJ**T\***   	F ' 	 	Gd///$+D!FFjj5666rE   c                 |    |t           v r"t          | |                                          S t          d|z            )NzUnknown IMAP4 command: '%s')CommandsgetattrlowerAttributeError)rb   attrs     rF   __getattr__zIMAP4.__getattr__  s9    84...:TABBBrE   c                     | S NrD   rr   s    rF   	__enter__zIMAP4.__enter__  s    rE   c                 l    | j         dk    rd S 	 |                                  d S # t          $ r Y d S w xY wNr   )rS   logoutr`   )rb   argss     rF   __exit__zIMAP4.__exit__  sL    :!!F	KKMMMMM 	 	 	DD	s   % 
33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P93tt$)	.$	49===#+GW==='000rE   c                     	 || _         || _        |                     |          | _        | j                            d          | _        d S )Nrb)rc   rd   r   sockmakefilefilera   s       rF   r\   z
IMAP4.open0  sG    	
 		''00	I&&t,,			rE   c                 8    	 | j                             |          S r   )r   readrb   sizes     rF   r   z
IMAP4.read<  s    ,y~~d###rE   c                     	 | j                             t          dz             }t          |          t          k    r|                     dt          z            |S )Nrx   zgot more than %d bytes)r   readline_MAXLINElenrG   rb   lines     rF   r   zIMAP4.readlineA  sL    $y!!(Q,//t99x**5@AAArE   c                 h    	 t          j        d| |           | j                            |           d S )Nzimaplib.send)r   r   r   sendallrb   datas     rF   sendz
IMAP4.sendI  s5    "	.$---	$rE   c                 x   	 | j                                          	 | j                            t          j                   nB# t          $ r5}|j        t          j        k    rt          |dd          dk    r Y d }~nd }~ww xY w| j                                         d S # | j                                         w xY w)Nwinerrorr   i&'  )
r   closer   r_   r   	SHUT_RDWRr`   errnoENOTCONNr   )rb   excs     rF   r_   zIMAP4.shutdownO  s    .	
	Iv/0000 	 	 	 	U^++3
A..%77	 IOODIOOs/   $A  B 
B +A;6B ;B  B B9c                     	 | j         S r   )r   rr   s    rF   r   zIMAP4.socket_  s    	 yrE   c                     	 d}|                      dd g|          \  }}|d         r||fS |                                 \  }}|                      |||          S )NRECENTrz   )_untagged_responsenooprb   nametypdats       rF   recentzIMAP4.recentk  si    	 **4$>>Sr7 	8O99;;S&&sC666rE   c                 X    	 |                      |d g|                                          S r   )r   upper)rb   codes     rF   responsezIMAP4.response|  s+    	 &&tdVTZZ\\BBBrE   c                    	 d}|sd}|r|d         |d         fdk    rd|z  }nd }|rt          |          }nd }t                              t          |          }| j        rd|z   dz   }|| _        |                     ||||          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0E 	))44III++dG,, 	1')D0G##D'5)DDDrE   c                    	 |                                 }t          |          j        | _        |                     d|          \  }}|dk    r/|                     |d                             dd                    d| _        ||fS )Nr   rz   r   rt   replacer   )r   _AuthenticatorprocessrT   r   rG   decoderS   )rb   	mechanism
authobjectmechr   r   s         rF   authenticatezIMAP4.authenticate  s    	   
 &j119''==S$;;**SW^^GY??@@@
CxrE   c                 f    	 d}|                      |          \  }}|                     |||          S )Nr   r   r   r   s       rF   
capabilityzIMAP4.capability  s=    	0 ''--S&&sC666rE   c                 .    	 |                      d          S )Nr   r   rr   s    rF   checkzIMAP4.check  s    	 ##G,,,rE   c                 f    	 	 |                      d          \  }}d| _        n# d| _        w xY w||fS )Nr   r   r   rS   rb   r   r   s      rF   r   zIMAP4.close  sH    		 ++G44HCDJJDJCx   # 	,c                 2    	 |                      d||          S )Nr   r   )rb   message_setnew_mailboxs      rF   copyz
IMAP4.copy  s!    	 ##FKEEErE   c                 0    	 |                      d|          S )Nr   r   rb   r   s     rF   createzIMAP4.create      	 ##Hg666rE   c                 0    	 |                      d|          S )Nr   r   r   s     rF   deletezIMAP4.delete  r   rE   c                 2    	 |                      d||          S )Nr   r   )rb   r   whos      rF   	deleteaclzIMAP4.deleteacl  s!    	 ##K#>>>rE   c                     	 d| j         vrt                              d          |                     d|          \  }}|dk    r*d|                                v r|                                  ||fS )Nr   zServer does not support ENABLErz   zUTF8=ACCEPT)r   r   rG   r   r   ru   )rb   r   r   r   s       rF   enablezIMAP4.enable  s|    	 4,,,++>???((:>>	T$;;=J,<,<,>,>>>OODyrE   c                 f    	 d}|                      |          \  }}|                     |||          S )Nr   r   r   s       rF   expungezIMAP4.expunge  s=    	 ''--S&&sC666rE   c                 j    	 d}|                      |||          \  }}|                     |||          S )Nr    r   )rb   r   message_partsr   r   r   s         rF   fetchzIMAP4.fetch  sA    	 ''k=IIS&&sC666rE   c                 d    	 |                      d|          \  }}|                     ||d          S )Nr!   ACLr   rb   r   r   r   s       rF   getaclzIMAP4.getacl(  s:    	 '''::S&&sC777rE   c                 h    	 |                      d|||          \  }}|                     ||d          S )Nr"   
ANNOTATIONr   )rb   r   entry	attributer   r   s         rF   getannotationzIMAP4.getannotation1  s>    	! ''%SSS&&sC>>>rE   c                 d    	 |                      d|          \  }}|                     ||d          S )Nr#   QUOTAr   )rb   rootr   r   s       rF   getquotazIMAP4.getquota9  s:    	 ''
D99S&&sC999rE   c                     	 |                      d|          \  }}|                     ||d          \  }}|                     ||d          \  }}|||gfS )Nr$   r  	QUOTAROOTr   )rb   r   r   r   quota	quotaroots         rF   getquotarootzIMAP4.getquotarootD  sh    	 ''@@S,,S#w??
U00c;GGYY&&&rE   ""*c                 j    	 d}|                      |||          \  }}|                     |||          S )Nr&   r   rb   	directorypatternr   r   r   s         rF   listz
IMAP4.listO  A    	 ''iAAS&&sC666rE   c                     	 |                      d||                     |                    \  }}|dk    r|                     |d                   d| _        ||fS )Nr'   rz   r   r   )r   _quoterG   rS   )rb   userpasswordr   r   s        rF   loginzIMAP4.login[  s_    	 ''t{{87L7LMMS$;;**SW%%%
CxrE   c                 X    	 ||c| _         | _        |                     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AArE   c                     	 dd l }t          | j        t                    r| j                            d          n| j        }| j        dz   |                    ||d                                          z   S )Nr   rt    md5)hmac
isinstancer!  strencoder   HMAC	hexdigest)rb   	challenger)  pwds       rF   r$  zIMAP4._CRAM_MD5_AUTHr  so    ?0:4=#0N0N @t}##G,,,26- 	y33	5!A!A!K!K!M!MMMrE   c                 r    	 d| _         |                     d          \  }}|                                  ||fS r   )rS   r   r_   r   s      rF   r   zIMAP4.logoutz  s=    	 
''11SCxrE   c                 j    	 d}|                      |||          \  }}|                     |||          S )Nr(   r   r  s         rF   lsubz
IMAP4.lsub  r  rE   c                 d    	 |                      d|          \  }}|                     ||d          S )Nr%   r   r  s       rF   myrightszIMAP4.myrights  s:    	 &&z7;;C&&sC<<<rE   c                 f    	 d}|                      |          \  }}|                     |||          S )Nr*   r   r   s       rF   	namespacezIMAP4.namespace  s=    	 ''--S&&sC666rE   c                 0    	 	 |                     d          S )NFr{   r+   )rR   _dump_urrV   r   rr   s    rF   r   z
IMAP4.noop  s"    		7 ##F+++rE   c                 n    	 d}|                      |||||          \  }}|                     ||d          S )Nr,   r    r   )rb   message_nummessage_partstartlengthr   r   r   s           rF   partialzIMAP4.partial  sF    	 ''k<PVWWS&&sC999rE   c                 4    	 d}|                      d|          S )Nr-   r   )rb   r   r   s      rF   	proxyauthzIMAP4.proxyauth  s$    	 ##K666rE   c                 2    	 |                      d||          S )Nr.   r   )rb   
oldmailbox
newmailboxs      rF   renamezIMAP4.rename  s!    	 ##Hj*EEErE   c                     	 d}|r5| j         rt                              d           | j        |d|g|R  \  }}n | j        |g|R  \  }}|                     |||          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  s    	  	=  Mkk"KLLL+t+D)WPxPPPHC+t+D<8<<<HC&&sC666rE   r   Fc                    	 i | _         || _        |rd}nd}|                     ||          \  }}|dk    rd| _        ||fS d| _        d| j         v r|s	 |                     d	|z            || j                             d
d g          fS )Nr   r0   rz   r   r   	READ-ONLYFrx   z%s is not writableEXISTS)rV   rX   r   rS   rR   r9  rN   get)rb   r   rN   r   r   r   s         rF   selectzIMAP4.select  s    
	 #%# 	DDD''g66S$;;DJ8O
$111  2; -- 4w >???D+//4&AAAArE   c                 4    	 |                      d|||          S )Nr1   r   )rb   r   r   whats       rF   setaclzIMAP4.setacl  s#    	 ##HgsDAAArE   c                 T    	  | j         dg|R  \  }}|                     ||d          S )Nr2   r	  r   )rb   r   r   r   s       rF   setannotationzIMAP4.setannotation
  s?    	 (4'?$???S&&sC>>>rE   c                 f    	 |                      d||          \  }}|                     ||d          S )Nr3   r  r   )rb   r  limitsr   r   s        rF   setquotazIMAP4.setquota  s<    	 ''
D&AAS&&sC999rE   c                     	 d}|d         |d         fdk    rd|z  } | j         |||g|R  \  }}|                     |||          S )Nr4   r   r   r   r   r   )rb   sort_criteriarH  search_criteriar   r   r   s          rF   sortz
IMAP4.sort  sn    	  !]2./9<<"]2M'4'mWWWWWS&&sC666rE   c                 2   d}t           s|                     d          | j        r|                     d          || j        vr|                     d          |t          j                    }|                     |          \  }}|dk    ra|                    | j	        | j
                  | _	        | j	                            d          | _        d| _        |                                  n|                     d	          |                     |||          S )
Nr5   zSSL support missingzTLS session already establishedzTLS not supported by serverrz   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    	4**2333  	@**>???t(((**:;;;466K''--S$;;#//	@D	 0 K KDI	**400DI$(D!""$$$$**=>>>&&sC666rE   c                 j    	 d}|                      |||          \  }}|                     |||          S )Nr6   r   )rb   r   namesr   r   r   s         rF   statuszIMAP4.status@  sC    	  ''gu==S&&sC666rE   c                     	 |d         |d         fdk    rd|z  }|                      d|||          \  }}|                     ||d          S )Nr   r   r   r   r7   r    r   )rb   r   commandr   r   r   s         rF   storezIMAP4.storeL  s_    	 !HU2Y9,,UNE''guMMS&&sC999rE   c                 0    	 |                      d|          S )Nr8   r   r   s     rF   	subscribezIMAP4.subscribeW  s    	 ##K999rE   c                 \    	 d} | j         |||g|R  \  }}|                     |||          S )Nr9   r   )rb   threading_algorithmrH  rZ  r   r   r   s          rF   threadzIMAP4.thread_  sI    	 '4'.A7]_]]]S&&sC666rE   c                    	 |                                 }|t          vr|                     d|z            | j        t          |         vrA|                     d|d| j        dd                    t          |                             d} | j        ||g|R  \  }}|dv r|}nd}|                     |||          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   ri  r   r   r   r   s         rF   uidz	IMAP4.uidi  s    	 --//(""**<wFGGG:Xg...***%ggtzzz"ii(9:::< = = = '4'g====S222DDD&&sC666rE   c                 0    	 |                      d|          S )Nr;   r   r   s     rF   unsubscribezIMAP4.unsubscribe  s    	 ##M7;;;rE   c                 f    	 	 |                      d          \  }}d| _        n# d| _        w xY w||fS )Nr<   r   r   )rb   r   r   s      rF   unselectzIMAP4.unselect  sI    		 ,,Z88ICDJJDJDyr   c                 z    	 |                                 }|t          vr| j        ft          |<    | j        |g|R  S r   )r   r   rS   r   rb   r   r   s      rF   xatomzIMAP4.xatom  sK    	 zz|| x"j]HTN#t#D040000rE   c                 l    |d}| j         }	 ||v r||                             |           d S |g||<   d S NrE   )rV   rR   r   r   rN  r   )rb   r   r   urs       rF   _append_untaggedzIMAP4._append_untagged  sO    ;C$	9 "99sGNN3eBsGGGrE   c                     | j                             d          }|r4|                     |d                             | j        d                    d S )NBYEr   r   )rV   rN  rK   r   rj   )rb   byes     rF   
_check_byezIMAP4._check_bye  sS    %))%00 	H**SW^^DNIFFGGG	H 	HrE   c                    | j         t          |         vrHd | _        |                     d|d| j         dd                    t          |                             dD ]}|| j        v r| j        |= d| j        v r| j        s|                     d          |                                 }t          || j
                  }|dz   |z   }|D ]7}|t          |t                    rt          || j
                  }|dz   |z   }8| j        }|Wd | _        t          |          t          | j                  u r|}n*d }|t          d	t          |          z  | j
                  z   }	 	 |                     |t(          z              n*# t*          $ r}	|                     d|	z            d }	~	ww xY w||S 	 |                                 r#| j        |         r|S |                                 #|r || j                  }	 	 |                     |           |                     t(                     n*# t*          $ r}	|                     d|	z            d }	~	ww xY w|sn|S )Nrq  rr  rs  rt  rz   NOBADrL  z#mailbox status changed to READ-ONLY    z {%s}F   z> %rzsocket error: %s)rS   r   rT   rG   ru  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  s   :Xd^++DL***"ddDJJJ"ii7779 : : :
 ' 	1 	1Cd---+C0$111  2-- EFFFmmooT4>**TzD  	% 	%C{H#s## 1C00$;$DD,DLG}}T] 3 333#		 	eGc'll$:DNKKK	)	7IIdTk"""" 	7 	7 	7**/#5666	7 ?J	 $$&& ', J $$&&   @#)D$>??G;		'"""		$ ; ; ;jj!3c!9:::;  /	2 
s0   %F 
F*F%%F*=/H- -
I7IIc                    |dk    }|s|                                   	 |                     ||          \  }}nU# | j        $ r }|                     d|d|          d }~w| j        $ r }|                     d|d|          d }~ww xY w|s|                                   |dk    r|                     |d|d|          ||fS )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IIICz 	@ 	@ 	@***DDD##>???z 	@ 	@ 	@***DDD##>???	@ 	OO%<<**$$$TTJKKKDys!   9 
BAB+BBc                    |                                  \  }}|d gk    r|                     d          t          |d         | j                  }|                                }t          |                                          | _        d S )Nz"no CAPABILITY response from serverr   )r   rG   r+  rj   r   tuplesplitr   r   s      rF   r   zIMAP4._get_capabilities#  ss    ??$$S4&==**ABBB#b'4>**iikk!#))++..rE   c                    |                                  }|                     | j        |          r| j                            d          }|| j        vr|                     d|z            | j                            d          }t          || j                  }| j                            d          }||gf| j        |<   nd }|                     t          |          s5|                     | j
        |          r| j                            d          }| j        T|                     t          |          r!| j                            d          | _        d S |                     d|z            | j                            d          }t          || j                  }| j                            d          }|d}|r|dz   |z   }|                     | j        |          rt          | j                            d	                    }	 |                     |          }|                     |||f           |                                  }|                     | j        |          |                     ||           |dv rx|                     t&          |          r]| j                            d          }t          || j                  }|                     || j                            d                     	 |S )Nr  zunexpected tagged response: %rr  r   data2zunexpected response: %rrE   r  r   Fr  zread literal size %sr  )	_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    ~~ ;;tz4(( 5	,'--&&C$...jj!AD!HIII'--''Cc4>**C'--''C),seD %%D ;;0$77 2;;t3T:: 27==11Dw ;;|T22  15v1F1FD.4jj!:T!ABBB'--''Cc4>**C'--''C{#C,3:,S ++dlC00 ' 47==0011B yy %%cC;777 nn&&! ++dlC00 '$ !!#s+++ %%%$++mS*I*I%'--''Cc4>**C!!#tw}}V'<'<===	; rE   c                     	 | j         |         }|
| j         |= |S |r#d}| j                            |d           }|||fS |                                  	 |                                  n# | j        $ r}	  d }~ww xY w})Nrx   r  )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""$$$$:   ) 	1	s   A* *
A;4A66A;c                     |                                  }|s|                     d          |                    d          s|                     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  sr    }} 	2**0111 }}W%% 	K**BTIJJJCRCy	)
 rE   c                 J    |                     |          | _        	 | j        d uS r   )matchr  rR   r   r  groups)rb   cress      rF   r  zIMAP4._match  s*    
 ))A,,	S wd""rE   c                     | j         t          t          | j                  | j                  z   }| j        dz   | _        d | j        |<   |S )Nrx   )r~   r  r+  rY   rj   rU   )rb   r  s     rF   r  zIMAP4._new_tag  sC    kE#dk"2"2DNCCCkAo$(S!
rE   c                 j    |                     dd          }|                     dd          }d|z   dz   S )N\z\\"z\")r   )rb   r  s     rF   r  zIMAP4._quote  s6    kk$''kk#u%%Sy3rE   c                 F    |                      | | j        |g|R            S r   )r  r  r|  s      rF   r   zIMAP4._simple_command  s,    %%dMDM$,F,F,F,FGGGrE   c                 p    |dk    r||fS || j         vr|d gfS | j                             |          }	 ||fS )Nr  )rV   r  rR   r   )rb   r   r   r   r   s        rF   r   zIMAP4._untagged_response  sV    $;;8Ot...;&**400	J DyrE   c                    |t          j                     }t          j        dt          j        |                    }t          j                            d||dz  dz  |fz             t          j                                         d S )Nz%M:%Sz  %s.%02d %s
d   )timestrftime	localtimer   stderrwriteflush)rb   r  secstms       rF   r   zIMAP4._mesg  sr    |y{{wt(<(<==BJ-d3h^Q0GGHHHJrE   c                     |sd S d |                                 D             }|                     dd                    |          z              d S )Nc              3   *   K   | ]\  }}| d |V  dS ): NrD   ).0keyvalues      rF   	<genexpr>z!IMAP4._dump_ur.<locals>.<genexpr>  sP       B B"U ((u(( B B B B B BrE   zuntagged responses dump:z
		)itemsr   ru  )rb   untagged_resp_dictr  s      rF   r9  zIMAP4._dump_ur  sh    % B B&8&>&>&@&@B B BEJJ1HMM%4H4HHIIIIIrE   c                     |t          j                     f| j        | j        <   | xj        dz  c_        | j        | j        k    r	d| _        d S d S )Nrx   r   )r  r   r   r   r   s     rF   r  z
IMAP4._log  sW    04dikk/BDM$+," D$555$%!!! 65rE   c                     |                      dt          | j                  z             | j        | j        }}|r9	  | j         | j        |           n#  Y nxY w|dz  }|| j        k    rd}|dz  }|7d S d S )Nzlast %d IMAP4 interactions:rx   r   )r   r   r   r   r   )rb   ins      rF   r  zIMAP4.print_log  s    JJ4s4=7I7IIJJJ$d&7qA DJa 0111DQ)))AQ      s   A A)r  r  )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   r3  r5  r7  r   r?  rA  rE  rJ  rO  rR  rT  rW  r[  rd  rg  rj  rl  ro  rv  rx  rz  r}  r  r  r  r  r   r   r  r  r  r  r  r   r   r   r9  r  r  rD   rE   rF   r   r      s       -^ !    	   5Z    2F F F< < <'7 '7 '7TC C C    1 1 1 T 	- 	- 	- 	-$ $ $
            7 7 7"C C CE E E4  :7 7 7- - -  F F F7 7 77 7 7? ? ?
 
 
7 7 77 7 78 8 8? ? ?: : :' ' '	7 	7 	7 	7  B B BN N N
 
 
	7 	7 	7 	7= = =7 7 7, , ,	: 	: 	:
7 
7 
7F F F7 7 7$B B B B@B B B? ? ?: : :7 7 77 7 7 7.	7 	7 	7: : :: : :7 7 77 7 72< < <   1 1 1,  H H HJ J JZ  $/ / /M M M`   B  &	# 	# 	#    H H H
	 	 	" "rE   r   c                   8    e Zd Z	 deddddfdZd ZdedfdZdS )	IMAP4_SSLrO   Nc                 .   ||t          d          ||t          d          || dd l}|                    dt          d           || _        || _        |t          j        ||          }|| _        t          
                    | |||           d S )Nz8ssl_context and keyfile arguments are mutually exclusivez9ssl_context and certfile arguments are mutually exclusiver   zEkeyfile and certfile are deprecated, use a custom ssl_context instead   )certfilekeyfile)r   warningswarnDeprecationWarningr  r  r`  ra  rc  r   rf   )rb   rc   rd   r  r  rc  re   r  s           rF   rf   zIMAP4_SSL.__init__  s    &7+>  "- . . .&8+?  "- . . ."h&: ;<NPQS S S"DL$DM"!8(AHJ J J*DNN4tW55555rE   c                 z    t                               | |          }| j                            || j                  S )Nr]  )r   r   rc  rb  rc   )rb   re   r   s      rF   r   zIMAP4_SSL._create_socket-  sA    ''g66D#//@D	 0 K K KrE   c                 B    	 t                               | |||           d S r   )r   r\   ra   s       rF   r\   zIMAP4_SSL.open2  s'    
 JJtT411111rE   )rA   rB   rC   IMAP4_SSL_PORTrf   r   r\   rD   rE   rF   r  r    sl        	& !#"d	6 	6 	6 	6(	K 	K 	K
 ^T 	2 	2 	2 	2 	2 	2rE   r  c                   6    e Zd Z	 d ZddZd Zd Zd Zd ZdS )	r   c                 H    || _         t                              |            d S r   )ri  r   rf   )rb   ri  s     rF   rf   zIMAP4_stream.__init__I  s!    trE   Nc                     	 d | _         d | _        d | _        d | _        t	          j        | j        t          t          j        t          j        dd          | _	        | j	        j
        | _        | j	        j        | _        d S )NT)bufsizestdinstdoutshell	close_fds)rc   rd   r   r   
subprocessPopenri  r   PIPEr   r  	writefiler  readfilera   s       rF   r\   zIMAP4_stream.openN  sq    	 				!''/*/$( ( ( ++rE   c                 8    	 | j                             |          S r   )r  r   r   s     rF   r   zIMAP4_stream.read^  s    ,}!!$'''rE   c                 6    	 | j                                         S r   )r  r   rr   s    rF   r   zIMAP4_stream.readlinec  s    $}%%'''rE   c                 n    	 | j                             |           | j                                          d S r   )r  r  r  r   s     rF   r   zIMAP4_stream.sendh  s5    "T"""rE   c                     	 | j                                          | j                                         | j                                         d S r   )r  r   r  r   waitrr   s    rF   r_   zIMAP4_stream.shutdownn  sG    .rE   )NNN)	rA   rB   rC   rf   r\   r   r   r   r_   rD   rE   rF   r   r   =  sx          
, , , , ( ( (
( ( (
      rE   r   c                   (    e Zd Z	 d Zd Zd Zd ZdS )r   c                     || _         d S r   )r   )rb   mechinsts     rF   rf   z_Authenticator.__init__|  s    			rE   c                     |                      |                     |                    }|dS |                     |          S )N   *)r   r   r,  )rb   r   rets      rF   r   z_Authenticator.process  s;    iiD))**;4{{3rE   c                    d}t          |t                    r|                    d          }|rQt          |          dk    r|d d         }|dd          }n|}d}t	          j        |          }|r||d d         z   }|Q|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 		#3xx"}}H"##h#A&&A #AcrcFl  		# 
rE   c                 2    |sdS t          j        |          S r  )r  
a2b_base64)rb   r  s     rF   r   z_Authenticator.decode  s      	3"3'''rE   N)rA   rB   rC   rf   r   r,  r   rD   rE   rF   r   r   v  sU                 0( ( ( ( (rE   r   z0 Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Decr'  c                 D    i | ]\  }}|                                 |d z   S )rx   )r,  )r  r  r  s      rF   
<dictcomp>r    s*    
<
<
<da188::ac
<
<
<rE   rx   c           	         	 t                               |           }|sd S t          |                    d                   }|                    d          }t	          |                    d                    }t	          |                    d                    }t	          |                    d                    }t	          |                    d                    }t	          |                    d                    }t	          |                    d                    }	t	          |                    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timegmr  r  )r  r  r  r  r  r  r  r	  r
  r  r  zonettutcs                 rF   r	   r	     sX    
		D	!	!B t
"((5//
"CHHWE
bhhuoo

Crxx  Drxx  D
bhhuoo

C
bhhuoo

C!!""E!!""E "Hub D}}u
S$S"b"	5B
/"


$C>#rE   c                     	 d}d}t          t          |                     } | r%t          | d          \  } }|||dz            |z   }| %|S )NrE   s   ABCDEFGHIJKLMNOP   rx   )r  absdivmod)numr  APmods       rF   r
   r
     s`    7
C'r
c#hh--C
 "#r??SSUmc!  " JrE   c                     	 t                               |           }|sdS t          |                    d                                                    S )NrD   r   )Flagsr  r  r  r  )r  r  s     rF   r   r     sI    7	T		B r'""((**+++rE   c                    	 t          | t          t          f          r3t          j        | t
          j                                                  }n;t          | t                    r	 | j	        }n# t          $ rv t          j        rZ| d         }|dk    r,t          j        t          j        |                     d         }t          j        t          j        f|          }nt          j         }Y nw xY wt!          |          }t          | d d         dt          |          i}nht          | t                    r| j        t%          d          | }n:t          | t&                    r| d         | d         fdk    r| S t%          d	          d
                    t*          |j                           }|                    |          S )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monthr  )r   dtgmtoffdstdeltafmts         rF   r   r     s   	 )c5\** :#I$,L2 22<*,, 		Iu	%	% :		((FF 	( 	( 	(} (l"99.Y)?)?@@CC=$,7<<-	( &)))y!}=Xe__==	Ix	(	( :#6777	Is	#	# :1im(D	(Q(Q8999
"
)
)&*:
;
;C;;ss   'A/ /A=C/.C/__main__zd:s:)rD   rD   z-dz-s)rO   zIMAP password for z on 	localhostr  zJFrom: %(user)s@localhost%(lf)sSubject: IMAP4 test%(lf)s%(lf)sdata...%(lf)s
)r   lfr"  )r   )
/tmp/xxx 1)rE  )r7  z/tmp/yyy)r   
/tmp/yyz 2r   r9  )r  )z/tmpzyy*)rO  r8  )rJ  )NSUBJECTtest)r  )1z(FLAGS INTERNALDATE RFC822))rj  )r<  FLAGSz
(\Deleted))r7  rD   )r   rD   )r   rD   )r   rD   )rO  rD   )r   )UIDVALIDITY)rv  )r/   ALL)r   )rM  )r   rD   c                     t                               | d|            t          t           |           | \  }}t                               | d|d|           |dk    r|d         |S )Nr'  r  r  r   )Mr   r   )cmdr   r   r   s       rF   runrC  A  sp    	333%&&&"71c??D)S	ccc33/000$;;c!f
rE   r   zPROTOCOL_VERSION = %szCAPABILITIES = r  )z/tmp/zyy%z.*"([^"]+)"$r   r   rv  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
)Tr   r  r   r|   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   rA   getoptgetpassargvoptlistr   rG   r  stream_commandoptr  rc   getuserUSERPASSWD	test_mesg	test_seq1	test_seq2rC  rA  rS   r   r   r   rB  mlr  r  r  pathr   rv  printrD   rE   rF   <module>rW     s  
,  K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K 2 2 2 2 2 2 2 2 2 2 " " " " " "JJJHH   HHH8 8 8
 	
( 
,
,,
 	,
 	A	,

 	,
 	,
 	,
 	,,
 	,,
 	,,
 	
,
 	,,
 	,
 	,
 	,,
  	,!,
" 	,#,
$ 	,%,
 ,
& 	,',
( 	,),
* 	+,
, 	A-,
. 	,/,
0 	1,
2 	,3,
4 	A5,
6 	7,
8 		9,
: 	,;,
< 	=,
> 	,?,
@ 	,A,
B 	,C,
D 	,E,
F 	G,
 ,
H %,%,%%,%W,
 ,
 ,
` rz011
455rz    "*+RX
6
6
"*^
$
$ 
DEEBJGHH "*;RXG G "J x x x x x x x xv#  8 42 42 42 42 42E 42 42 42l NN;5 5 5 5 55 5 5 5r*( *( *( *( *( *( *( *(X 
<	A	A#	F	F
<
<iiqrr
&;&;
<
<
<  F	 	 	, , ,% % %R z %chqrrlF;;<    N 2 2C$;;CHHEED[[ N1 17D7?DW__tttTEX[EXEXYZZF\gkrv_w_wwItVn*dD)45)3,I$ !dD),-I  ) 	^,,AAdA7f!!""I	'!*<<===	q~~7888! 	 	HCCTNNNN#f.// 	# 	#B/2..B ("((1++44B$C4'""""! 		S 		SHC#c4..CDz777b'--//C CBPR S S S S 	     	    	E  
hqk   
 	Q s6   A   A
	A
=!H 
H8)H33H8D8P )P0