3 \/2@sdZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl m Z m Z m Z ddl mZyddlZdZWnek rdZYnXddd d d d gZd ZdZdZdZdfZdZdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~dddddddddddddddddd)ZejdZejdZejdZejdejZejdZ ejdZ!ejdZ"ejdejZ#dZ$dZ%GdddZ&erGd d!d!e&Z'ej(d!Gd"dde&Z)Gd#d$d$Z*d%j+d&Z,d'd(e-e,d)dDZ.d*d Z/d+d Z0d,d Z1d-d Z2e3d.krddl4Z4ddl5Z5ye4j4ej6d)dd/\Z7Z8Wn0e4j9k rnZ:zffZ7Z8WYddZ:[:XnXdZ;x@e7D]8\Ze5j?Z@e5j5d3e@e>pd4fZAd5e@d6d7ZBd8e@eAffdddd?d>ddeBffddddddMffdNffdOffdPfffZCdCffdddd?dddeBffdOffdWfffZDdXdYZEy&e;re)e;ZFne&e>ZFeFjGdkreCd)dZCeFjHdZeFjIeFjHd[eFjJfxeCD]\ZKZ8eEeKe8qWxJeEd@dD].*))?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@seZdZGdddeZGdddeZGdddeZdefdd Zd d Z d d Z ddZ ddZ ddZ ddZddZdefddZddZddZddZd d!Zd"d#Zd$d%Zd&d'Zd(d)Zd*d+Zd,d-Zd.d/Zd0d1Zd2d3Zd4d5Zd6d7Zd8d9Z d:d;Z!dd?Z#d@dAZ$dBdCZ%dDdEZ&dFdGZ'ddJdKZ(dLdMZ)dNdOZ*dPdQZ+dRdSZ,ddTdUZ-dVdWZ.dXdYZ/dZd[Z0d\d]Z1d^d_Z2d`daZ3dbdcZ4ddfdgZ5dhdiZ6djdkZ7dldmZ8dndoZ9ddqdrZ:dsdtZ;dudvZd{d|Z?d}d~Z@ddZAddZBddZCddZDddZEddZFddZGddZHddZIddZJddZKddZLddZMddZNdpS)rc@s eZdZdS)z IMAP4.errorN)__name__ __module__ __qualname__r<r</usr/lib64/python3.6/imaplib.pyerrorsr>c@s eZdZdS)z IMAP4.abortN)r9r:r;r<r<r<r=abortsr?c@s eZdZdS)zIMAP4.readonlyN)r9r:r;r<r<r<r=readonlysr@cCst|_d|_d|_i|_i|_d|_d|_d|_d|_ |j |j ||y |j Wn8t k ry |jWntk rYnXYnXdS)NrrAFr)Debugdebugstateliteraltagged_commandsuntagged_responsescontinuation_response is_readonlytagnum_tls_established _mode_asciiopen_connect ExceptionshutdownOSError)selfhostportr<r<r=__init__s&   zIMAP4.__init__cCs0d|_d|_tjttj|_tjttj|_dS)NFascii) utf8_enabled _encodingrecompile_LiteralASCIILiteral_Untagged_statusUntagged_status)rRr<r<r=rLszIMAP4._mode_asciicCs(d|_d|_tjt|_tjt|_dS)NTzutf-8)rWrXrYrZr[r]r^r_)rRr<r<r= _mode_utf8s zIMAP4._mode_utf8cCsttjdd|_tjd|jdtj|_|j|_ d|j krHd|_ nd|j krZd|_ n |j |j |j x tD]}||jkrqt||_dSW|j d dS) Niis(?Ps"\d+) (?P[A-Z]+) (?P.*)ZPREAUTHrOKrzserver not IMAP4 compliant)r randomZrandinttagprerYrZr\tagre _get_responseZwelcomerGrDr>_get_capabilitiesAllowedVersions capabilitiesPROTOCOL_VERSION)rRversionr<r<r=rNs       zIMAP4._connectcCs&|tkrt||jStd|dS)NzUnknown IMAP4 command: '%s')CommandsgetattrlowerAttributeError)rRattrr<r<r= __getattr__ szIMAP4.__getattr__cCs|S)Nr<)rRr<r<r= __enter__szIMAP4.__enter__c Gs&y |jWntk r YnXdS)N)logoutrQ)rRargsr<r<r=__exit__s zIMAP4.__exit__cCs |js dn|j}tj||jfS)N)rSsocketZcreate_connectionrT)rRrSr<r<r=_create_socketszIMAP4._create_socketcCs(||_||_|j|_|jjd|_dS)Nrb)rSrTrvsockmakefilefile)rRrSrTr<r<r=rM#s z IMAP4.opencCs |jj|S)N)rzread)rRsizer<r<r=r{/sz IMAP4.readcCs.|jjtd}t|tkr*|jdt|S)Nzgot more than %d bytes)rzreadline_MAXLINElenr>)rRliner<r<r=r~4s zIMAP4.readlinecCs|jj|dS)N)rxZsendall)rRdatar<r<r=send<sz IMAP4.sendcCst|jjzXy|jjtjWn@tk r^}z$|jtjkrNt |dddkrNWYdd}~XnXWd|jjXdS)NZwinerrorri&') rzcloserxrPruZ SHUT_RDWRrQerrnoZENOTCONNrl)rRexcr<r<r=rPAs  zIMAP4.shutdowncCs|jS)N)rx)rRr<r<r=ruQsz IMAP4.socketcCsBd}|jddg|\}}|dr(||fS|j\}}|j|||S)NZRECENTrar})_untagged_responsenoop)rRnametypdatr<r<r=recent]s  z IMAP4.recentcCs|j|dg|jS)N)rupper)rRcoder<r<r=responsenszIMAP4.responsecCsxd}|s d}|r.|d|d fd kr2d|}nd}|r@t|}nd}tjt|}|jrbd|d }||_|j||||S) NrINBOXrr}()z(%s)sUTF8 ()r)rr)r MapCRLFsubCRLFrWrE_simple_command)rRmailboxflags date_timemessagerrEr<r<r=append|s    z IMAP4.appendcCsP|j}t|j|_|jd|\}}|dkrB|j|djddd|_||fS)Nrrar}zutf-8replacerr)r_AuthenticatorprocessrErr>decoderD)rRZ mechanismZ authobjectmechrrr<r<r= authenticates zIMAP4.authenticatecCs d}|j|\}}|j|||S)Nr)rr)rRrrrr<r<r= capabilityszIMAP4.capabilitycCs |jdS)Nr)r)rRr<r<r=checksz IMAP4.checkc Cs$z|jd\}}Wdd|_X||fS)Nrr)rrD)rRrrr<r<r=rsz IMAP4.closecCs|jd||S)Nr)r)rR message_setZ new_mailboxr<r<r=copysz IMAP4.copycCs |jd|S)Nr)r)rRrr<r<r=createsz IMAP4.createcCs |jd|S)Nr)r)rRrr<r<r=deletesz IMAP4.deletecCs|jd||S)Nr)r)rRrwhor<r<r= deleteaclszIMAP4.deleteaclcCsHd|jkrtjd|jd|\}}|dkr@d|jkr@|j||fS)NrzServer does not support ENABLEraz UTF8=ACCEPT)rhrr>rrr`)rRrrrr<r<r=enables   z IMAP4.enablecCs d}|j|\}}|j|||S)Nr)rr)rRrrrr<r<r=expunges z IMAP4.expungecCs$d}|j|||\}}|j|||S)Nr)rr)rRrZ message_partsrrrr<r<r=fetch s z IMAP4.fetchcCs|jd|\}}|j||dS)NrZACL)rr)rRrrrr<r<r=getaclsz IMAP4.getaclcCs"|jd|||\}}|j||dS)Nr ANNOTATION)rr)rRrentryZ attributerrr<r<r= getannotation#szIMAP4.getannotationcCs|jd|\}}|j||dS)Nr!QUOTA)rr)rRrootrrr<r<r=getquota+szIMAP4.getquotacCs@|jd|\}}|j||d\}}|j||d\}}|||gfS)Nr"rZ QUOTAROOT)rr)rRrrrZquotaZ quotarootr<r<r= getquotaroot6szIMAP4.getquotaroot""*cCs$d}|j|||\}}|j|||S)Nr$)rr)rR directorypatternrrrr<r<r=listAsz IMAP4.listcCs<|jd||j|\}}|dkr.|j|dd|_||fS)Nr%rar}rr)r_quoter>rD)rRuserpasswordrrr<r<r=loginMs z IMAP4.logincCs|||_|_|jd|jS)NzCRAM-MD5)rrr_CRAM_MD5_AUTH)rRrrr<r<r=login_cram_md5[szIMAP4.login_cram_md5cCsBddl}t|jtr |jjdn|j}|jd|j||djS)Nrzutf-8 Zmd5)hmac isinstancerstrencoderZHMACZ hexdigest)rRZ challengerpwdr<r<r=rdszIMAP4._CRAM_MD5_AUTHc Csjd|_y|jd\}}Wn(ddtjddg}}YnX|jd|jkrbd|jdfS||fS)NrNOz%s: %sBYE)rDrsysexc_inforPrG)rRrrr<r<r=rrls" z IMAP4.logoutcCs$d}|j|||\}}|j|||S)Nr&)rr)rRrrrrrr<r<r=lsub|sz IMAP4.lsubcCs|jd|\}}|j||dS)Nr#)rr)rRrrrr<r<r=myrightsszIMAP4.myrightscCs d}|j|\}}|j|||S)Nr')rr)rRrrrr<r<r= namespaceszIMAP4.namespacecCs |jdS)Nr()r)rRr<r<r=rsz IMAP4.noopcCs(d}|j|||||\}}|j||dS)Nr)r)rr)rRZ message_numZ message_partstartZlengthrrrr<r<r=partialsz IMAP4.partialcCsd}|jd|S)Nr*)r)rRrrr<r<r= proxyauths zIMAP4.proxyauthcCs|jd||S)Nr+)r)rRZ oldmailboxZ newmailboxr<r<r=renamesz IMAP4.renamecGsTd}|r2|jrtjd|j|d|f|\}}n|j|f|\}}|j|||S)Nr,z'Non-None charset not valid in UTF8 modeCHARSET)rWrr>rr)rRcharsetZcriteriarrrr<r<r=searchs z IMAP4.searchrFcCsxi|_||_|rd}nd}|j||\}}|dkr@d|_||fSd|_d|jkrd| rd|jd|||jjddgfS) Nrr-rarrz READ-ONLYz%s is not writableEXISTS)rGrIrrDr@get)rRrr@rrrr<r<r=selects  z IMAP4.selectcCs|jd|||S)Nr.)r)rRrrZwhatr<r<r=setaclsz IMAP4.setaclcGs |jd|\}}|j||dS)Nr/r)r/)rr)rRrsrrr<r<r= setannotationszIMAP4.setannotationcCs |jd||\}}|j||dS)Nr0r)rr)rRrZlimitsrrr<r<r=setquotaszIMAP4.setquotacGsFd}|d|dfdkr d|}|j|||f|\}}|j|||S) Nr1rr}rrz(%s)r)rr)rr)rRZ sort_criteriarsearch_criteriarrrr<r<r=sorts z IMAP4.sortNcCsd}ts|jd|jr"|jd||jkr6|jd|dkrFtj}|j|\}}|dkr|j|j |j d|_ |j j d|_ d|_|j n |jd |j|||S) Nr2zSSL support missingzTLS session already establishedzTLS not supported by serverra)server_hostnamerwTzCouldn't establish TLS session)HAVE_SSLr>rKr?rhssl_create_stdlib_contextr wrap_socketrxrSryrzrfr)rR ssl_contextrrrr<r<r=starttlss$       zIMAP4.starttlscCs$d}|j|||\}}|j|||S)Nr3)rr)rRrnamesrrrr<r<r=status5sz IMAP4.statuscCs>|d|dfd krd|}|jd|||\}}|j||dS) Nrr}rrz(%s)r4rr)rr)rr)rRrcommandrrrr<r<r=storeAsz IMAP4.storecCs |jd|S)Nr5)r)rRrr<r<r= subscribeLszIMAP4.subscribecGs*d}|j|||f|\}}|j|||S)Nr6)rr)rRZthreading_algorithmrrrrrr<r<r=threadTsz IMAP4.threadcGs|j}|tkr|jd||jt|krL|jd||jdjt|fd}|j||f|\}}|d krt|}nd}|j|||S) NzUnknown IMAP4 UID command: %sz9command %s illegal in state %s, only allowed in states %sz, r7r,r1r6r)r,r1r6)rrkr>rDjoinrr)rRrrsrrrr<r<r=uid^sz IMAP4.uidcCs |jd|S)Nr8)r)rRrr<r<r= unsubscribewszIMAP4.unsubscribecGs,|j}|tkr|jft|<|j|f|S)N)rrkrDr)rRrrsr<r<r=xatoms  z IMAP4.xatomcCs8|dkr d}|j}||kr*||j|n |g||<dS)N)rGr)rRrrZurr<r<r=_append_untaggeds zIMAP4._append_untaggedcCs,|jjd}|r(|j|dj|jddS)Nrr}rr)rGrr?rrX)rRZbyer<r<r= _check_byes zIMAP4._check_byec Gs|jt|kr4d|_|jd||jdjt|fxd D]}||jkr:|j|=q:Wd|jkrp|j rp|jd|j}t ||j }|d|}x8|D]0}|dkrqt |t rt ||j }|d|}qW|j}|dk rd|_t |t |jkr|}nd}|t d t||j }y|j|tWn2tk rX} z|jd | WYdd} ~ XnX|dkrh|Sxx |jr|j|rl|SqlW|r||j}y|j||jtWn2tk r} z|jd | WYdd} ~ XnX|sjPqjW|S) Nz9command %s illegal in state %s, only allowed in states %sz, rarBADz READ-ONLYz#mailbox status changed to READ-ONLY z {%s}zsocket error: %s)rarr)rDrkrEr>rrGrIr@_new_tagbytesrXrrtype_commandrrrrQr?rerFrH) rRrrsrtagrargrEZ literatorvalr<r<r=rs^                   zIMAP4._commandcCs|dkr|jy|j|\}}Wnj|jk rX}z|jd||fWYdd}~Xn6|jk r}z|jd||fWYdd}~XnX|dkr|j|dkr|jd|||f||fS)Nrzcommand: %s => %srz%s command error: %s %s)r_get_tagged_responser?r>)rRrrrrrr<r<r=_command_completes"$zIMAP4._command_completecCsJ|j\}}|dgkr |jdt|d|j}|j}t|j|_dS)Nz"no CAPABILITY response from serverr}r)rr>rrXrtuplesplitrh)rRrrr<r<r=rfs    zIMAP4._get_capabilitiescCs|j}|j|j|rp|jjd}||jkr:|jd||jjd}t||j}|jjd}||gf|j|<nd}|jt |s|j|j |r|jjd}|jdkr|jt |r|jjd|_ dS|jd||jjd}t||j}|jjd}|dkrd}|r|d|}xH|j|j |r\t|jjd }|j|}|j|||f|j}qW|j|||d kr|jt|r|jjd}t||j}|j||jjd|S)Nrzunexpected tagged response: %rrrZdata2zunexpected response: %rrrr|rarr)rarr) _get_line_matchrdmogrouprFr?rrXUntagged_responser_ ContinuationrHr]intr{r Response_code)rRresprrrZdat2r|rr<r<r=resH                  zIMAP4._get_responsecCsdx^|j|}|dk r |j|=|S|jy |jWq|jk rZ}zWYdd}~XqXqWdS)N)rFrrer?)rRrresultrr<r<r=r`s  zIMAP4._get_tagged_responsecCs>|j}|s|jd|jds.|jd||dd}|S)Nzsocket error: EOFs z#socket error: unterminated line: %rr)r~r?endswith)rRrr<r<r=r{s   zIMAP4._get_linecCs|j||_|jdk S)N)matchr)rRZcresr<r<r=rs z IMAP4._matchcCs2|jtt|j|j}|jd|_d|j|<|S)Nr})rcrrrJrXrF)rRrr<r<r=rs  zIMAP4._new_tagcCs$|jdd}|jdd}d|dS)N\z\\"z\")r)rRrr<r<r=rs  z IMAP4._quotecGs|j||j|f|S)N)rr)rRrrsr<r<r=rszIMAP4._simple_commandcCs8|dkr||fS||jkr$|dgfS|jj|}||fS)Nr)rGpop)rRrrrrr<r<r=rs    zIMAP4._untagged_response)rr)rr)rF)N)Or9r:r;rOr>r?r@ IMAP4_PORTrUrLr`rNrprqrtrvrMr{r~rrPrurrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrfrerrrrrrrr<r<r<r=rs.*                    M P  c@s6eZdZdedddfddZddZdefddZdS) IMAP4_SSLrANcCs|dk r|dk rtd|dk r0|dk r0td|dk s@|dk rVddl}|jdtd||_||_|dkrxtj||d}||_t j |||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 insteadr)certfilekeyfile) ValueErrorwarningswarnDeprecationWarningrrrrrrrU)rRrSrTrrrrr<r<r=rUszIMAP4_SSL.__init__cCstj|}|jj||jdS)N)r)rrvrrrS)rRrxr<r<r=rv s zIMAP4_SSL._create_socketcCstj|||dS)N)rrM)rRrSrTr<r<r=rMszIMAP4_SSL.open)r9r:r;IMAP4_SSL_PORTrUrvrMr<r<r<r=rsrc@s>eZdZddZdddZddZdd Zd d Zd d ZdS)rcCs||_tj|dS)N)rrrU)rRrr<r<r=rU&szIMAP4_stream.__init__NcCsNd|_d|_d|_d|_tj|jttjtjddd|_ |j j |_ |j j |_ dS)NT)bufsizestdinstdoutshellZ close_fds)rSrTrxrz subprocessPopenrrPIPErr writefilerreadfile)rRrSrTr<r<r=rM+s  zIMAP4_stream.opencCs |jj|S)N)r"r{)rRr|r<r<r=r{;szIMAP4_stream.readcCs |jjS)N)r"r~)rRr<r<r=r~@szIMAP4_stream.readlinecCs|jj||jjdS)N)r!writeflush)rRrr<r<r=rEs zIMAP4_stream.sendcCs"|jj|jj|jjdS)N)r"rr!rwait)rRr<r<r=rPKs  zIMAP4_stream.shutdown)NN) r9r:r;rUrMr{r~rrPr<r<r<r=rs   c@s,eZdZddZddZddZddZd S) rcCs ||_dS)N)r)rRZmechinstr<r<r=rUYsz_Authenticator.__init__cCs&|j|j|}|dkrdS|j|S)N*)rrr)rRrZretr<r<r=r\sz_Authenticator.processcCsrd}t|tr|jd}xT|rlt|dkrD|dd}|dd}n|}d}tj|}|r||dd}qW|S)Nrzutf-80r}r)rrrrbinasciiZ b2a_base64)rRinpZoupter<r<r=rbs      z_Authenticator.encodecCs|sdStj|S)Nr)r(Z a2b_base64)rRr)r<r<r=rzsz_Authenticator.decodeN)r9r:r;rUrrrr<r<r<r=rSsrz0 Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov DecrcCsi|]\}}|d|jqS)r})r).0nr r<r<r= sr.r}c Cstj|}|sdSt|jd}|jd}t|jd}t|jd}t|jd}t|jd}t|jd}t|jd} t|jd } | d | d } |d kr| } ||||||d ddf } tj| | } tj| S)Nmonzonendayyearhourminseczonehzonem<-r}rrr) InternalDater Mon2numrrcalendarZtimegmtime localtime)rrr/r0r1r2r3r4r5r6r7ZzoneZttutcr<r<r=rs$  cCsDd}d}tt|}x*|r>t|d\}}|||d|}qW|S)NrsABCDEFGHIJKLMNOPr})rabsdivmod)ZnumrZAPmodr<r<r=r s cCs$tj|}|sfSt|jdjS)Nr)Flagsr rrr)rrr<r<r=r s c Cs t|ttfr"tj|tjj}nt|try |j }WnZt k rt j r|d}|d krpt j t j|d}t jt jf| }nt j }YnXt|d}t|dddt|i}nNt|tr|jdkrtd|}n,t|to|d|d fd kr|Std d jt|j}|j|S)Nr})Zsecondstzinfozdate_time must be awarerrzdate_time not of a known typez"%d-{}-%Y %H:%M:%S %z"rr)rr)rrfloatrZ fromtimestamprr?Z astimezonerZ tm_gmtoffrnr=Zdaylightr>ZmktimeZaltzonerrGrrformatMonthsZmonthZstrftime)rZdtZgmtoffdstZdeltaZfmtr<r<r=r s0       __main__zd:s:z-dz-srAzIMAP password for %s on %s: Z localhostzJFrom: %(user)s@localhost%(lf)sSubject: IMAP4 test%(lf)s%(lf)sdata...%(lf)s )rZlfrr /tmp/xxx 1r/tmp/yyyr /tmp/yyz 2rr/tmpyy*rrSUBJECTtestr1(FLAGS INTERNALDATE RFC822)rFLAGS (\Deleted)rrrrr UIDVALIDITYrr,ALLrrrcCsLtjd||ftt||\}}tjd|||f|dkrH|d|S)Nz%s %sz %s => %s %srr)M_mesgrl)cmdrsrrr<r<r=runs r^zPROTOCOL_VERSION = %szCAPABILITIES = %r/tmp/yy%z .*"([^"]+)"$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 )r r)rr)r)rrrr)r)r)r)rr)rr)rr)r)rr)r)r)rr)rr)rr)rr)rr)rr)r)rrrr)rr)r)rr)rrrr)r)r)rr)r)rr)rr)rr)rr)r)r)rr)r)rr)r)r)rr)rArN)rrarNrO)rrbrP)rrcrQrR)rrdrP)rreNrSrT)rrfrUrV)rrgrUrWrX)rrhrY)rrir,rZ)rrjr)rrk)r_r`rr,rZ)rrlrr)T __version__r(rrbrYrurrr=r<rrriorrr ImportError__all__rrBrrrgrrkrZrrDr:r\r]rrrr_r[r^rrrrrrrJ enumerater;rr r r r9ZgetoptZgetpassargvZoptlistrsr>rZstream_commandoptrrSZgetuserZUSERZPASSWDZ test_mesgZ test_seq1Z test_seq2r^r[rDr\rirhr]Zmlr rrpathrrprintr<r<r<r=sDH          c4 9, #  )