a ´iØ×ã+@s˜dZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl m Z m Z m Z ddl mZzddlZdZWney’dZYn0gd¢ZdZdZd Zd Zd Zd Zd Zdddddddddddddddddddddddddddddddddddddddddddœ*Ze d¡Ze d¡Ze d¡Ze dej¡Z e d¡Z!e d¡Z"e d¡Z#e dej¡Z$dZ%dZ&Gdd„dƒZ'er Gdd„de'ƒZ(e )d¡Gd d!„d!e'ƒZ*Gd"d#„d#ƒZ+d$ ,d%¡Z-d&d'„e.e-d(d…ƒDƒZ/d)d*„Z0d+d,„Z1d-d.„Z2d/d0„Z3e4d1kr”ddl5Z5ddl6Z6ze5 5ej7d(d…d2¡\Z8Z9Wn0e5j:yjZ;zd3\Z8Z9WYdZ;[;n dZ;[;00dZe;ƒZne=d5krte;Zd?d@dAddeCffdBdCdDdEdFdGdHdIdJfZDdKdLdMdNd@dddeCffdIdOfZEdPdQ„ZFze<r\e*e<ƒZGne'e?ƒZGeGjHdRkr|eDd(d…ZDeG IdSeGjJ¡eG IdTeGjKf¡eDD]\ZLZ9eFeLe9ƒq¢eFdUdVƒD]qeFdZd[d\eSdXd]fƒqeTd^ƒWn.eTd_ƒesŒeTd`ej7dƒ‚Yn0dS)az2.58éN)ÚdatetimeÚtimezoneÚ timedelta)ÚDEFAULT_BUFFER_SIZETF)ÚIMAP4Ú IMAP4_streamÚInternaldate2tupleÚInt2APÚ ParseFlagsÚTime2Internaldateó éiá)Z IMAP4REV1ri@Bi)ÚAUTHÚSELECTED)ÚNONAUTH)rrrÚLOGOUT)r)r)*ÚAPPENDÚ AUTHENTICATEÚ CAPABILITYÚCHECKÚCLOSEÚCOPYÚCREATEÚDELETEÚ DELETEACLÚENABLEÚEXAMINEÚEXPUNGEÚFETCHÚGETACLÚ GETANNOTATIONÚGETQUOTAÚ GETQUOTAROOTÚMYRIGHTSÚLISTÚLOGINrÚLSUBZMOVEÚ NAMESPACEÚNOOPÚPARTIALÚ PROXYAUTHÚRENAMEÚSEARCHÚSELECTÚSETACLÚ SETANNOTATIONÚSETQUOTAÚSORTÚSTARTTLSÚSTATUSÚSTOREÚ SUBSCRIBEÚTHREADÚUIDÚ UNSUBSCRIBEÚUNSELECTs\+( (?P.*))?s.*FLAGS \((?P[^\)]*)\)sÕ.*INTERNALDATE "(?P[ 0123][0-9])-(?P[A-Z][a-z][a-z])-(?P[0-9][0-9][0-9][0-9]) (?P[0-9][0-9]):(?P[0-9][0-9]):(?P[0-9][0-9]) (?P[-+])(?P[0-9][0-9])(?P[0-9][0-9])"s.*{(?P\d+)}$s \r\n|\r|\ns%\[(?P[A-Z-]+)( (?P.*))?\]s$\* (?P[A-Z-]+)( (?P.*))?s3\* (?P\d+) (?P[A-Z-]+)( (?P.*))?c@s–eZdZGdd„deƒZGdd„deƒZGdd„deƒZdedfd d „Zd d „Z d d„Z dd„Z dd„Z dd„Z dd„Zdd„Zdedfdd„Zdd„Zdd„Zdd „Zd!d"„Zd#d$„Zd%d&„Zd'd(„Zd)d*„Zd+d,„Zd-d.„Zd/d0„Zd1d2„Zd3d4„Zd5d6„Zd7d8„Zd9d:„Z d;d<„Z!d=d>„Z"d?d@„Z#dAdB„Z$dCdD„Z%dEdF„Z&dGdH„Z'ddKdL„Z(dMdN„Z)dOdP„Z*dQdR„Z+dSdT„Z,dždUdV„Z-dWdX„Z.dYdZ„Z/d[d\„Z0d]d^„Z1d_d`„Z2dadb„Z3dcdd„Z4dŸdgdh„Z5didj„Z6dkdl„Z7dmdn„Z8dodp„Z9d dqdr„Z:dsdt„Z;dudv„Zd{d|„Z?d}d~„Z@dd€„ZAdd‚„ZBdƒd„„ZCd…d†„ZDd‡dˆ„ZEd‰dŠ„ZFd‹dŒ„ZGddŽ„ZHd¡dd„ZId‘d’„ZJd“d”„ZKd•d–„ZLd—d˜„ZMd™dš„ZNd›dœ„ZOdS)¢rc@s eZdZdS)z IMAP4.errorN©Ú__name__Ú __module__Ú __qualname__©r>r>ú/usr/lib64/python3.9/imaplib.pyÚerror»ór@c@s eZdZdS)z IMAP4.abortNr:r>r>r>r?Úabort¼rArBc@s eZdZdS)zIMAP4.readonlyNr:r>r>r>r?Úreadonly½rArCÚNc Cs’t|_d|_d|_i|_i|_d|_d|_d|_d|_ |  ¡|  |||¡z |  ¡Wn4t yŒz | ¡Wnty„Yn0‚Yn0dS)NrrDFr)ÚDebugÚdebugÚstateÚliteralÚtagged_commandsÚuntagged_responsesÚcontinuation_responseÚ is_readonlyÚtagnumÚ_tls_establishedÚ _mode_asciiÚopenÚ_connectÚ ExceptionÚshutdownÚOSError©ÚselfÚhostÚportÚtimeoutr>r>r?Ú__init__¿s&    zIMAP4.__init__cCs0d|_d|_t ttj¡|_t ttj¡|_dS)NFÚascii) Ú utf8_enabledÚ _encodingÚreÚcompileÚ_LiteralÚASCIIÚLiteralÚ_Untagged_statusÚUntagged_status©rVr>r>r?rOØszIMAP4._mode_asciicCs(d|_d|_t t¡|_t t¡|_dS)NTúutf-8)r\r]r^r_r`rbrcrdrer>r>r?Ú _mode_utf8ßs zIMAP4._mode_utf8cCsœtt dd¡ƒ|_t d|jdtj¡|_|  ¡|_ d|j vrHd|_ nd|j vrZd|_ n |  |j ¡‚| ¡tD]}||jvr‚qr||_dS|  d ¡‚dS) Niiÿÿs(?Ps"\d+) (?P[A-Z]+) (?P.*)ZPREAUTHrÚOKrzserver not IMAP4 compliant)r ÚrandomÚrandintÚtagprer^r_raÚtagreÚ __version__Ú _get_responseZwelcomerJrGr@Ú_get_capabilitiesÚAllowedVersionsÚ capabilitiesÚPROTOCOL_VERSION)rVÚversionr>r>r?rQæs*ÿþþ     zIMAP4._connectcCs&|tvrt|| ¡ƒStd|ƒ‚dS)NzUnknown IMAP4 command: '%s')ÚCommandsÚgetattrÚlowerÚAttributeError)rVÚattrr>r>r?Ú __getattr__szIMAP4.__getattr__cCs|S©Nr>rer>r>r?Ú __enter__szIMAP4.__enter__cGs2|jdkrdSz | ¡Wnty,Yn0dS©Nr)rGÚlogoutrT)rVÚargsr>r>r?Ú__exit__s    zIMAP4.__exit__cCs`|dur|stdƒ‚|jsdn|j}t d||j|j¡||jf}|durVt ||¡St |¡S)Nz0Non-blocking socket (timeout=0) is not supportedz imaplib.open)Ú ValueErrorrWÚsysÚauditrXÚsocketÚcreate_connection)rVrYrWÚaddressr>r>r?Ú_create_socket&s   zIMAP4._create_socketcCs*||_||_| |¡|_|j d¡|_dS)NÚrb)rWrXr†ÚsockÚmakefileÚfilerUr>r>r?rP3s z IMAP4.opencCsVt|tƒ}|j |¡}||krRt|ƒ|krRt|||ƒ}||j |¡7}||7}q|Srz)ÚminÚ_SAFE_BUF_SIZErŠÚreadÚlen)rVÚsizeZcursizeÚdataÚdeltar>r>r?r?s   z IMAP4.readcCs.|j td¡}t|ƒtkr*| dt¡‚|S)Nézgot more than %d bytes)rŠÚreadlineÚ_MAXLINErŽr@©rVÚliner>r>r?r“Js zIMAP4.readlinecCst d||¡|j |¡dS)Nz imaplib.send)rr‚rˆÚsendall©rVrr>r>r?ÚsendRsz IMAP4.sendc Cs€|j ¡zdz|j tj¡WnBty`}z*|jtjkrLt |ddƒdkrL‚WYd}~n d}~00W|j ¡n |j ¡0dS)NÚwinerrorri&') rŠÚcloserˆrSrƒÚ SHUT_RDWRrTÚerrnoZENOTCONNru)rVÚexcr>r>r?rSXs  ÿzIMAP4.shutdowncCs|jSrz)rˆrer>r>r?rƒhsz IMAP4.socketcCsBd}| ddg|¡\}}|dr(||fS| ¡\}}| |||¡S)NZRECENTrhéÿÿÿÿ)Ú_untagged_responseÚnoop©rVÚnameÚtypÚdatr>r>r?Úrecentts  z IMAP4.recentcCs| |dg| ¡¡Srz)r Úupper)rVÚcoder>r>r?Úresponse…szIMAP4.responsecCsxd}|s d}|r.|d|dfdkr2d|}nd}|r@t|ƒ}nd}t t|¡}|jrbd|d}||_| ||||¡S) NrÚINBOXrrŸ©ú(ú)ú(%s)sUTF8 (ó))r ÚMapCRLFÚsubÚCRLFr\rHÚ_simple_command)rVÚmailboxÚflagsÚ date_timeÚmessager£rHr>r>r?Úappend“s    z IMAP4.appendcCsP| ¡}t|ƒj|_| d|¡\}}|dkrB| |d dd¡¡‚d|_||fS)NrrhrŸrfÚreplacer)r§Ú_AuthenticatorÚprocessrHr³r@ÚdecoderG)rVZ mechanismZ authobjectÚmechr¤r¥r>r>r?Ú authenticate­s zIMAP4.authenticatecCs d}| |¡\}}| |||¡S)Nr©r³r r¢r>r>r?Ú capabilityÊszIMAP4.capabilitycCs | d¡S)Nr©r³rer>r>r?ÚcheckÓsz IMAP4.checkcCs*z| d¡\}}Wd|_nd|_0||fS)Nrr©r³rG©rVr¤r¥r>r>r?r›Ûsz IMAP4.closecCs| d||¡S)NrrÁ)rVÚ message_setZ new_mailboxr>r>r?Úcopyêsz IMAP4.copycCs | d|¡S)NrrÁ©rVr´r>r>r?Úcreateòsz IMAP4.createcCs | d|¡S)NrrÁrÇr>r>r?Údeleteúsz IMAP4.deletecCs| d||¡S)NrrÁ)rVr´Úwhor>r>r?Ú deleteaclszIMAP4.deleteaclcCsHd|jvrt d¡‚| d|¡\}}|dkr@d| ¡vr@| ¡||fS)NrzServer does not support ENABLErhz UTF8=ACCEPT)rqrr@r³r§rg)rVrÀr¤rr>r>r?Úenables   z IMAP4.enablecCs d}| |¡\}}| |||¡S)Nrr¿r¢r>r>r?Úexpunges z IMAP4.expungecCs$d}| |||¡\}}| |||¡S)Nrr¿)rVrÅZ message_partsr£r¤r¥r>r>r?Úfetch"s z IMAP4.fetchcCs| d|¡\}}| ||d¡S)NrZACLr¿©rVr´r¤r¥r>r>r?Úgetacl1sz IMAP4.getaclcCs"| d|||¡\}}| ||d¡S)Nr Ú ANNOTATIONr¿)rVr´ÚentryZ attributer¤r¥r>r>r?Ú getannotation:szIMAP4.getannotationcCs| d|¡\}}| ||d¡S)Nr!ÚQUOTAr¿)rVÚrootr¤r¥r>r>r?ÚgetquotaBszIMAP4.getquotacCs@| d|¡\}}| ||d¡\}}| ||d¡\}}|||gfS)Nr"rÔZ QUOTAROOTr¿)rVr´r¤r¥ZquotaZ quotarootr>r>r?Ú getquotarootMszIMAP4.getquotarootú""Ú*cCs$d}| |||¡\}}| |||¡S)Nr$r¿©rVZ directoryÚpatternr£r¤r¥r>r>r?ÚlistXsz IMAP4.listcCs<| d|| |¡¡\}}|dkr.| |d¡‚d|_||fS)Nr%rhrŸr)r³Ú_quoter@rG)rVÚuserÚpasswordr¤r¥r>r>r?Úloginds z IMAP4.logincCs|||_|_| d|j¡S)NzCRAM-MD5)rÞrßr¾Ú_CRAM_MD5_AUTH)rVrÞrßr>r>r?Úlogin_cram_md5rszIMAP4.login_cram_md5cCsBddl}t|jtƒr |j d¡n|j}|jd| ||d¡ ¡S)Nrrfú Úmd5)ÚhmacÚ isinstancerßÚstrÚencoderÞÚHMACÚ hexdigest)rVZ challengeråÚpwdr>r>r?rá{s ÿzIMAP4._CRAM_MD5_AUTHcCs$d|_| d¡\}}| ¡||fSr|)rGr³rSrÄr>r>r?r}ƒsz IMAP4.logoutcCs$d}| |||¡\}}| |||¡S)Nr&r¿rÚr>r>r?Úlsubsz IMAP4.lsubcCs| d|¡\}}| ||d¡S)Nr#r¿rÏr>r>r?Úmyrights›szIMAP4.myrightscCs d}| |¡\}}| |||¡S)Nr'r¿r¢r>r>r?Ú namespace£szIMAP4.namespacecCs | d¡S)Nr(rÁrer>r>r?r¡­sz IMAP4.noopcCs(d}| |||||¡\}}| ||d¡S)Nr)rr¿)rVZ message_numZ message_partÚstartÚlengthr£r¤r¥r>r>r?Úpartial¸sz IMAP4.partialcCsd}| d|¡S)Nr*rÁ)rVrÞr£r>r>r?Ú proxyauthÄs zIMAP4.proxyauthcCs| d||¡S)Nr+rÁ)rVZ oldmailboxZ newmailboxr>r>r?ÚrenameÑsz IMAP4.renamecGsXd}|r4|jrt d¡‚|j|d|g|¢RŽ\}}n|j|g|¢RŽ\}}| |||¡S)Nr,z'Non-None charset not valid in UTF8 modeÚCHARSET)r\rr@r³r )rVÚcharsetZcriteriar£r¤r¥r>r>r?ÚsearchÙs z IMAP4.searchrªFcCsvi|_||_|rd}nd}| ||¡\}}|dkr@d|_||fSd|_d|jvrb|sb| d|¡‚||j ddg¡fS) Nrr-rhrrú READ-ONLYz%s is not writableÚEXISTS)rJrLr³rGrCÚget)rVr´rCr£r¤r¥r>r>r?Úselectës  ÿz IMAP4.selectcCs| d|||¡S)Nr.rÁ)rVr´rÊZwhatr>r>r?Úsetacl sz IMAP4.setaclcGs$|jdg|¢RŽ\}}| ||d¡S)Nr/rÑr¿)rVr~r¤r¥r>r>r?Ú setannotationszIMAP4.setannotationcCs | d||¡\}}| ||d¡S)Nr0rÔr¿)rVrÕZlimitsr¤r¥r>r>r?ÚsetquotaszIMAP4.setquotacGsHd}|d|dfdkr d|}|j|||g|¢RŽ\}}| |||¡S)Nr1rrŸr«r®r¿)rVZ sort_criteriarõÚsearch_criteriar£r¤r¥r>r>r?Úsort$s z IMAP4.sortcCs¦d}ts| d¡‚|jr"| d¡‚||jvr6| d¡‚|durFt ¡}| |¡\}}|dkrŽ|j|j |j d|_ |j   d¡|_ d|_|  ¡n | d ¡‚| |||¡S) Nr2zSSL support missingzTLS session already establishedzTLS not supported by serverrh©Zserver_hostnamer‡TzCouldn't establish TLS session)ÚHAVE_SSLr@rNrBrqÚsslÚ_create_stdlib_contextr³Ú wrap_socketrˆrWr‰rŠror )rVÚ ssl_contextr£r¤r¥r>r>r?Ústarttls2s&    ÿ  zIMAP4.starttlscCs$d}| |||¡\}}| |||¡S)Nr3r¿)rVr´Únamesr£r¤r¥r>r>r?ÚstatusIsz IMAP4.statuscCs>|d|dfdkrd|}| d|||¡\}}| ||d¡S)NrrŸr«r®r4rr¿)rVrÅÚcommandrµr¤r¥r>r>r?ÚstoreUsz IMAP4.storecCs | d|¡S)Nr5rÁrÇr>r>r?Ú subscribe`szIMAP4.subscribecGs,d}|j|||g|¢RŽ\}}| |||¡S)Nr6r¿)rVZthreading_algorithmrõrþr£r¤r¥r>r>r?Úthreadhsz IMAP4.threadc Gsˆ| ¡}|tvr| d|¡‚|jt|vrL| d||jd t|¡f¡‚d}|j||g|¢RŽ\}}|dvrv|}nd}| |||¡S)NzUnknown IMAP4 UID command: %sú9command %s illegal in state %s, only allowed in states %sú, r7)r,r1r6r)r§rtr@rGÚjoinr³r )rVr r~r£r¤r¥r>r>r?Úuidrs ÿþz IMAP4.uidcCs | d|¡S)Nr8rÁrÇr>r>r?Ú unsubscribe‹szIMAP4.unsubscribecCs*z| d¡\}}Wd|_nd|_0||fS)Nr9rrÃ)rVr¤rr>r>r?Úunselect“s zIMAP4.unselectcGs.| ¡}|tvr|jft|<|j|g|¢RŽSrz)r§rtrGr³©rVr£r~r>r>r?Úxatom£s  z IMAP4.xatomcCs8|dur d}|j}||vr*|| |¡n |g||<dS©NrA)rJrŽr¸)rVr¤r¥Úurr>r>r?Ú_append_untagged¹s zIMAP4._append_untaggedcCs,|j d¡}|r(| |d |jd¡¡‚dS)NÚBYErŸr¹)rJrùrBr¼r])rVÚbyer>r>r?Ú _check_byeÇs zIMAP4._check_byec Gsî|jt|vr4d|_| d||jd t|¡f¡‚dD]}||jvr8|j|=q8d|jvrj|jsj| d¡‚| ¡}t ||j ƒ}|d|}|D]0}|durœqŽt |t ƒr²t ||j ƒ}|d|}qŽ|j}|dur d|_t |ƒt |jƒurî|}nd}|t dt|ƒ|j ƒ}z| |t¡Wn4tyP} z| d| ¡‚WYd} ~ n d} ~ 00|dur`|S| ¡r~|j|r`|Sq`|rŽ||jƒ}z| |¡| t¡Wn4tyÚ} z| d| ¡‚WYd} ~ n d} ~ 00|s`qêq`|S) Nr r©rhÚNOÚBADr÷z#mailbox status changed to READ-ONLYó z {%s}zsocket error: %s)rGrtrHr@rrJrLrCÚ_new_tagÚbytesr]rærçÚtypeÚ_commandrŽr™r²rTrBrnrIrK) rVr£r~r¤ÚtagrÚargrHZ literatorÚvalr>r>r?r"Ís` ÿþ   ÿ       $     $zIMAP4._commandc CsÊ|dk}|s| ¡z|j||d\}}Wnn|jyb}z| d||f¡‚WYd}~n@d}~0|jy˜}z| d||f¡‚WYd}~n d}~00|s¦| ¡|dkrÂ| d|||f¡‚||fS)Nr)Ú expect_byezcommand: %s => %srz%s command error: %s %s)rÚ_get_tagged_responserBr@)rVr£r#r}r¤rr%r>r>r?Ú_command_completes&(zIMAP4._command_completecCsJ| ¡\}}|dgkr | d¡‚t|d|jƒ}| ¡}t| ¡ƒ|_dS)Nz"no CAPABILITY response from serverrŸ)rÀr@rçr]r§ÚtupleÚsplitrqrÄr>r>r?ro,s    zIMAP4._get_capabilitiescCs®| ¡}| |j|¡rp|j d¡}||jvr:| d|¡‚|j d¡}t||jƒ}|j d¡}||gf|j|<nöd}| t |¡sš| |j |¡rš|j d¡}|jdurÐ| t |¡rÂ|j d¡|_ dS| d|¡‚|j d¡}t||jƒ}|j d¡}|durd}|r|d|}| |j |¡rZt|j d ¡ƒ}| |¡}| |||f¡| ¡}q| ||¡|d vrª| t|¡rª|j d¡}t||jƒ}| ||j d¡¡|S) Nr#zunexpected tagged response: %rr!rZdata2zunexpected response: %rrArrr)Ú _get_lineÚ_matchrlÚmoÚgrouprIrBrçr]ÚUntagged_responserdÚ ContinuationrKrbÚintrrÚ Response_code)rVÚrespr#r¤r¥Zdat2rrr>r>r?rn5sD                 zIMAP4._get_responsec Csˆ|j|}|dur|j|=|S|rDd}|j |d¡}|durD||fS| ¡z | ¡Wq|jy€}z‚WYd}~qd}~00qdS)Nr)rIrJÚpoprrnrB)rVr#r&Úresultr¤rr%r>r>r?r'…s  zIMAP4._get_tagged_responsecCs>| ¡}|s| d¡‚| d¡s.| d|¡‚|dd…}|S)Nzsocket error: EOFr z#socket error: unterminated line: %réþÿÿÿ)r“rBÚendswithr•r>r>r?r+¦s   zIMAP4._get_linecCs| |¡|_|jduSrz)Úmatchr-)rVZcreÚsr>r>r?r,¹s z IMAP4._matchcCs2|jtt|jƒ|jƒ}|jd|_d|j|<|S)Nr’)rkr rçrMr]rI)rVr#r>r>r?rÅs  zIMAP4._new_tagcCs$| dd¡}| dd¡}d|dS)Nú\z\\ú"z\")r¹)rVr$r>r>r?rÝÍs  z IMAP4._quotecGs| ||j|g|¢RŽ¡Srz)r(r"rr>r>r?r³ÕszIMAP4._simple_commandcCs8|dkr||fS||jvr$|dgfS|j |¡}||fS)Nr)rJr4)rVr¤r¥r£rr>r>r?r Ús    zIMAP4._untagged_response)rØrÙ)rØrÙ)rªF)N)F)Tr;r<r=rRr@rBrCÚ IMAP4_PORTrZrOrgrQryr{rr†rPrr“r™rSrƒr¦r©r¸r¾rÀrÂr›rÆrÈrÉrËrÌrÍrÎrÐrÓrÖr×rÜràrârár}rìrírîr¡rñròrórörúrûrürýrÿrrr r r rrrrrrr"r(rornr'r+r,rrÝr³r Ú_mesgZ_dump_urÚ_logZ print_logr>r>r>r?rŠs˜1*                      M P ! $rc@s:eZdZdeddddfdd„Zdd„Zdedfdd„ZdS) Ú IMAP4_SSLrDNcCs’|dur|durtdƒ‚|dur0|dur0tdƒ‚|dus@|durVddl}| dtd¡||_||_|durxtj||d}||_t   ||||¡dS)Nz8ssl_context and keyfile arguments are mutually exclusivez9ssl_context and certfile arguments are mutually exclusiverzEkeyfile and certfile are deprecated, use a custom ssl_context insteadé)ÚcertfileÚkeyfile) r€ÚwarningsÚwarnÚDeprecationWarningrBrArrrrrZ)rVrWrXrBrArrYrCr>r>r?rZ#s"ÿÿzIMAP4_SSL.__init__cCst ||¡}|jj||jdS)Nr)rr†rrrW)rVrYrˆr>r>r?r†7s ÿzIMAP4_SSL._create_socketcCst ||||¡dSrz)rrPrUr>r>r?rP<szIMAP4_SSL.open)r;r<r=ÚIMAP4_SSL_PORTrZr†rPr>r>r>r?r?s ÿ r?c@s>eZdZdd„Zddd„Zdd„Zdd „Zd d „Zd d „ZdS)rcCs||_t |¡dSrz)r rrZ)rVr r>r>r?rZSszIMAP4_stream.__init__NcCsNd|_d|_d|_d|_tj|jttjtjddd|_ |j j |_ |j j |_ dS)NT)ÚbufsizeÚstdinÚstdoutÚshellÚ close_fds)rWrXrˆrŠÚ subprocessÚPopenr rÚPIPEr»rHÚ writefilerIÚreadfilerUr>r>r?rPXsý zIMAP4_stream.opencCs |j |¡Srz)rPr)rVrr>r>r?rhszIMAP4_stream.readcCs |j ¡Srz)rPr“rer>r>r?r“mszIMAP4_stream.readlinecCs|j |¡|j ¡dSrz)rOÚwriteÚflushr˜r>r>r?r™rs zIMAP4_stream.sendcCs"|j ¡|j ¡|j ¡dSrz)rPr›rOr»Úwaitrer>r>r?rSxs  zIMAP4_stream.shutdown)NNN) r;r<r=rZrPrr“r™rSr>r>r>r?rGs   rc@s,eZdZdd„Zdd„Zdd„Zdd„Zd S) rºcCs ||_dSrz)r½)rVZmechinstr>r>r?rZ†sz_Authenticator.__init__cCs&| | |¡¡}|durdS| |¡S)Nó*)r½r¼rè)rVrÚretr>r>r?r»‰sz_Authenticator.processcCsnd}t|tƒr| d¡}|rjt|ƒdkrB|dd…}|dd…}n|}d}t |¡}|r||dd…}q|S)NrArfé0rŸ)rærçrèrŽÚbinasciiZ b2a_base64)rVÚinpZoupÚtÚer>r>r?rès      z_Authenticator.encodecCs|sdSt |¡Sr)rWZ a2b_base64)rVrXr>r>r?r¼§sz_Authenticator.decodeN)r;r<r=rZr»rèr¼r>r>r>r?rº€srºz0 Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov DecrãcCsi|]\}}| ¡|d“qS)r’)rè)Ú.0Únr9r>r>r?Ú ­rAr]r’c CsØt |¡}|sdSt| d¡}| d¡}t| d¡ƒ}t| d¡ƒ}t| d¡ƒ}t| d¡ƒ}t| d¡ƒ}t| d¡ƒ} t| d ¡ƒ} | d | d } |d krª| } ||||||d d d f } t | ¡| } t | ¡S) NÚmonÚzonenÚdayÚyearÚhourr‹ÚsecÚzonehÚzonemé<ó-rŸ) Ú InternalDater8ÚMon2numr.r1ÚcalendarZtimegmÚtimeÚ localtime)r3r-r^r_r`rarbr‹rcrdreÚzoneÚttÚutcr>r>r?r¯s$  rcCs@d}d}tt|ƒƒ}|rr>r?r Òs  r cCs$t |¡}|sdSt| d¡ ¡ƒS)Nr>rµ)ÚFlagsr8r)r.r*)r3r-r>r>r?r ßs r cCst|ttfƒr"t |tj¡ ¡}nàt|tƒr¶z |j }WnXt yŽt j r‚|d}|dkrnt   t  |¡¡d}t jt jf| }nt j }Yn0t|d}t|dd…dt|ƒiŽ}nLt|tƒrØ|jdurÒtdƒ‚|}n*t|tƒrú|d|dfdkrú|Std ƒ‚d  t|j¡}| |¡S) NérŸ)ZsecondséÚtzinfozdate_time must be awarer)r;r;zdate_time not of a known typez"%d-{}-%Y %H:%M:%S %z")rær1ÚfloatrZ fromtimestamprroZ astimezoner)Ú tm_gmtoffrwrkÚdaylightrlÚmktimeÚaltzonerrxr€rçÚformatÚMonthsZmonthÚstrftime)r¶ZdtZgmtoffÚdstr‘Úfmtr>r>r?r ês2 ÿ       r Ú__main__zd:s:)r>r>z-dz-s)rDzIMAP password for %s on %s: Ú localhostzJFrom: %(user)s@localhost%(lf)sSubject: IMAP4 test%(lf)s%(lf)sdata...%(lf)sÚ )rÞZlfrà)rÈ)ú /tmp/xxx 1)ró)r†z/tmp/yyy)r©ú /tmp/yyz 2r¸rˆ)rÜ)z/tmpzyy*)rúr‡)rö)NZSUBJECTÚtest)rÎ)Ú1z(FLAGS INTERNALDATE RFC822))r )rŠÚFLAGSz (\Deleted))rîr>)rÍr>)r¦r>)r›r>)rúr>)r©)Z UIDVALIDITY)r)r,ZALL)r©)rø)r}r>cCsLt d||f¡tt|ƒ|Ž\}}t d|||f¡|dkrH|d‚|S)Nz%s %sz %s => %s %srr)ÚMr=ru)Úcmdr~r¤r¥r>r>r?ÚrunKs rŽrzPROTOCOL_VERSION = %szCAPABILITIES = %rrÜ)z/tmp/zyy%z .*"([^"]+)"$rŸrÉrrz%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 )UrmrWrrir^rƒrLrrkrjrrrÚiorrrÚ ImportErrorÚ__all__r²rEr<rFrpr”rŒrtr_r0rurhrarbr°r2r/rdr`rcrr?r¸rrºr*rÚ enumeraterirr r r r;ÚgetoptZgetpassÚargvZoptlistr~r@r%Zstream_commandÚoptr1rWZgetuserZUSERZPASSWDZ test_mesgZ test_seq1Z test_seq2rŽrŒrGr=rrrqrÚmlr8r-r.Úpathr¥rÚprintr>r>r>r?ÚsLH    Õ0     ÿ 6 9, #  )       òù           ÿ  ý