ó
    F\h9  ã                   óÊ  • S r SSKrSSKrSSKrSSKr SSKrSrSS/r " S S\	5      r
SrS	rS
rSr\\-   rSr " S S5      r\(       a   " S S\5      r\R'                  S5        \S:X  aê  \" \R*                  S   5      r\" \R1                  5       5        \R3                  \R*                  S   5        \R5                  \R*                  S   5        \R7                  5         \R9                  5       u  rr\" S\S-   5       H?  r \RC                  \ 5      u  r"r#r$\" S\ -  5        \# H  r%\" S\%-   5        M     \" S5        MA     \RM                  5         gg! \ a    Sr GNGf = f)z@A POP3 client class.

Based on the J. Myers POP3 draft, Jan. 96
é    NTFÚPOP3Úerror_protoc                   ó   • \ rS rSrSrg)r   é   © N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__static_attributes__r   ó    Ú/usr/lib/python3.13/poplib.pyr   r      s   † šdr   én   iã  ó   ó   
i   c                   ó  • \ rS rSrSrSr\\R                  4S jr	S r
S rS rS rS	 rS
 rS rS rS rS rS rS rS rS#S jrS rS rS rS rS rS rS r\R@                  " S5      r!S r"S r#S#S jr$S r%S  r&S#S! jr'S"r(g)$r   é3   aÈ  This class supports both the minimal and optional command sets.
Arguments can be strings or integers (where appropriate)
(e.g.: retr(1) and retr('1') both work equally well.

Minimal Command Set:
        USER name               user(name)
        PASS string             pass_(string)
        STAT                    stat()
        LIST [msg]              list(msg = None)
        RETR msg                retr(msg)
        DELE msg                dele(msg)
        NOOP                    noop()
        RSET                    rset()
        QUIT                    quit()

Optional Commands (some servers support these):
        RPOP name               rpop(name)
        APOP name digest        apop(name, digest)
        TOP msg n               top(msg, n)
        UIDL [msg]              uidl(msg = None)
        CAPA                    capa()
        STLS                    stls()
        UTF8                    utf8()

Raises one exception: 'error_proto'.

Instantiate with:
        POP3(hostname, port=110)

NB:     the POP protocol locks the mailbox from user
        authorization until QUIT, so be sure to get in, suck
        the messages, and quit, each time you access the
        mailbox.

        POP is a line-based protocol, which means large mail
        messages consume lots of python cycles reading them
        line-by-line.

        If it's available on your mail server, use IMAP4
        instead, it doesn't suffer from the two problems
        above.
zUTF-8c                 óþ   • Xl         X l        SU l        [        R                  " SXU5        U R                  U5      U l        U R                  R                  S5      U l        SU l	        U R                  5       U l        g )NFzpoplib.connectÚrbr   )ÚhostÚportÚ_tls_establishedÚsysÚauditÚ_create_socketÚsockÚmakefileÚfileÚ
_debuggingÚ_getrespÚwelcome)Úselfr   r   Útimeouts       r   Ú__init__ÚPOP3.__init__b   sa   € àŒ	ØŒ	Ø %ˆÔÜ�	Š	Ð" D°Ô5Ø×'Ñ'¨Ó0ˆŒ	Ø—I‘I×&Ñ& tÓ,ˆŒ	ØˆŒØ—}‘}“ˆ�r   c                 ó†   • Ub  U(       d  [        S5      e[        R                  " U R                  U R                  4U5      $ )Nz0Non-blocking socket (timeout=0) is not supported)Ú
ValueErrorÚsocketÚcreate_connectionr   r   )r"   r#   s     r   r   ÚPOP3._create_socketm   s6   € ØÑ¦wÜÐOÓPÐPÜ×'Ò'¨¯©°D·I±IÐ(>ÀÓHÐHr   c                 óÀ   • U R                   S:”  a  [        S[        U5      5        [        R                  " SX5        U R
                  R                  U[        -   5        g )Né   z*put*zpoplib.putline)r   ÚprintÚreprr   r   r   ÚsendallÚCRLF©r"   Úlines     r   Ú_putlineÚPOP3._putliner   s@   € Ø�?‰?˜QÓ¤ g¬t°D«zÔ :Ü�	Š	Ð" DÔ/Ø�	‰	×Ñ˜$¤™+Õ&r   c                 óœ   • U R                   (       a  [        S[        U5      5        [        XR                  5      nU R                  U5        g )Nz*cmd*)r   r-   r.   ÚbytesÚencodingr3   r1   s     r   Ú_putcmdÚPOP3._putcmdz   s0   € Ø�?�?œE '¬4°«:Ô6Ü�TŸ=™=Ó)ˆØ�‰�dÕr   c                 ód  • U R                   R                  [        S-   5      n[        U5      [        :”  a  [	        S5      eU R
                  S:”  a  [        S[        U5      5        U(       d  [	        S5      e[        U5      nUSS  [        :X  a  US S U4$ US S [        :X  a  USS U4$ US S U4$ )Nr,   zline too longz*get*z-ERR EOFéþÿÿÿéÿÿÿÿ)
r   ÚreadlineÚ_MAXLINEÚlenr   r   r-   r.   r0   ÚCR)r"   r2   Úoctetss      r   Ú_getlineÚPOP3._getline„   s°   € Ø�y‰y×!Ñ!¤(¨Q¡,Ó/ˆÜˆt‹9”xÓÜ˜oÓ.Ð.à�?‰?˜QÓ¤ g¬t°D«zÔ :Þœ; zÓ2Ð2Ü�T“ˆð ��ˆ9œÓØ˜˜�9˜fÐ$Ð$Ø��ˆ8”r‹>Ø˜˜"�:˜vÐ%Ð%Ø�C�Rˆy˜&Ð Ð r   c                 ó¶   • U R                  5       u  pU R                  S:”  a  [        S[        U5      5        UR	                  S5      (       d  [        U5      eU$ )Nr,   z*resp*ó   +)rB   r   r-   r.   Ú
startswithr   )r"   ÚrespÚos      r   r    ÚPOP3._getresp™   sG   € Ø—-‘-“/‰ˆØ�?‰?˜QÓ¤ h´°T³
Ô ;Ø�‰˜t×$Ñ$Ü˜dÓ#Ð#Øˆr   c                 ó   • U R                  5       n/ nSnU R                  5       u  pEUS:w  aO  UR                  S5      (       a
  US-
  nUSS  nX5-   nUR                  U5        U R                  5       u  pEUS:w  a  MO  XU4$ )Nr   ó   .s   ..r,   )r    rB   rF   Úappend)r"   rG   ÚlistrA   r2   rH   s         r   Ú_getlongrespÚPOP3._getlongresp£   sƒ   € Ø�}‰}‹ˆØˆ˜A�6Ø—-‘-“/‰ˆØ�d‹lØ�‰˜u×%Ñ%Ø�a‘C�Ø˜A˜B�x�Ø‘ZˆFØ�K‰K˜ÔØ—m‘m“o‰GˆDð �d�lð ˜6Ð!Ð!r   c                 óD   • U R                  U5        U R                  5       $ ©N)r8   r    r1   s     r   Ú	_shortcmdÚPOP3._shortcmd³   s   € Ø�‰�TÔØ�}‰}‹Ðr   c                 óD   • U R                  U5        U R                  5       $ rQ   )r8   rN   r1   s     r   Ú_longcmdÚPOP3._longcmdº   s   € Ø�‰�TÔØ× Ñ Ó"Ð"r   c                 ó   • U R                   $ rQ   )r!   ©r"   s    r   Ú
getwelcomeÚPOP3.getwelcomeÁ   s   € Ø�|‰|Ðr   c                 ó   • Xl         g rQ   )r   )r"   Úlevels     r   Úset_debuglevelÚPOP3.set_debuglevelÅ   s   € Ø�r   c                 ó*   • U R                  SU-  5      $ )zFSend user name, return response

(should indicate password required).
zUSER %s©rR   ©r"   Úusers     r   rb   Ú	POP3.userË   s   € ð
 �~‰~˜i¨$Ñ.Ó/Ð/r   c                 ó*   • U R                  SU-  5      $ )zˆSend password, return response

(response includes message count, mailbox size).

NB: mailbox is locked by server from here to 'quit()'
zPASS %sr`   )r"   Úpswds     r   Úpass_Ú
POP3.pass_Ó   s   € ð �~‰~˜i¨$Ñ.Ó/Ð/r   c                 ó6  • U R                  S5      nUR                  5       nU R                  (       a  [        S[	        U5      5        [        U5      S:  a  [        S5      e [        US   5      n[        US   5      nX44$ ! [         a    [        S5      ef = f)zMGet mailbox status.

Result is tuple of 2 ints (message count, mailbox size)
ÚSTATz*stat*é   zInvalid STAT response formatr,   é   z.Invalid STAT response data: non-numeric values)	rR   Úsplitr   r-   r.   r?   r   Úintr'   )r"   ÚretvalÚretsÚnumMessagesÚsizeMessagess        r   ÚstatÚ	POP3.statÝ   s”   € ð
 —‘ Ó'ˆØ�|‰|‹~ˆØ�?�?œE (¬D°«JÔ7ô
 ˆt‹9�q‹=ÜÐ<Ó=Ð=ð	PÜ˜d 1™g›,ˆKÜ˜t A™w›<ˆLð Ð*Ð*øô ó 	PÜÐNÓOÐOð	Pús   Á#B ÂBNc                 óR   • Ub  U R                  SU-  5      $ U R                  S5      $ )zðRequest listing, return result.

Result without a message number argument is in form
['response', ['mesg_num octets', ...], octets].

Result when a message number argument is given is a
single response: the "scan listing" for that message.
zLIST %sÚLIST©rR   rU   ©r"   Úwhichs     r   rM   Ú	POP3.listõ   s-   € ð ÑØ—>‘> )¨eÑ"3Ó4Ð4Ø�}‰}˜VÓ$Ð$r   c                 ó*   • U R                  SU-  5      $ )z_Retrieve whole message number 'which'.

Result is in form ['response', ['line', ...], octets].
zRETR %s©rU   rw   s     r   ÚretrÚ	POP3.retr  s   € ð
 �}‰}˜Y¨Ñ.Ó/Ð/r   c                 ó*   • U R                  SU-  5      $ )z6Delete message number 'which'.

Result is 'response'.
zDELE %sr`   rw   s     r   ÚdeleÚ	POP3.dele  s   € ð
 �~‰~˜i¨%Ñ/Ó0Ð0r   c                 ó$   • U R                  S5      $ )zHDoes nothing.

One supposes the response indicates the server is alive.
ÚNOOPr`   rX   s    r   ÚnoopÚ	POP3.noop  s   € ð
 �~‰~˜fÓ%Ð%r   c                 ó$   • U R                  S5      $ )z(Unmark all messages marked for deletion.ÚRSETr`   rX   s    r   ÚrsetÚ	POP3.rset  s   € à�~‰~˜fÓ%Ð%r   c                 óH   • U R                  S5      nU R                  5         U$ )zDSignoff: commit changes on server, unlock mailbox, close connection.ÚQUIT)rR   Úclose)r"   rG   s     r   ÚquitÚ	POP3.quit   s   € à�~‰~˜fÓ%ˆØ�
‰
ŒØˆr   c                 óê  •  U R                   nSU l         Ub  UR                  5         U R                  nSU l        Ub1   UR                  [        R
                  5        UR                  5         gg! [         a:  nUR                  [        R                  :w  a  [        USS5      S:w  a  e  SnANQSnAff = f! UR                  5         f = f! U R                  nSU l        UbŽ   UR                  [        R
                  5        OG! [         a:  nUR                  [        R                  :w  a  [        USS5      S:w  a  e  SnAOSnAff = fUR                  5         f ! UR                  5         f = ff = f)z8Close the connection without assuming anything about it.NÚwinerrorr   i&'  )
r   r‹   r   Úshutdownr(   Ú	SHUT_RDWRÚOSErrorÚerrnoÚENOTCONNÚgetattr)r"   r   r   Úexcs       r   r‹   Ú
POP3.close&  s)  € ð	!Ø—9‘9ˆDØˆDŒIØÑØ—
‘
”à—9‘9ˆDØˆDŒIØÑð
!Ø—M‘M¤&×"2Ñ"2Ô3ð —J‘J•Lð  øô ó ð Ÿ	™	¤U§^¡^Ó3Ü" 3¨
°AÓ6¸%Ó?Øÿøðûð —J‘J•Lûð —9‘9ˆDØˆDŒIØÑð
!Ø—M‘M¤&×"2Ñ"2Õ3øÜó ð Ÿ	™	¤U§^¡^Ó3Ü" 3¨
°AÓ6¸%Ó?Øÿøðúð —J‘J•Lø�D—J‘J•Lúð  úsp   ‚&C ¿A0 Á0
B4Á:0B/Â*B7 Â/B4Â4B7 Â7C	ÃE2Ã$DÄEÄ
EÄ0EÄ>EÅEÅEÅE2ÅE.Å.E2c                 ó*   • U R                  SU-  5      $ )z?Send RPOP command to access the mailbox with an alternate user.zRPOP %sr`   ra   s     r   ÚrpopÚ	POP3.rpopB  s   € à�~‰~˜i¨$Ñ.Ó/Ð/r   s   \+OK.[^<]*(<.*>)c                 ó:  • [        X R                  5      nU R                  R                  U R                  5      nU(       d  [        S5      eSSKnUR                  S5      U-   nUR                  U5      R                  5       nU R                  SU< SU< 35      $ )zÛAuthorisation

- only possible if server has supplied a timestamp in initial greeting.

Args:
        user     - mailbox user;
        password - mailbox password.

NB: mailbox is locked by server from here to 'quit()'
z!-ERR APOP not supported by serverr   Nr,   zAPOP Ú )r6   r7   Ú	timestampÚmatchr!   r   ÚhashlibÚgroupÚmd5Ú	hexdigestrR   )r"   rb   ÚpasswordÚsecretÚmrŸ   Údigests          r   ÚapopÚ	POP3.apopI  sy   € ô �x§¡Ó/ˆØ�N‰N× Ñ  §¡Ó.ˆÞÜÐAÓBÐBÛØ—‘˜“˜FÑ"ˆØ—‘˜VÓ$×.Ñ.Ó0ˆØ�~Š~«d²FÐ;Ó<Ð<r   c                 ó4   • U R                  SU< SU< 35      $ )z•Retrieve message header of message number 'which'
and first 'howmuch' lines of message body.

Result is in form ['response', ['line', ...], octets].
zTOP rœ   r{   )r"   rx   Úhowmuchs      r   ÚtopÚPOP3.top^  s   € ð �}Š}«E²7Ð;Ó<Ð<r   c                 óR   • Ub  U R                  SU-  5      $ U R                  S5      $ )zÌReturn message digest (unique id) list.

If 'which', result contains unique id for that message
in the form 'response mesgnum uid', otherwise result is
the list ['response', ['mesgnum uid', ...], octets]
zUIDL %sÚUIDLrv   rw   s     r   ÚuidlÚ	POP3.uidlg  s-   € ð ÑØ—>‘> )¨eÑ"3Ó4Ð4Ø�}‰}˜VÓ$Ð$r   c                 ó$   • U R                  S5      $ )zITry to enter UTF-8 mode (see RFC 6856). Returns server response.
        ÚUTF8r`   rX   s    r   Úutf8Ú	POP3.utf8s  s   € ð �~‰~˜fÓ%Ð%r   c                 óž   • S n0 n U R                  S5      nUS   nU H  nU" U5      u  pgXrU'   M     U$ ! [         a    [        S5      ef = f)a°  Return server capabilities (RFC 2449) as a dictionary
>>> c=poplib.POP3('localhost')
>>> c.capa()
{'IMPLEMENTATION': ['Cyrus', 'POP3', 'server', 'v2.2.12'],
 'TOP': [], 'LOGIN-DELAY': ['0'], 'AUTH-RESP-CODE': [],
 'EXPIRE': ['NEVER'], 'USER': [], 'STLS': [], 'PIPELINING': [],
 'UIDL': [], 'RESP-CODES': []}
>>>

Really, according to RFC 2449, the cyrus folks should avoid
having the implementation split into multiple arguments...
c                 óT   • U R                  S5      R                  5       nUS   USS  4$ )NÚasciir   r,   )Údecoderl   )r2   Úlsts     r   Ú	_parsecapÚPOP3.capa.<locals>._parsecap†  s-   € Ø—+‘+˜gÓ&×,Ñ,Ó.ˆCØ�q‘6˜3˜q˜r˜7�?Ð"r   ÚCAPAr,   z!-ERR CAPA not supported by server)rU   r   )r"   rº   ÚcapsrG   ÚrawcapsÚcaplineÚcapnmÚcapargss           r   ÚcapaÚ	POP3.capay  sn   € ò	#ð ˆð	CØ—=‘= Ó(ˆDØ˜1‘gˆGÛ"�Ù!*¨7Ó!3‘�Ø%�U“ñ #ð
 ˆøô ó 	CÜÐAÓBÐBð	Cús	   ‡-6 ¶Ac                 óž  • [         (       d  [        S5      eU R                  (       a  [        S5      eU R                  5       nSU;  a  [        S5      eUc  [        R
                  " 5       nU R                  S5      nUR                  U R                  U R                  S9U l        U R                  R                  S5      U l        SU l        U$ )zcStart a TLS session on the active connection as specified in RFC 2595.

context - a ssl.SSLContext
z-ERR TLS support missingú$-ERR TLS session already establishedÚSTLSz!-ERR STLS not supported by server©Úserver_hostnamer   T)ÚHAVE_SSLr   r   rÂ   ÚsslÚ_create_stdlib_contextrR   Úwrap_socketr   r   r   r   )r"   Úcontextr½   rG   s       r   ÚstlsÚ	POP3.stls–  s±   € ÷
 ŠxÜÐ8Ó9Ð9Ø× × ÜÐDÓEÐEØ�y‰y‹{ˆØ˜‹~ÜÐAÓBÐBØ‰?Ü×0Ò0Ó2ˆGØ�~‰~˜fÓ%ˆØ×'Ñ'¨¯	©	Ø8<¿	¹	ð (ð CˆŒ	à—I‘I×&Ñ& tÓ,ˆŒ	Ø $ˆÔØˆr   )r   r   r   r   r   r   r!   rQ   ))r   r	   r
   r   Ú__doc__r7   Ú	POP3_PORTr(   Ú_GLOBAL_DEFAULT_TIMEOUTr$   r   r3   r8   rB   r    rN   rR   rU   rY   r]   rb   rf   rr   rM   r|   r   rƒ   r‡   rŒ   r‹   r™   ÚreÚcompiler�   r§   r«   r¯   r³   rÂ   rÎ   r   r   r   r   r   r   3   s¹   † ñ)ðV €Hà"+Ø×7Ñ7ô	'òIò
'òò!ò*ò"ò ò#òò ò0ò0ò+ô0%ò0ò1ò&ò&ò
ò!ò80ð
 —
’
Ð/Ó0€Iò=ò*=ô	%ò&ò÷:r   c                   óR   • \ rS rSrSr\4\R                  SS.S jjrS r	S	S jr
Srg)
ÚPOP3_SSLi®  a  POP3 client class over SSL connection

Instantiate with: POP3_SSL(hostname, port=995, context=None)

       hostname - the hostname of the pop3 over ssl server
       port - port number
       context - a ssl.SSLContext

See the methods of the parent class POP3 for more documentation.
N)r#   rÍ   c                ól   • Uc  [         R                  " 5       nX@l        [        R	                  XX#5        g rQ   )rÊ   rË   rÍ   r   r$   )r"   r   r   r#   rÍ   s        r   r$   ÚPOP3_SSL.__init__º  s(   € à‰Ü×4Ò4Ó6�Ø"ŒLÜ�M‰M˜$ dÕ4r   c                 óx   • [         R                  X5      nU R                  R                  UU R                  S9nU$ )NrÇ   )r   r   rÍ   rÌ   r   )r"   r#   r   s      r   r   ÚPOP3_SSL._create_socketÁ  s:   € Ü×&Ñ& tÓ5ˆDØ—<‘<×+Ñ+¨DØ<@¿I¹Ið ,ð GˆDàˆKr   c                 ó   • [        S5      e)zˆThe method unconditionally raises an exception since the
STLS command doesn't make any sense on an already established
SSL/TLS session.
rÅ   )r   )r"   rÍ   s     r   rÎ   ÚPOP3_SSL.stlsÇ  s   € ô
 ÐDÓEÐEr   )rÍ   rQ   )r   r	   r
   r   rÐ   ÚPOP3_SSL_PORTr(   rÒ   r$   r   rÎ   r   r   r   r   rÖ   rÖ   ®  s,   † ñ		ð '4ð 	5Ø &× >Ñ >Èö	5ò	÷	Fr   rÖ   Ú__main__r,   rk   rj   zMessage %d:z   z-----------------------)'rÐ   r“   rÓ   r(   r   rÊ   rÉ   ÚImportErrorÚ__all__Ú	Exceptionr   rÑ   rÝ   r@   ÚLFr0   r>   r   rÖ   rL   r   ÚargvÚar-   rY   rb   rf   rM   rr   ÚnumMsgsÚ	totalSizeÚrangeÚir|   ÚheaderÚmsgrA   r2   rŒ   r   r   r   Ú<module>rë      sy  ðñó Û 	Û Û 
ðÛØ€Hð �-Ð
 €ô #�)Ô "ð €	ð €ð €Ø
€Ø	ˆ"�u€ð €÷vñ vör ôF�4ô Fð@ ‡N�N�:ÔàˆzÓÙˆS�X‰X�a‰[Ó€AÙ	ˆ!�,‰,‹.ÔØ‡F�Fˆ3�8‰8�A‰;ÔØ‡G�GˆC�H‰H�Q‰KÔØ‡F�F„HØŸ6™6›8Ñ€WˆiÙ�1�g ‘kÖ"ˆØ !§¡ q£	Ñˆ��fÙˆm˜aÑÔ ÛˆDÙ�%˜$‘,Öñ áÐ'Ö(ñ #ð ‡F�F…Hð øðq ó ØƒHðús   ”E ÅE"Å!E"