grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026§ ¤…*¤>¤„ãó�—dZdZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl m Z m Z m Z ddlmZ ddlZdZn #e$rdZYnwxYwgd¢Zd ZdZd Zd Zd Zd ZdZidd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“d d“d!d“d"d“d#d“d$d“id%d“d&d“d'd“d(d“d)d“d*d“d+d“d,d“d-d“d.d“d/d“d0d“d1d“d2d“d3d“d4d“d5d“¥ddddddddd6œ¥Zejd7¦«Zejd8¦«Zejd9¦«Zejd:ej ¦«Z!ejd;¦«Z"ejd<¦«Z#ejd=¦«Z$ejd>ej ¦«Z%d:Z&d>Z'ejd?¦«Z(Gd@„dA¦«Z)er#GdB„dCe)¦«Z*e +dC¦«GdD„dEe)¦«Z,GdF„dG¦«Z-dH .dI¦«Z/dJ„e0e/dKd…¦«D¦«Z1dL„Z2dM„Z3dN„Z4dO„Z5e6dPk�r?ddl7Z7ddl8Z8 e7j7ej9dKd…dQ¦«\Z:Z;n#e7j<$rZ=dR\Z:Z;YdZ=[=ndZ=[=wwxYwdZ>e:D]$\Z?Z=e?dSkr e@e=¦«ZŒe?dTkre=Z>e;se>fZ;Œ%e;sdUZ;e;dZAe8jB¦«ZCe8j8dVeC›dWeApdX›dY�¦«ZDdZeCd[d\œzZEd]eCeDffd^d_d`dadbddeEffdcdddedfdgdhdidjdkfZFdldmdndodadddeEffdjdpfZGdq„ZH e>r e,e>¦«ZIn e)eA¦«ZIeIjJdrkr eFdKd…ZFeI KdseIjLz¦«eI KdteIjM›�¦«eFD]\ZNZ;eHeNe;¦«ŒeHdudv¦«D]RZOejPdweO¦«ZQeQreQ RdK¦«ZSneO .¦«dxZSeHdyeSf¦«ŒSeGD]O\ZNZ;eHeNe;¦«ZTeNe;fdnkrŒeTdx .¦«ZUeUsŒ7eHdzd d{eUdxzd|f¦«ŒPeVd}¦«dS#eVd~¦«eseVdej9dz¦«‚xYwdS)€zöIMAP4 client. Based on RFC 2060. Public class: IMAP4 Public variable: Debug Public functions: Internaldate2tuple Int2AP ParseFlags Time2Internaldate z2.58éN)ÚdatetimeÚtimezoneÚ timedelta)ÚDEFAULT_BUFFER_SIZETF)ÚIMAP4Ú IMAP4_streamÚInternaldate2tupleÚInt2APÚ ParseFlagsÚTime2Internaldateó é�iá)Ú IMAP4REV1ri@BiÚAPPEND)ÚAUTHÚSELECTEDÚ AUTHENTICATE)ÚNONAUTHÚ CAPABILITY)rrrÚ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.*))?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.*))?s[ ]cóL—eZdZdZGd„de¦«ZGd„de¦«ZGd„de¦«Zded fd „Z d „Z d „Z d „Z d„Z d„Zd„Zd„Zded fd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd „Zd!„Z d"„Z!d#„Z"d$„Z#d%„Z$d&„Z%d'„Z&d(„Z'd)„Z(d[d,„Z)d-„Z*d.„Z+d/„Z,d0„Z-d[d1„Z.d2„Z/d3„Z0d4„Z1d5„Z2d6„Z3d7„Z4d8„Z5d\d;„Z6d<„Z7d=„Z8d>„Z9d?„Z:d]d@„Z;dA„ZdD„Z?dE„Z@dF„ZAdG„ZBdH„ZCdI„ZDdJ„ZEdK„ZFdL„ZGdM„ZHdN„ZId^dO„ZJdP„ZKdQ„ZLdR„ZMdS„ZNdT„ZOdU„ZP d]dW„ZQdX„ZRdY„ZSdZ„ZTd S)_ra©IMAP4 client class. Instantiate with: IMAP4([host[, port[, timeout=None]]]) host - host's name (default: localhost); port - port number (default: standard IMAP4 port). timeout - socket timeout (default: None) If timeout is not given or is None, the global default socket timeout is used All IMAP4rev1 commands are supported by methods of the same name (in lowercase). All arguments to commands are converted to strings, except for AUTHENTICATE, and the last argument to APPEND which is passed as an IMAP4 literal. If necessary (the string contains any non-printing characters or white-space and isn't enclosed with either parentheses or double quotes) each string is quoted. However, the 'password' argument to the LOGIN command is always quoted. If you want to avoid having an argument string quoted (eg: the 'flags' argument to STORE) then enclose the string in parentheses (eg: "(\Deleted)"). Each command returns a tuple: (type, [data, ...]) where 'type' is usually 'OK' or 'NO', and 'data' is either the text from the tagged response, or untagged results from command. Each 'data' is either a string, or a tuple. If a tuple, then the first part is the header of the response, and the second part contains the data (ie: 'literal' value). Errors raise the exception class .error(""). IMAP4 server errors raise .abort(""), which is a sub-class of 'error'. Mailbox status changes from READ-WRITE to READ-ONLY raise the exception class .readonly(""), which is a sub-class of 'abort'. "error" exceptions imply a program error. "abort" exceptions imply the connection should be reset, and the command re-tried. "readonly" exceptions imply the command should be re-tried. Note: to use this module, you must read the RFCs pertaining to the IMAP4 protocol, as the semantics of the arguments to each IMAP4 command are left to the invoker, not to mention the results. Also, most IMAP servers implement a sub-set of the commands available here. có—eZdZdS)ú IMAP4.errorN©Ú__name__Ú __module__Ú __qualname__©óú./opt/alt/python311/lib64/python3.11/imaplib.pyÚerrorr?½ó€€€€€€€rErGcó—eZdZdS)ú IMAP4.abortNr@rDrErFÚabortrJ¾rHrErKcó—eZdZdS)úIMAP4.readonlyNr@rDrErFÚreadonlyrM¿rHrErNÚNcóx—t|_d|_d|_i|_i|_d|_d|_d|_d|_ |  ¦«|  |||¦« |  ¦«dS#t$r( | ¦«n#t$rYnwxYw‚wxYw)NrrOFr)Ú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__zIMAP4.__init__Ás؀݈Œ ؈Œ ؈Œ Ø!ˆÔØ"$ˆÔØ%'ˆÔ"Ø ˆÔ؈Œ Ø %ˆÔØ ×ÒÑÔÐð � Š �$˜˜gÑ&Ô&Ð&ð Ø �MŠM‰OŒOˆOˆOˆOøÝð ð ð ð Ø— ’ ‘”��øÝð ð ð Ø�ð øøøà ð  øøøs0Á1B B9ÂB'Â&B9Â' B4Â1B9Â3B4Â4B9cóÆ—d|_d|_tjttj¦«|_tjttj¦«|_dS)NFÚascii) Ú utf8_enabledÚ _encodingÚreÚcompileÚ_LiteralÚASCIIÚLiteralÚ_Untagged_statusÚUntagged_status©rbs rFr[zIMAP4._mode_asciiÚsC€Ø!ˆÔØ ˆŒÝ”z¥(­B¬HÑ5Ô5ˆŒ Ý!œzÕ*:½B¼HÑEÔEˆÔÐÐrEcóš—d|_d|_tjt¦«|_tjt ¦«|_dS)NTúutf-8)rirjrkrlrmrorprqrrs rFÚ _mode_utf8zIMAP4._mode_utf8ás;€Ø ˆÔØ ˆŒÝ”z¥(Ñ+Ô+ˆŒ Ý!œzÕ*:Ñ;Ô;ˆÔÐÐrEcóì—ttjdd¦«¦«|_t jd|jzdztj¦«|_ d|_d|_ i|_ |j dkr:|  d tz¦«|  d |jz¦«| ¦«|_d |jvrd |_n+d |jvrd|_n| |j¦«‚| ¦« |j dkr|  d|j›�¦«t*D]}||jvrŒ ||_dS| d¦«‚)Niiÿÿs(?Ps"\d+) (?P[A-Z]+) (?P.*)Té rézimaplib version %sznew IMAP4 connection, tag=%sÚPREAUTHrÚOKrézCAPABILITIES: zserver not IMAP4 compliant)r ÚrandomÚrandintÚtagprerkrlrnÚtagreÚ _cmd_log_lenÚ _cmd_log_idxÚ_cmd_logrRÚ_mesgÚ __version__Ú _get_responseÚwelcomerVrSrGÚ_get_capabilitiesÚ capabilitiesÚAllowedVersionsÚPROTOCOL_VERSION)rbÚversions rFr]zIMAP4._connectès€õ�Vœ^¨D°%Ñ8Ô8Ñ9Ô9ˆŒ Ý”Z  Øœ+ñ!&à@ñ!AåBDÄ(ñLôLˆŒ ð IØ "ˆDÔ Ø !ˆDÔ ØˆDŒMØŒz˜QŠˆØ— ’ Ð/µ+Ñ=Ñ>Ô>Ð>Ø— ’ Ð9¸D¼KÑGÑHÔHÐHà×)Ò)Ñ+Ô+ˆŒ Ø ˜Ô/Ð /Ð /؈DŒJˆJØ �TÔ,Ð ,Ð ,Ø"ˆDŒJˆJà—*’*˜Tœ\Ñ*Ô*Ð *à ×ÒÑ Ô Ð ð FØŒz˜QŠˆØ— ’ � °Ô1BÐ1BÐDÑEÔEÐEå&ð ð ˆGؘdÔ/Ð/Ð/ØØ$+ˆDÔ !Ø ˆFˆFà�jŠjÐ5Ñ6Ô6Ð6rEcó|—|tvr"t|| ¦«¦«Std|z¦«‚)NzUnknown IMAP4 command: '%s')ÚCommandsÚgetattrÚlowerÚAttributeError)rbÚattrs rFÚ __getattr__zIMAP4.__getattr__s9€à •8РРݘ4 §¢¡¤Ñ.Ô.Ð .ÝÐ:¸TÑAÑBÔBÐBrEcó—|S©NrDrrs rFÚ __enter__zIMAP4.__enter__s€Øˆ rEcól—|jdkrdS | ¦«dS#t$rYdSwxYw)Nr)rSÚlogoutr`)rbÚargss rFÚ__exit__zIMAP4.__exit__sL€Ø Œ:˜Ò !Ð !Ø ˆFð Ø �KŠK‰MŒMˆMˆMˆMøÝð ð ð Ø ˆDˆDð øøøs �%¥ 3²3cóò—|�|std¦«‚|jsdn|j}tjd||j|j¦«||jf}|�t j||¦«St j|¦«S)Nz0Non-blocking socket (timeout=0) is not supportedz imaplib.open)Ú ValueErrorrcÚsysÚauditrdÚsocketÚcreate_connection)rbrercÚaddresss rFÚ_create_socketzIMAP4._create_socket(s€€ð Ð  wÐ ÝÐOÑPÔPÐ PØœ9Ð3ˆtˆt¨$¬)ˆÝ Œ �. $¨¬ °4´9Ñ=Ô=Ð=ؘœÐ#ˆØ Ð ÝÔ+¨G°WÑ=Ô=Ð =ÝÔ'¨Ñ0Ô0Ð0rEcó”—||_||_| |¦«|_|j d¦«|_dS)zÑSetup connection to remote server on "host:port" (default: localhost:standard IMAP4 port). This connection will be used by the routines: read, readline, send, shutdown. ÚrbN)rcrdr¡ÚsockÚmakefileÚfileras rFr\z IMAP4.open5sB€ð ˆŒ ؈Œ Ø×'Ò'¨Ñ0Ô0ˆŒ Ø”I×&Ò& tÑ,Ô,ˆŒ ˆ ˆ rEcó2—t|t¦«}|j |¦«}||krat |¦«|krNt|||z ¦«}||j |¦«z }||z }||krt |¦«|k°N|S©zRead 'size' bytes from remote.)ÚminÚ_SAFE_BUF_SIZEr¦ÚreadÚlen)rbÚsizeÚcursizeÚdataÚdeltas rFr«z IMAP4.readAs”€å�d�NÑ+Ô+ˆØŒy�~Š~˜gÑ&Ô&ˆØ˜Šnˆn¥ T¡¤¨gÒ!5Ð!5ݘ ¨¡Ñ0Ô0ˆEØ �D”I—N’N 5Ñ)Ô)Ñ )ˆDØ �uÑ ˆGð˜Šnˆn¥ T¡¤¨gÒ!5Ð!5ðˆ rEcó´—|j tdz¦«}t|¦«tkr| dtz¦«‚|S)úRead line from remote.rxzgot more than %d bytes)r¦ÚreadlineÚ_MAXLINEr¬rG©rbÚlines rFr³zIMAP4.readlineLsI€àŒy×!Ò!¥(¨Q¡,Ñ/Ô/ˆÝ ˆt‰9Œ9•xÒ Ð Ø—*’*Ð5½Ñ@ÑAÔAÐ A؈ rEcóf—tjd||¦«|j |¦«dS)úSend data to remote.z imaplib.sendN)rœr�r¤Úsendall©rbr¯s rFÚsendz IMAP4.sendTs2€å Œ �. $¨Ñ-Ô-Ð-Ø Œ ×Ò˜$ÑÔÐÐÐrEcóv—|j ¦« |j tj¦«nB#t $r5}|jtjkrt|dd¦«dkr‚Yd}~nd}~wwxYw|j ¦«dS#|j ¦«wxYw)ú Close I/O established in "open".Úwinerrorri&'N) r¦Úcloser¤r_ržÚ SHUT_RDWRr`ÚerrnoÚENOTCONNrŽ)rbÚexcs rFr_zIMAP4.shutdownZs¶€à Œ �ŠÑÔÐð Ø ŒI× Ò �vÔ/Ñ 0Ô 0Ð 0Ð 0øÝð ð ð ð” �Uœ^Ò+Ð+ݘ3  ¨AÑ.Ô.°%Ò7Ð7Øøøøøøøøøøð  øøøð ŒI�OŠOÑ Ô Ð Ð Ð øˆDŒI�OŠOÑ Ô Ð Ð øøøs.›$A¿BÁ A?Á +A:Á5BÁ:A?Á?BÂB8có—|jS)zfReturn socket instance used to connect to IMAP4 server. socket = .socket() )r¤rrs rFržz IMAP4.socketjs €ð ŒyÐrEcó°—d}| ddg|¦«\}}|dr||fS| ¦«\}}| |||¦«S)aReturn most recent 'RECENT' responses if any exist, else prompt server for an update using the 'NOOP' command. (typ, [data]) = .recent() 'data' is None if no new messages, else list of RECENT responses, most recent last. ÚRECENTrzNéÿÿÿÿ)Ú_untagged_responseÚnoop©rbÚnameÚtypÚdats rFÚrecentz IMAP4.recentvsd€ðˆØ×*Ò*¨4°$°¸Ñ>Ô>‰ˆˆSØ ˆrŒ7ð Ø˜�8ˆOØ—9’9‘;”;‰ˆˆSØ×&Ò& s¨C°Ñ6Ô6Ð6rEcóV—| |dg| ¦«¦«S)z¥Return data for response 'code' if received, or None. Old value for response 'code' is cleared. (code, [data]) = .response(code) N)rÈÚupper)rbÚcodes rFÚresponsezIMAP4.response‡s&€ð×&Ò& t¨d¨V°T·Z²Z±\´\ÑBÔBÐBrEcó—d}|sd}|r|d|dfdkrd|z}nd}|rt|¦«}nd}t t|¦«}|jrd|zd z}||_| ||||¦«S) z°Append message to named mailbox. (typ, [data]) = .append(mailbox, flags, date_time, message) All args except `message' can be None. rÚINBOXrrÇ©ú(ú)ú(%s)NsUTF8 (ó))r ÚMapCRLFÚsubÚCRLFrirTÚ_simple_command)rbÚmailboxÚflagsÚ date_timeÚmessagerËrTs rFÚappendz IMAP4.append•s¯€ðˆØð ؈GØ ð Ø�a”˜˜rœÐ# yÒ0Ð0Ø ™�øàˆEØ ð Ý)¨)Ñ4Ô4ˆIˆIàˆIÝ—+’+�d GÑ,Ô,ˆØ Ô ð 1Ø 'Ñ)¨DÑ0ˆG؈Œ Ø×#Ò# D¨'°5¸)ÑDÔDÐDrEcó—| ¦«}t|¦«j|_| d|¦«\}}|dkr/| |d dd¦«¦«‚d|_||fS)asAuthenticate command - requires response processing. 'mechanism' specifies which authentication mechanism is to be used - it must appear in .capabilities in the form AUTH=. 'authobject' must be a callable object: data = authobject(response) It will be called to process server continuation responses; the response argument it is passed will be a bytes. It should return bytes data that will be base64 encoded and sent to the server. It should return None if the client abort response '*' should be sent instead. rrzrÇrtÚreplacer)rÐÚ_AuthenticatorÚprocessrTrÝrGÚdecoderS)rbÚ mechanismÚ authobjectÚmechrÌrÍs rFÚ authenticatezIMAP4.authenticate¯s}€ð �ŠÑ Ô ˆõ & jÑ1Ô1Ô9ˆŒ Ø×'Ò'¨¸Ñ=Ô=‰ˆˆSØ �$Š;ˆ;Ø—*’*˜S œWŸ^š^¨G°YÑ?Ô?Ñ@Ô@Ð @؈Œ Ø�CˆxˆrEcód—d}| |¦«\}}| |||¦«S)zT(typ, [data]) = .capability() Fetch capabilities list from server.r©rÝrÈrÊs rFÚ capabilityzIMAP4.capabilityÌs8€ðˆØ×'Ò'¨Ñ-Ô-‰ˆˆSØ×&Ò& s¨C°Ñ6Ô6Ð6rEcó,—| d¦«S)zRCheckpoint mailbox on server. (typ, [data]) = .check() r©rÝrrs rFÚcheckz IMAP4.checkÕs€ð ×#Ò# GÑ,Ô,Ð,rEcód— | d¦«\}}d|_n #d|_wxYw||fS)zÌClose currently selected mailbox. Deleted messages are removed from writable mailbox. This is the recommended command before 'LOGOUT'. (typ, [data]) = .close() rr©rÝrS©rbrÌrÍs rFr¿z IMAP4.closeÝsC€ð Ø×+Ò+¨GÑ4Ô4‰HˆC�àˆDŒJˆJø˜ˆDŒJÐ Ð Ð Ð Ø�Cˆxˆó‚"¢ +có0—| d||¦«S)z‚Copy 'message_set' messages onto end of 'new_mailbox'. (typ, [data]) = .copy(message_set, new_mailbox) rrð)rbÚ message_setÚ new_mailboxs rFÚcopyz IMAP4.copyìs€ð ×#Ò# F¨K¸ÑEÔEÐErEcó.—| d|¦«S)zPCreate new mailbox. (typ, [data]) = .create(mailbox) rrð©rbrÞs rFÚcreatez IMAP4.createôó€ð ×#Ò# H¨gÑ6Ô6Ð6rEcó.—| d|¦«S)zPDelete old mailbox. (typ, [data]) = .delete(mailbox) rrðrûs rFÚdeletez IMAP4.deleteürýrEcó0—| d||¦«S)z€Delete the ACLs (remove any rights) set for who on mailbox. (typ, [data]) = .deleteacl(mailbox, who) rrð)rbrÞÚwhos rFÚ deleteaclzIMAP4.deleteacls€ð ×#Ò# K°¸#Ñ>Ô>Ð>rEcóâ—d|jvrt d¦«‚| d|¦«\}}|dkr*d| ¦«vr| ¦«||fS)zlSend an RFC5161 enable string to the server. (typ, [data]) = .enable(capability) rzServer does not support ENABLErzz UTF8=ACCEPT)rˆrrGrÝrÐru)rbrîrÌr¯s rFÚenablez IMAP4.enable sw€ð ˜4Ô,Ð ,Ð ,Ý—+’+Ð>Ñ?Ô?Ð ?Ø×(Ò(¨°:Ñ>Ô>‰ ˆˆTØ �$Š;ˆ;˜=¨J×,<Ò,<Ñ,>Ô,>Ð>Ð>Ø �OŠOÑ Ô Ð Ø�DˆyÐrEcód—d}| |¦«\}}| |||¦«S)z÷Permanently remove deleted items from selected mailbox. Generates 'EXPUNGE' response for each deleted message. (typ, [data]) = .expunge() 'data' is list of 'EXPUNGE'd message numbers in order received. rrírÊs rFÚexpungez IMAP4.expunges8€ðˆØ×'Ò'¨Ñ-Ô-‰ˆˆSØ×&Ò& s¨C°Ñ6Ô6Ð6rEcóh—d}| |||¦«\}}| |||¦«S)a#Fetch (parts of) messages. (typ, [data, ...]) = .fetch(message_set, message_parts) 'message_parts' should be a string of selected parts enclosed in parentheses, eg: "(UID BODY[TEXT])". 'data' are tuples of message part envelope and data. r rí)rbr÷Ú message_partsrËrÌrÍs rFÚfetchz IMAP4.fetch$s<€ðˆØ×'Ò'¨¨k¸=ÑIÔI‰ˆˆSØ×&Ò& s¨C°Ñ6Ô6Ð6rEcób—| d|¦«\}}| ||d¦«S)zXGet the ACLs for a mailbox. (typ, [data]) = .getacl(mailbox) r!ÚACLrí©rbrÞrÌrÍs rFÚgetaclz IMAP4.getacl3s5€ð ×'Ò'¨°'Ñ:Ô:‰ˆˆSØ×&Ò& s¨C°Ñ7Ô7Ð7rEcóf—| d|||¦«\}}| ||d¦«S)za(typ, [data]) = .getannotation(mailbox, entry, attribute) Retrieve ANNOTATIONs.r"Ú ANNOTATIONrí)rbrÞÚentryÚ attributerÌrÍs rFÚ getannotationzIMAP4.getannotation<s9€ð×'Ò'¨¸À%ÈÑSÔS‰ˆˆSØ×&Ò& s¨C°Ñ>Ô>Ð>rEcób—| d|¦«\}}| ||d¦«S)zªGet the quota root's resource usage and limits. Part of the IMAP4 QUOTA extension defined in rfc2087. (typ, [data]) = .getquota(root) r#ÚQUOTArí)rbÚrootrÌrÍs rFÚgetquotazIMAP4.getquotaDs5€ð×'Ò'¨ °DÑ9Ô9‰ˆˆSØ×&Ò& s¨C°Ñ9Ô9Ð9rEcó¨—| d|¦«\}}| ||d¦«\}}| ||d¦«\}}|||gfS)zœGet the list of quota roots for the named mailbox. (typ, [[QUOTAROOT responses...], [QUOTA responses]]) = .getquotaroot(mailbox) r$rÚ QUOTAROOTrí)rbrÞrÌrÍÚquotaÚ quotaroots rFÚ getquotarootzIMAP4.getquotarootOsc€ð ×'Ò'¨¸Ñ@Ô@‰ˆˆSØ×,Ò,¨S°#°wÑ?Ô?‰ ˆˆUØ×0Ò0°°c¸;ÑGÔG‰ˆˆYØ�Y Ð&Ð&Ð&rEú""Ú*cóh—d}| |||¦«\}}| |||¦«S)z«List mailbox names in directory matching pattern. (typ, [data]) = .list(directory='""', pattern='*') 'data' is list of LIST responses. r&rí©rbÚ directoryÚpatternrËrÌrÍs rFÚlistz IMAP4.listZó<€ðˆØ×'Ò'¨¨i¸ÑAÔA‰ˆˆSØ×&Ò& s¨C°Ñ6Ô6Ð6rEcó´—| d|| |¦«¦«\}}|dkr| |d¦«‚d|_||fS)z”Identify client using plaintext password. (typ, [data]) = .login(user, password) NB: 'password' will be quoted. r'rzrÇr)rÝÚ_quoterGrS)rbÚuserÚpasswordrÌrÍs rFÚloginz IMAP4.loginfsZ€ð×'Ò'¨°°t·{²{À8Ñ7LÔ7LÑMÔM‰ˆˆSØ �$Š;ˆ;Ø—*’*˜S œWÑ%Ô%Ð %؈Œ Ø�CˆxˆrEcóV—||c|_|_| d|j¦«S)zr Force use of CRAM-MD5 authentication. (typ, [data]) = .login_cram_md5(user, password) zCRAM-MD5)r&r'rëÚ_CRAM_MD5_AUTH)rbr&r's rFÚlogin_cram_md5zIMAP4.login_cram_md5ts-€ð $(¨Ð ˆŒ �4”=Ø× Ò  ¨TÔ-@ÑAÔAÐArEcóè—ddl}t|jt¦«r|j d¦«n|j}|jdz| ||d¦« ¦«zS)z1 Authobject to use with CRAM-MD5 authentication. rNrtú Úmd5)ÚhmacÚ isinstancer'ÚstrÚencoder&ÚHMACÚ hexdigest)rbÚ challenger/Úpwds rFr*zIMAP4._CRAM_MD5_AUTH}sl€àˆ ˆ ˆ Ý0:¸4¼=Í#Ñ0NÔ0Nð@ˆtŒ}×#Ò# GÑ,Ô,Ð,Ø26´-ð àŒy˜3‰ §¢¨3° ¸5Ñ!AÔ!A×!KÒ!KÑ!MÔ!MÑMÐMrEcóp—d|_| d¦«\}}| ¦«||fS)z|Shutdown connection to server. (typ, [data]) = .logout() Returns server 'BYE' response. r)rSrÝr_rôs rFr—z IMAP4.logout…s8€ðˆŒ Ø×'Ò'¨Ñ1Ô1‰ˆˆSØ � Š ‰ŒˆØ�CˆxˆrEcóh—d}| |||¦«\}}| |||¦«S)zÐList 'subscribed' mailbox names in directory matching pattern. (typ, [data, ...]) = .lsub(directory='""', pattern='*') 'data' are tuples of message part envelope and data. r(rírs rFÚlsubz IMAP4.lsub’r#rEcób—| d|¦«\}}| ||d¦«S)zƒShow my ACLs for a mailbox (i.e. the rights that I have on mailbox). (typ, [data]) = .myrights(mailbox) r%rír s rFÚmyrightszIMAP4.myrights�s5€ð ×&Ò& z°7Ñ;Ô;‰ˆˆCØ×&Ò& s¨C°Ñ<Ô<Ð.namespace() r*rírÊs rFÚ namespacezIMAP4.namespace¥s8€ð ˆØ×'Ò'¨Ñ-Ô-‰ˆˆSØ×&Ò& s¨C°Ñ6Ô6Ð6rEcóx— |jdkr| |j¦«| d¦«S)zFSend NOOP command. (typ, [data]) = .noop() Tr{r+)rRÚ_dump_urrVrÝrrs rFrÉz IMAP4.noop¯s;€ð  7ØŒz˜QŠˆØ— ’ ˜dÔ5Ñ6Ô6Ð6Ø×#Ò# FÑ+Ô+Ð+rEcól—d}| |||||¦«\}}| ||d¦«S)zÂFetch truncated part of a message. (typ, [data, ...]) = .partial(message_num, message_part, start, length) 'data' is tuple of message part envelope and data. r,r rí)rbÚ message_numÚ message_partÚstartÚlengthrËrÌrÍs rFÚpartialz IMAP4.partialºsA€ðˆØ×'Ò'¨¨k¸<ÈÐPVÑWÔW‰ˆˆSØ×&Ò& s¨C°Ñ9Ô9Ð9rEcó2—d}| d|¦«S)z³Assume authentication as "user". Allows an authorised administrator to proxy into any user's mailbox. (typ, [data]) = .proxyauth(user) r-rð)rbr&rËs rFÚ proxyauthzIMAP4.proxyauthÆs€ðˆØ×#Ò# K°Ñ6Ô6Ð6rEcó0—| d||¦«S)zkRename old mailbox name to new. (typ, [data]) = .rename(oldmailbox, newmailbox) r.rð)rbÚ oldmailboxÚ newmailboxs rFÚrenamez IMAP4.renameÓs€ð ×#Ò# H¨j¸*ÑEÔEÐErEcóÄ—d}|r5|jrt d¦«‚|j|d|g|¢RŽ\}}n|j|g|¢RŽ\}}| |||¦«S)zéSearch mailbox for matching messages. (typ, [data]) = .search(charset, criterion, ...) 'data' is space separated list of matching message numbers. If UTF8 is enabled, charset MUST be None. r/z'Non-None charset not valid in UTF8 modeÚCHARSET)rirrGrÝrÈ)rbÚcharsetÚcriteriarËrÌrÍs rFÚsearchz IMAP4.searchÛsŠ€ðˆØ ð =ØÔ ð MÝ—k’kÐ"KÑLÔLÐLØ+�tÔ+¨D°)¸WÐPÀxÐPÐPÐP‰HˆC��à+�tÔ+¨DÐ<°8Ð<Ð<Ð<‰HˆC�Ø×&Ò& s¨C°Ñ6Ô6Ð6rErÔFcó\—i|_||_|rd}nd}| ||¦«\}}|dkr d|_||fSd|_d|jvr@|s> |jdkr| |j¦«| d |z¦«‚||j d d g¦«fS) atSelect a mailbox. Flush all untagged responses. (typ, [data]) = .select(mailbox='INBOX', readonly=False) 'data' is count of messages in mailbox ('EXISTS' response). Mandated responses are ('FLAGS', 'EXISTS', 'RECENT', 'UIDVALIDITY'), so other responses should be obtained via .response('FLAGS') etc. rr0rzrrú READ-ONLYTrxz%s is not writableÚEXISTSN)rVrXrÝrSrRr?rNÚget)rbrÞrNrËrÌrÍs rFÚselectz IMAP4.selectísÔ€ð#%ˆÔØ#ˆÔØ ð ØˆDˆDàˆDØ×'Ò'¨¨gÑ6Ô6‰ˆˆSØ �$Š;ˆ;؈DŒJؘ�8ˆO؈Œ Ø ˜$Ô1Ð 1Ð 1Ø ð 2ð ;Ø”: ’?�?Ø—M’M $Ô"9Ñ:Ô:Ð:Ø—-’-Ð 4°wÑ >Ñ?Ô?Ð ?Ø�DÔ+×/Ò/°¸4¸&ÑAÔAÐAÐArEcó2—| d|||¦«S)zZSet a mailbox acl. (typ, [data]) = .setacl(mailbox, who, what) r1rð)rbrÞrÚwhats rFÚsetaclz IMAP4.setacl s€ð ×#Ò# H¨g°s¸DÑAÔAÐArEcóR—|jdg|¢RŽ\}}| ||d¦«S)z_(typ, [data]) = .setannotation(mailbox[, entry, attribute]+) Set ANNOTATIONs.r2rrí)rbr˜rÌrÍs rFÚ setannotationzIMAP4.setannotations:€ð(�4Ô'¨Ð?¸$Ð?Ð?Ð?‰ˆˆSØ×&Ò& s¨C°Ñ>Ô>Ð>rEcód—| d||¦«\}}| ||d¦«S)ziSet the quota root's resource limits. (typ, [data]) = .setquota(root, limits) r3rrí)rbrÚlimitsrÌrÍs rFÚsetquotazIMAP4.setquotas7€ð ×'Ò'¨ °D¸&ÑAÔA‰ˆˆSØ×&Ò& s¨C°Ñ9Ô9Ð9rEcóŒ—d}|d|dfdkrd|z}|j|||g|¢RŽ\}}| |||¦«S)z�IMAP4rev1 extension SORT command. (typ, [data]) = .sort(sort_criteria, charset, search_criteria, ...) r4rrÇrÕrØrí)rbÚ sort_criteriarNÚsearch_criteriarËrÌrÍs rFÚsortz IMAP4.sort&si€ð ˆð ˜!Ô ˜]¨2Ô.Ð /°9Ò <Ð <Ø" ]Ñ2ˆMØ'�4Ô'¨¨m¸WÐWÀÐWÐWÐW‰ˆˆSØ×&Ò& s¨C°Ñ6Ô6Ð6rEcó2—d}ts| d¦«‚|jr| d¦«‚||jvr| d¦«‚|€t j¦«}| |¦«\}}|dkra| |j |j ¬¦«|_ |j   d¦«|_ d|_|  ¦«n| d ¦«‚| |||¦«S) Nr5zSSL support missingzTLS session already establishedzTLS not supported by serverrz©Úserver_hostnamer£TzCouldn't establish TLS session)ÚHAVE_SSLrGrZrKrˆÚsslÚ_create_stdlib_contextrÝÚ wrap_socketr¤rcr¥r¦r‡rÈ)rbÚ ssl_contextrËrÌrÍs rFÚstarttlszIMAP4.starttls4s€ØˆÝð 4Ø—*’*Ð2Ñ3Ô3Ð 3Ø Ô ð @Ø—*’*Ð>Ñ?Ô?Ð ?Ø �tÔ(Ð (Ð (Ø—*’*Ð:Ñ;Ô;Ð ;à Ð ÝÔ4Ñ6Ô6ˆKØ×'Ò'¨Ñ-Ô-‰ˆˆSØ �$Š;ˆ;Ø#×/Ò/°´ Ø@DÄ ð0ñKôKˆDŒIàœ ×*Ò*¨4Ñ0Ô0ˆDŒIØ$(ˆDÔ !Ø × "Ò "Ñ $Ô $Ð $Ð $à—*’*Ð=Ñ>Ô>Ð >Ø×&Ò& s¨C°Ñ6Ô6Ð6rEcóh—d}| |||¦«\}}| |||¦«S)zpRequest named status conditions for mailbox. (typ, [data]) = .status(mailbox, names) r6rí)rbrÞÚnamesrËrÌrÍs rFÚstatusz IMAP4.statusKs>€ð ˆð×'Ò'¨¨g°uÑ=Ô=‰ˆˆSØ×&Ò& s¨C°Ñ6Ô6Ð6rEcó˜—|d|dfdkrd|z}| d|||¦«\}}| ||d¦«S)z�Alters flag dispositions for messages in mailbox. (typ, [data]) = .store(message_set, command, flags) rrÇrÕrØr7r rí)rbr÷ÚcommandrßrÌrÍs rFÚstorez IMAP4.storeWsZ€ð �!ŒH�U˜2”YÐ  9Ò ,Ð ,ؘU‘NˆEØ×'Ò'¨°¸gÀuÑMÔM‰ˆˆSØ×&Ò& s¨C°Ñ9Ô9Ð9rEcó.—| d|¦«S)zYSubscribe to new mailbox. (typ, [data]) = .subscribe(mailbox) r8rðrûs rFÚ subscribezIMAP4.subscribebs€ð ×#Ò# K°Ñ9Ô9Ð9rEcóZ—d}|j|||g|¢RŽ\}}| |||¦«S)z‹IMAPrev1 extension THREAD command. (type, [data]) = .thread(threading_algorithm, charset, search_criteria, ...) r9rí)rbÚthreading_algorithmrNr`rËrÌrÍs rFÚthreadz IMAP4.threadjsD€ð ˆØ'�4Ô'¨Ð.AÀ7Ð]È_Ð]Ð]Ð]‰ˆˆSØ×&Ò& s¨C°Ñ6Ô6Ð6rEc ó~—| ¦«}|tvr| d|z¦«‚|jt|vrA| d|›d|j›dd t|¦«›�¦«‚d}|j||g|¢RŽ\}}|dvr|}nd}| |||¦«S) zåExecute "command arg ..." with messages identified by UID, rather than message number. (typ, [data]) = .uid(command, arg1, arg2, ...) Returns response appropriate to 'command'. zUnknown IMAP4 UID command: %súcommand ú illegal in state ú, only allowed in states ú, r:)r/r4r9r )rÐr�rGrSÚjoinrÝrÈ)rbror˜rËrÌrÍs rFÚuidz IMAP4.uidtsà€ð—-’-‘/”/ˆØ�(Ð"Ð"Ø—*’*Ð<¸wÑFÑGÔGÐ GØ Œ:�X gÔ.Ð .Ð .Ø—*’*�*à%˜g˜g t¤z z zØ"Ÿiši­°Ô(9Ñ:Ô:Ð:ð<ñ=ô=ð =ðˆØ'�4Ô'¨¨gÐ=¸Ð=Ð=Ð=‰ˆˆSØ Ð2Ð 2Ð 2؈DˆDàˆDØ×&Ò& s¨C°Ñ6Ô6Ð6rEcó.—| d|¦«S)z_Unsubscribe from old mailbox. (typ, [data]) = .unsubscribe(mailbox) r;rðrûs rFÚ unsubscribezIMAP4.unsubscribe�s€ð ×#Ò# M°7Ñ;Ô;Ð;rEcód— | d¦«\}}d|_n #d|_wxYw||fS)aMFree server's resources associated with the selected mailbox and returns the server to the authenticated state. This command performs the same actions as CLOSE, except that no messages are permanently removed from the currently selected mailbox. (typ, [data]) = .unselect() r<rró)rbrÌr¯s rFÚunselectzIMAP4.unselect•sD€ð Ø×,Ò,¨ZÑ8Ô8‰IˆC�àˆDŒJˆJø˜ˆDŒJÐ Ð Ð Ð Ø�DˆyÐrõcóx—| ¦«}|tvr|jft|<|j|g|¢RŽS)aAllow simple extension commands notified by server in CAPABILITY response. Assumes command is legal in current state. (typ, [data]) = .xatom(name, arg, ...) Returns response appropriate to extension command `name'. )rÐr�rSrÝ©rbrËr˜s rFÚxatomz IMAP4.xatom¥sF€ð�zŠz‰|Œ|ˆð•xÐÐØ"œj˜]�H�T‰NØ#ˆtÔ# DÐ0¨4Ð0Ð0Ð0Ð0rEc ó—|€d}|j} |jdkr@| d|›dt| |d¦«¦«›d|›d�¦«||vr|| |¦«dS|g||<dS) NrETéúuntagged_responses[z] rOz += ["z"])rVrRrƒr¬rTrâ)rbrÌrÍÚurs rFÚ_append_untaggedzIMAP4._append_untagged»sž€Ø ˆ;؈CØ Ô $ˆð 9ØŒz˜QŠˆØ— ’ � ؘ˜�c "§&¢&¨¨R¡.¤.Ñ1Ô1Ð1Ð1°3°3°3ð8ñ9ô9ð9à �"ˆ9ˆ9Ø ˆsŒG�NŠN˜3Ñ Ô Ð Ð Ð à�eˆBˆs‰GˆGˆGrEcó¦—|j d¦«}|r4| |d |jd¦«¦«‚dS)NÚBYErÇrä)rVrTrKrçrj)rbÚbyes rFÚ _check_byezIMAP4._check_byeÉsS€ØÔ%×)Ò)¨%Ñ0Ô0ˆØ ð HØ—*’*˜S œWŸ^š^¨D¬N¸IÑFÔFÑGÔGÐ Gð Hð HrEc óä—|jt|vrHd|_| d|›d|j›dd t|¦«›�¦«‚dD]}||jvr|j|=Œd|jvr|js| d¦«‚| ¦«}t||j ¦«}|dz|z}|D]`}|€Œt|t¦«rt||j ¦«}t |¦«rtd ¦«‚|dz|z}Œa|j}|�Wd|_t!|¦«t!|j¦«ur|}n*d}|td t%|¦«z|j ¦«z} |jd kr| d |z¦«n| d |z¦« | |t.z¦«n*#t0$r} | d| z¦«‚d} ~ wwxYw|€|S | ¦«r#|j|r|S| ¦«°#|r||j¦«} |jd kr%| dt%|¦«z¦« | |¦«| t.¦«n*#t0$r} | d| z¦«‚d} ~ wwxYw|snŒÙ|S)Nrwrxryrz©rzÚNOÚBADrRz#mailbox status changed to READ-ONLYó z&NUL, CR and LF not allowed in commandsz {%s}Téz> %rzsocket error: %srxzwrite literal size %s)rSr�rTrGr{rVrXrNÚ_new_tagÚbytesrjr0r1Ú_control_charsrPr›ÚtypeÚ_commandr¬rRrƒÚ_logr»rÜr`rKr…rUrW) rbrËr˜rÌÚtagr¯ÚargrTÚ literatorÚvals rFr—zIMAP4._commandÏsT€à Œ:�X dœ^Ð +Ð +؈DŒLØ—*’*�*à"˜d˜d D¤J J JØ"Ÿiši­°¬Ñ7Ô7Ð7ð9ñ:ô:ð :ð 'ð 1ð 1ˆCØ�dÔ-Ð-Ð-ØÔ+¨CÐ0øà ˜$Ô1Ð 1Ð 1ØÔ ð 2à—-’-Ð EÑFÔFÐ Fà�mŠm‰oŒoˆÝ�T˜4œ>Ñ*Ô*ˆØ�T‰z˜DÑ ˆØð %ð %ˆC؈{˜Hݘ#�sÑ#Ô#ð 1ݘC ¤Ñ0Ô0�Ý×$Ò$ SÑ)Ô)ð KÝ Ð!IÑJÔJÐJؘ$‘; Ñ$ˆDˆDà”,ˆØ Р؈DŒLÝ�G‰}Œ}¥ T¤]Ñ 3Ô 3Ð3Ð3Ø#� � à � Ø�e G­c°'©l¬lÑ$:¸D¼NÑKÔKÑK�ð )ØŒz˜QŠˆØ— ’ ˜6 D™=Ñ)Ô)Ð)Ð)à— ’ ˜& 4™-Ñ(Ô(Ð(ð 7Ø �IŠI�d�T‘kÑ "Ô "Ð "Ð "øÝð 7ð 7ð 7Ø—*’*Ð/°#Ñ5Ñ6Ô6Ð 6øøøøð 7øøøð ˆ?؈Jð ð×$Ò$Ñ&Ô&ð ØÔ'¨Ô,ðØ�Jð×$Ò$Ñ&Ô&ð ð ð @Ø#˜) DÔ$>Ñ?Ô?�ð GØ”: ’?�?Ø—J’JÐ6½¸W¹¼ÑEÑFÔFÐFð ;Ø— ’ ˜'Ñ"Ô"Ð"Ø— ’ �$‘”��øÝð ;ð ;ð ;Ø—j’jÐ!3°cÑ!9Ñ:Ô:Ð:øøøøð ;øøøðð Øð/ ð2ˆ s0Ç G(Ç( HÇ2H È HÊ/KË K)Ë K$Ë$K)có–—|dk}|s| ¦« | ||¬¦«\}}nU#|j$r }| d|›d|›�¦«‚d}~w|j$r }| d|›d|›�¦«‚d}~wwxYw|s| ¦«|dkr| |›d|›d|›�¦«‚||fS)Nr)Ú expect_byez command: ú => r�z command error: r-)rŒÚ_get_tagged_responserKrG)rbrËr™r—rÌr¯rœs rFÚ_command_completezIMAP4._command_completes€Ø˜(Ò"ˆàð Ø �OŠOÑ Ô Ð ð @Ø×1Ò1°#À&Ð1ÑIÔI‰IˆC��øØŒzð @ð @ð @Ø—*’*�*°D°D°D¸#¸#Ð>Ñ?Ô?Ð ?øøøøØŒzð @ð @ð @Ø—*’*�*°D°D°D¸#¸#Ð>Ñ?Ô?Ð ?øøøøð @øøøàð Ø �OŠOÑ Ô Ð Ø �%Š<ˆ<Ø—*’*¸$¸$¸$ÀÀÀÀTÀTÐJÑKÔKÐ KØ�DˆyÐs!ž9¹ B ÁAÁ B Á+BÂB có—| ¦«\}}|dgkr| d¦«‚t|d|j¦«}| ¦«}t | ¦«¦«|_dS)Nz"no CAPABILITY response from serverrÇ)rîrGr1rjrÐÚtupleÚsplitrˆrôs rFr‡zIMAP4._get_capabilities0ss€Ø—?’?Ñ$Ô$‰ˆˆSØ �4�&Š=ˆ=Ø—*’*ÐAÑBÔBÐ BÝ�#�b”'˜4œ>Ñ*Ô*ˆØ�iŠi‰kŒkˆÝ! #§)¢)¡+¤+Ñ.Ô.ˆÔÐÐrEcóŽ—| ¦«}| |j|¦«r“|j d¦«}||jvr| d|z¦«‚|j d¦«}t||j¦«}|j d¦«}||gf|j|<�nÜd}| t|¦«s5| |j |¦«r|j d¦«}|j€T| t|¦«r!|j d¦«|_ dS| d|z¦«‚|j d¦«}t||j¦«}|j d¦«}|€d}|r|dz|z}| |j |¦«r§t|j d ¦«¦«} |jd kr| d |z¦«| |¦«}| |||f¦«| ¦«}| |j |¦«°§| ||¦«|d vrx| t&|¦«r]|j d¦«}t||j¦«}| ||j d¦«¦« |jdkr|dvr| |›d|›�¦«|S)Nr™zunexpected tagged response: %rr–r¯Údata2zunexpected response: %rrEr‘r­Tr’zread literal size %srŽrx)r�r�rŠz response: )Ú _get_lineÚ_matchrÚmoÚgrouprUrKr1rjÚUntagged_responserqÚ ContinuationrWroÚintrRrƒr«rˆÚ Response_code)rbÚrespr™rÌrÍÚdat2r­r¯s rFr…zIMAP4._get_response9s€ð�~Š~ÑÔˆð �;Š;�t”z 4Ñ (Ô (ð5 ,Ø”'—-’- Ñ&Ô&ˆCؘ$Ô.Ð.Ð.Ø—j’jÐ!AÀDÑ!HÑIÔIÐIà”'—-’- Ñ'Ô'ˆCÝ�c˜4œ>Ñ*Ô*ˆCØ”'—-’- Ñ'Ô'ˆCØ),¨s¨e¨ ˆDÔ  Ñ %Ñ %àˆDð—;’;Õ0°$Ñ7Ô7ð 2Ø—;’;˜tÔ3°TÑ:Ô:ð2Øœ7Ÿ=š=¨Ñ1Ô1�DàŒwˆð—;’;�|¨TÑ2Ô2ð Ø15´·²¸vÑ1FÔ1F�DÔ.ؘ4à—j’jÐ!:¸TÑ!AÑBÔBÐBà”'—-’- Ñ'Ô'ˆCÝ�c˜4œ>Ñ*Ô*ˆCØ”'—-’- Ñ'Ô'ˆC؈{ #˜CØÐ ,˜3 ™:¨Ñ,�Sð—+’+˜dœl¨CÑ0Ô0ð 'õ˜4œ7Ÿ=š=¨Ñ0Ô0Ñ1Ô1�ðBØ”z Q’�ØŸ š Ð#9¸DÑ#@ÑAÔAÐAØ—y’y ‘”�ð×%Ò% c¨C°¨;Ñ7Ô7Ð7ð—n’nÑ&Ô&�ð!—+’+˜dœl¨CÑ0Ô0ð 'ð$ × !Ò ! # sÑ +Ô +Ð +ð Ð%Ð %Ð %¨$¯+ª+µmÀSÑ*IÔ*IÐ %Ø”'—-’- Ñ'Ô'ˆCÝ�c˜4œ>Ñ*Ô*ˆCØ × !Ò ! # t¤w§}¢}°VÑ'<Ô'<Ñ =Ô =Ð =ð ;ØŒz˜QŠˆ 3Ð*>Ð#>Ð#>Ø— ’ °°°°S°SÐ9Ñ:Ô:Ð:àˆ rEcó<— |j|}|� |j|=|S|r#d}|j |d¦«}|�||fS| ¦« | ¦«n3#|j$r&} |jdkr| ¦«‚d}~wwxYwŒœ)NrxrŠ)rUrVÚpoprŒr…rKrRÚ print_log)rbr™ržÚresultrÌr‹rœs rFr zIMAP4._get_tagged_response‰sÓ€ð ØÔ)¨#Ô.ˆFØÐ!ØÔ(¨Ð-Ø� àð &Ø�ØÔ-×1Ò1°#°tÑ<Ô<�Ø�?à ˜:Ð%ð �OŠOÑ Ô Ð ð Ø×"Ò"Ñ$Ô$Ð$Ð$øØ”:ð ð ð ð)Ø”z Q’�ØŸšÑ(Ô(Ð(Øøøøøð  øøøð1 sÁA*Á* BÁ4!BÂBcóD—| ¦«}|s| d¦«‚| d¦«s| d|z¦«‚|dd…} |jdkr| d|z¦«n| d|z¦«|S)Nzsocket error: EOFr z#socket error: unterminated line: %réþÿÿÿTr’z< %r)r³rKÚendswithrRrƒr˜rµs rFr§zIMAP4._get_lineªsª€à�}Š}‰ŒˆØð 2Ø—*’*Ð0Ñ1Ô1Ð 1ð�}Š}˜WÑ%Ô%ð KØ—*’*ÐBÀTÑIÑJÔJÐ Jà�C�R�CŒyˆð )ØŒz˜QŠˆØ— ’ ˜6 D™=Ñ)Ô)Ð)Ð)à— ’ ˜& 4™-Ñ(Ô(Ð(؈ rEcóÜ—| |¦«|_ |j�B|jdkr7| d|j›d|j ¦«›�¦«|jduS)NTr…z matched rŸ)Úmatchr©rRrƒr!Úgroups)rbÚcreÚss rFr¨z IMAP4._match½sh€ð —)’)˜A‘,”,ˆŒð SØŒwÐ" t¤z°Q¢ Ø— ’ � °3´;°;°;ÀÄÇÂÑ@PÔ@PÐ@PÐQÑRÔRÐRØŒw˜dÐ"Ð"rEcó–—|jtt|j¦«|j¦«z}|jdz|_d|j|<|S)Nrx)r~r”r1rYrjrU)rbr™s rFr“zIMAP4._new_tagÉsC€àŒk�E¥# d¤kÑ"2Ô"2°D´NÑCÔCÑCˆØ”k A‘oˆŒ Ø$(ˆÔ˜SÑ!؈ rEcój—| dd¦«}| dd¦«}d|zdzS)Nú\z\\ú"z\")rä)rbršs rFr%z IMAP4._quoteÑs6€à�kŠk˜$ Ñ'Ô'ˆØ�kŠk˜#˜uÑ%Ô%ˆà�S‰y˜3‰ÐrEcóF—| ||j|g|¢Rަ«Sr”)r¡r—r‚s rFrÝzIMAP4._simple_commandÙs,€à×%Ò% d¨M¨D¬M¸$Ð,FÀÐ,FÐ,FÐ,FÑGÔGÐGrEcó¼—|dkr||fS||jvr|dgfS|j |¦«} |jdkr| d|›d|›�¦«||fS)Nr�Tr…r†z] => )rVr²rRrƒ)rbrÌrÍrËr¯s rFrÈzIMAP4._untagged_responseÞs~€Ø �$Š;ˆ;ؘ�8ˆOØ�tÔ.Ð.Ð.ؘ˜�;Ð ØÔ&×*Ò*¨4Ñ0Ô0ˆð JØŒz˜QŠˆØ— ’ � ¸T¸T¸TÀ4À4ÐHÑIÔIÐIØ�DˆyÐrETcó—|€tj¦«}tjdtj|¦«¦«}tj d||dzdz|fz¦«tj ¦«dS)Nz%M:%Sz %s.%02d %s éd)ÚtimeÚstrftimeÚ localtimerœÚstderrÚwriteÚflush)rbr¼ÚsecsÚtms rFrƒz IMAP4._mesgìsr€Øˆ|Ý”y‘{”{�Ý”˜w­¬°tÑ(<Ô(<Ñ=Ô=ˆBÝ ŒJ× Ò Ð-°°d¸3±hÀ±^ÀQÐ0GÑGÑ HÔ HÐ HÝ ŒJ× Ò Ñ Ô Ð Ð Ð rEcó —|sdSd„| ¦«D¦«}| dd |¦«z¦«dS)Nc3ó*K—|]\}}|›d|›�V—ŒdS)ú: NrD)Ú.0ÚkeyÚvalues rFú z!IMAP4._dump_ur..ösPèè€ðBðBÙ"˜˜UðÐ(Ð(˜uÐ(Ð(ðBðBðBðBðBðBrEzuntagged responses dump:z )Úitemsrƒr{)rbÚuntagged_resp_dictrÔs rFr?zIMAP4._dump_urósh€Ø%ð Ø�ðBðBØ&8×&>Ò&>Ñ&@Ô&@ðBñBôBˆEà �JŠJÐ1°H·M²MÀ%Ñ4HÔ4HÑHÑ IÔ IÐ IÐ IÐ IrEcóœ—|tj¦«f|j|j<|xjdz c_|j|jkr d|_dSdS)Nrxr)rÅr‚r�r€rµs rFr˜z IMAP4._logúsW€à04µd´i±k´kÐ/BˆDŒM˜$Ô+Ñ ,Ø Ð Ô  Ñ "Ð Ô ØÔ  DÔ$5Ò5Ð5Ø$%�Ô!Ð!Ð!ð6Ð5rEcóì—| dt|j¦«z¦«|j|j}}|r9 |j|j|Žn#YnxYw|dz }||jkrd}|dz}|°7dSdS)Nzlast %d IMAP4 interactions:rxr)rƒr¬r‚r�r€)rbÚiÚns rFr³zIMAP4.print_logsª€Ø �JŠJÐ4µs¸4¼=Ñ7IÔ7IÑIÑ JÔ JÐ JØÔ$ dÔ&7ˆqˆAØð ðØ�D”J ¤ ¨aÔ 0Ð1Ð1Ð1øðØ�DøøøØ�Q‘�ؘÔ)Ò)Ð)Ø�AØ�Q‘�ðð ð ð ð ð s ¼AÁA)rr)rÔFr”)F)UrArBrCÚ__doc__r^rGrKrNÚ IMAP4_PORTrfr[rur]r’r•r™r¡r\r«r³r»r_ržrÎrÒrârërîrñr¿rùrürÿrrrr r rrrr"r(r+r*r—r9r;r=rÉrErGrKrPrUrXrZr]rarjrmrprrrur|r~r€rƒrˆrŒr—r¡r‡r…r r§r¨r“r%rÝrÈrƒr?r˜r³rDrErFrrŒsS€€€€€ð-ð-ð^!Ð Ð Ð Ð � Ñ Ô Ð ØÐÐÐÐ�ÑÔÐØÐÐÐÐ�5ÑÔÐà Z¸ððððð2FðFðFð<ð<ð<ð'7ð'7ð'7ðTCð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ð7ð2<ð<ð<ð ð ð ð 1ð1ð1ð, ð ð ðHðHðHð LðLðLð^ððð$/ð/ð/ðMðMðMð`ððððBððð& #ð #ð #ðððððððHðHðHð ð ð ð"ð ð ð ð ð Jð Jð Jð &ð &ð &ð ð ð ð ð rErcó:—eZdZdZdeddddfd„Zd„Zdedfd„ZdS)Ú IMAP4_SSLaäIMAP4 client class over SSL connection Instantiate with: IMAP4_SSL([host[, port[, keyfile[, certfile[, ssl_context[, timeout=None]]]]]]) host - host's name (default: localhost); port - port number (default: standard IMAP4 SSL port); keyfile - PEM formatted file that contains your private key (default: None); certfile - PEM formatted certificate chain file (default: None); ssl_context - a SSLContext object that contains your certificate chain and private key (default: None) Note: if ssl_context is provided, then parameters keyfile or certfile should not be set otherwise ValueError is raised. timeout - socket timeout (default: None) If timeout is not given or is None, the global default socket timeout is used for more documentation see the docstring of the parent class IMAP4. rONcó.—|�|�td¦«‚|�|�td¦«‚|€|� ddl}| dtd¦«||_||_|€t j||¬¦«}||_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ÚDeprecationWarningráràrfrgrirrf)rbrcrdráràrirerâs rFrfzIMAP4_SSL.__init__&s×€àÐ&¨7Ð+>Ý ð"-ñ.ô.ð.àÐ&¨8Ð+?Ý ð"-ñ.ô.ð.àÐ" hÐ&:Ø���Ø— ’ ð;Ýr °s*€Ð <Ð <Ð <™d˜a ˆ1�8Š8‰:Œ:�a˜‘cÐ <Ð <Ð ˜#Ñ Ô ÐrEcó”—d}d}tt|¦«¦«}|r%t|d¦«\}}|||dz…|z}|°%|S)z-Convert integer to A-P string representation.rEsABCDEFGHIJKLMNOPérx)r­ÚabsÚdivmod)ÚnumrœÚAPÚmods rFr r Õs_€ð €CÐ'ˆrÝ �c�#‰hŒh‰-Œ-€CØ ð"ݘ#˜r‘?”?‰ˆˆSØ��S˜‘U�Œm˜cÑ!ˆð ð"ð €JrEcó¦—t |¦«}|sdSt| d¦« ¦«¦«S)z-Convert IMAP4 flags response to python tuple.rDrß)ÚFlagsr¹r£rªr¤)r¯r©s rFr r âsH€õ �Š�TÑ Ô €BØ ð؈rå �—’˜'Ñ"Ô"×(Ò(Ñ*Ô*Ñ +Ô +Ð+rEcóŠ—t|ttf¦«r3tj|t j¦« ¦«}�n;t|t¦«r¾ |j }nƒ#t$rvtj rZ|d}|dkr,tj tj|¦«¦«d}tjtjf| }n tj }YnwxYwt!|¬¦«}t|dd…dt |¦«iŽ}nht|t¦«r|j€t%d¦«‚|}n:t|t&¦«r|d|dfd kr|St%d ¦«‚d  t*|j¦«}| |¦«S) aèConvert date_time to IMAP4 INTERNALDATE representation. Return string in form: '"DD-Mmm-YYYY HH:MM:SS +HHMM"'. The date_time argument can be a number (int or float) representing seconds since epoch (as returned by time.time()), a 9-tuple representing local time, an instance of time.struct_time (as returned by time.localtime()), an aware datetime instance or a double-quoted string. In the last case, it is assumed to already be in the correct format. érÇ)ÚsecondsNéÚtzinfozdate_time must be awarer)rÀrÀzdate_time not of a known typez"%d-{}-%Y %H:%M:%S %z")r0r­ÚfloatrÚ fromtimestamprrÚ astimezoner£Ú tm_gmtoffr�rÅÚdaylightrÇÚmktimeÚaltzonerr+r›r1ÚformatÚMonthsÚmonthrÆ)ràÚdtÚgmtoffÚdstr°Úfmts rFr r ís©€õ�)�c¥5˜\Ñ*Ô*ð:Ý Ô # IÝ$,¤Lñ2ô2ß2<²*±,´,ð ‰å �I�uÑ %Ô %ð:ð (ØÔ(ˆFˆFøÝð (ð (ð (ÝŒ}ð (Ø ”l�ؘ"’9�9Ýœ.­¬°YÑ)?Ô)?Ñ@Ô@ÀÔC�CÝœ=­$¬,Ð7¸Ô<Ð<��åœ-˜�øøð (øøøõ &Ð)Ñ)Ô)ˆÝ �y  ! ”}Ð =­X°e©_¬_Ð =Ð =ˆˆÝ �I�xÑ (Ô (ð:Ø Ô Ð #ÝÐ6Ñ7Ô7Ð 7Ø ˆˆÝ �I�sÑ #Ô #ð:¨°1¬°iÀ´mÐ(DÈ Ò(QÐ(QØÐåÐ8Ñ9Ô9Ð9Ø "× )Ò )­&°´Ô*:Ñ ;Ô ;€CØ �;Š;�sÑ Ô ÐsÁ&A.Á.A=C.Ã-C.Ú__main__zd:s:)rDrDz-dz-s)rOzIMAP 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)rK)r>z/tmp/yyy)r©ú /tmp/yyz 2râr@)r")z/tmpzyy*)rUr?)rP)NÚSUBJECTÚtest)r )Ú1z(FLAGS INTERNALDATE RFC822))rp)rCÚFLAGSz (\Deleted))r=rD)rrD)rÎrD)r¿rD)rUrD)rÒ)Ú UIDVALIDITY)r|)r/ÚALL)rÒ)rS)r—rDcóÚ—t |›d|›�¦«tt|¦«|Ž\}}t |›d|›d|›�¦«|dkr|d‚|S)Nr-rŸr�r)ÚMrƒrŽ)Úcmdr˜rÌrÍs rFÚrunrJNsp€Ý �Š˜3˜3˜3  Ð%Ñ&Ô&Ð&Ø"•7�1˜c‘?”? DÐ)‰ˆˆSÝ �Š    c c c¨3¨3Ð/Ñ0Ô0Ð0Ø �$Š;ˆ;˜c !œf˜ ؈ rErzPROTOCOL_VERSION = %szCAPABILITIES = r")z/tmp/zyy%z .*"([^"]+)"$rÇrÿr|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 )WrÚr„rrÁr|rkržrðrœrÅrrrrÚiorrfreÚ ImportErrorÚ__all__rÜrQrÛrçr‰r´rªr�rlr¬r&rrnrorÚr®r«rqrmrpr•rrÝrârrår¤r4Ú enumeraterr r r r rAÚgetoptÚgetpassÚargvÚoptlistr˜rGrœÚstream_commandÚoptr­rcÚgetuserÚUSERÚPASSWDÚ test_mesgÚ test_seq1Ú test_seq2rJrHrSrƒrŠrˆrIÚmlr¹r©rªÚpathrÍr|ÚprintrDrErFúr^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Ø"Ð"Ð"Ð"Ð"Ð"ðØ€J€J€JØ€H€HøØðððØ€H€H€Hðøøøð 8ð 8ð 8€ð €Ø €Ø € Ø€Ø(€ð €ð€ð, àÐ,ð, ð ˜ ð, ð ÐAð , ð ˜ ð , ð ˜ ð , ð ˜ ð, ð Ð,ð, ð Ð,ð, ð Ð,ð, ð ˜ ð, ð Ð,ð, ð ˜ ð, ð ˜ ð, ð Ð,ð, ð Ð,ð!, ð" Ð,ð#, ð$ Ð,ð%, ð, ð& Ð,ð', ð( Ð,ð), ð* ˜ ð+, ð, ÐAð-, ð. Ð,ð/, ð0 ˜ ð1, ð2 Ð,ð3, ð4 ÐAð5, ð6 ˜ ð7, ð8 ˜ ð9, ð: Ð,ð;, ð< ˜ ð=, ð> Ð,ð?, ð@ Ð,ðA, ðB Ð,ðC, ðD Ð,ðE, ðF ˜ ðG, ð, ðH%Ø,Ø%Ø,Ø%Ø%Ø,Ø%ðW, ð, ð, €ð`ˆrŒzÐ0Ñ1Ô1€ ؈Œ Ð4Ñ5Ô5€ØˆrŒzðñô€ ð ˆ"Œ*Ð+¨R¬XÑ 6Ô 6€Ø ˆ"Œ*�^Ñ $Ô $€ð�” ÐDÑEÔE€ Ø�B”JÐGÑHÔHÐà�"”*Ø;¸R¼XñGôG€ð "€ØJÐð�”˜MÑ*Ô*€ð@ð@ð@ð@ð@ñ@ô@ð@ðF$ ð8 ð42ð42ð42ð42ð42�Eñ42ô42ð42ðl ‡N‚N�;ÑÔÐð5ð5ð5ð5ð5�5ñ5ô5ð5ðr*(ð*(ð*(ð*(ð*(ñ*(ô*(ð*(ðX <× AÒ AÀ#Ñ FÔ F€Ø <Ð < i i°°q°r°r´ Ñ&;Ô&;Ð <Ñ <Ô <€ððððF ð ð ð,ð,ð,ð%ð%ð%ðR ˆzÒÑð ÐÐÐÐÐÐÐðØ%˜œ  c¤h¨q¨r¨r¤l°FÑ;Ô;‰ ˆ��øØ Œ<ðððØ‰ ˆ������øøøøðøøøð€NØð2ð2‰ˆˆCØ �$Š;ˆ;Ø�C˜‘H”HˆEˆEØ �DŠ[ˆ[Ø ˆNØÐ 1 Ð 1˜øà И�à �Œ7€Dà ˆ7Œ?Ñ Ô €DØ ˆWŒ_ˆ_¸t¸t¸tÀTÐEXÈ[ÐEXÐEXÐYÑ ZÔ Z€Fà\ÐgkÐrvÐ_wÐ_wÑw€Ià ˆt�VˆnÐØØ*ØØ � ˜d D¨)Ð4Ð5ØØØ)Ø3Ø,ØØØØð€Ið$Ø!ØØØ ��d˜D )Ð,Ð-ØØð€Iðððð)Ø ð Ø� ˜^Ñ,Ô,ˆAˆAà��d‘ ” ˆAØ Œ7�fÒ Ð Ø! ! " "œ ˆIØ �ŠÐ'¨!Ô*<Ñ<Ñ=Ô=Ð=Ø �Šˆ q¤~ ~Ð7Ñ8Ô8Ð8à!ð ð ‰HˆC�Ø ˆC��T‰NŒNˆNˆNà�#�fÐ.Ñ/Ô/ð #ð #ˆBØ�”˜/¨2Ñ.Ô.ˆBØð (˜"Ÿ(š( 1™+œ+�4�4ØŸš™œ Bœ�$Ø ˆC�˜4˜'Ñ "Ô "Ð "Ð "à!ð Sð S‰HˆC�Ø�#�c˜4‘.”.ˆCà�DˆzÐ7Ò7Ð7Øà�b”'—-’-‘/”/ˆCØÐ ˜Ø ˆC�˜ ¨¨B¬¡ØPðRñ Sô Sð Sð Sð ˆÐÑ Ô Ð Ð Ð øð Ø ˆÐÑ Ô Ð àð Ø ˆEðð „hˆq„kññ ô ð ð øøøðQÐs6ºAÁA Á A È!H2È2 I È<IÉI Ë D8PÐ)Q