o 0¦i^; ã @ sh d Z ddlZddlZddlZddlZzddlZdZW n ey% dZY nw ddgZG dd„ de ƒZ dZd Zd Z dZe e ZdZG d d„ dƒZerVG dd„ deƒZe d¡ edkr²ddlZeejd ƒZee ¡ ƒ e ejd ¡ e ejd ¡ e ¡ e ¡ \ZZeded ƒD ]Z e !e ¡\Z"Z#Z$ede ƒ e#D ]Z%ede% ƒ qžedƒ qŒe &¡ dS dS )z@A POP3 client class. Based on the J. Myers POP3 draft, Jan. 96 é NTFÚPOP3Úerror_protoc @ s e Zd ZdS )r N)Ú__name__Ú __module__Ú__qualname__© r r ú-/opt/alt/python310/lib64/python3.10/poplib.pyr s én iã ó ó i c @ s e Zd ZdZdZeejfdd„Zdd„ Z dd„ Z d d „ Zdd„ Zd d„ Z dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd=d d!„Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Zd*d+„ Zd,d-„ Zd.d/„ Ze d0¡Z d1d2„ Z!d3d4„ Z"d=d5d6„Z#d7d8„ Z$d9d:„ Z%d=d;d<„Z&dS )>r aP 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. zUTF-8c C sP || _ || _d| _t d| ||¡ | |¡| _| j d¡| _d| _ | ¡ | _d S )NFzpoplib.connectÚrbr )ÚhostÚportÚ_tls_establishedÚsysÚauditÚ_create_socketÚsockÚmakefileÚfileÚ _debuggingÚ_getrespÚwelcome)Úselfr r Útimeoutr r r Ú__init__b s z POP3.__init__c C s( |d ur |s t dƒ‚t | j| jf|¡S )Nz0Non-blocking socket (timeout=0) is not supported)Ú ValueErrorÚsocketZcreate_connectionr r )r r r r r r m s zPOP3._create_socketc C s: | j dkrtdt|ƒƒ t d| |¡ | j |t ¡ d S )Né z*put*zpoplib.putline)r ÚprintÚreprr r r ZsendallÚCRLF©r Úliner r r Ú_putliner s z POP3._putlinec C s. | j r tdt|ƒƒ t|| jƒ}| |¡ d S )Nz*cmd*)r r r ÚbytesÚencodingr$ r" r r r Ú_putcmdz s zPOP3._putcmdc C s | j td ¡}t|ƒtkrtdƒ‚| jdkrtdt|ƒƒ |s$tdƒ‚t|ƒ}|dd … tkr8|d d… |fS |d d… t krH|dd… |fS |d d… |fS )Nr z line too longz*get*z-ERR EOFéþÿÿÿéÿÿÿÿ) r ÚreadlineÚ_MAXLINEÚlenr r r r r! ÚCR)r r# Úoctetsr r r Ú_getline„ s z POP3._getlinec C s: | ¡ \}}| jdkrtdt|ƒƒ | d¡st|ƒ‚|S )Nr z*resp*ó +)r/ r r r Ú startswithr )r ÚrespÚor r r r ™ s z POP3._getrespc C sr | ¡ }g }d}| ¡ \}}|dkr4| d¡r!|d }|dd … }|| }| |¡ | ¡ \}}|dks|||fS )Nr ó .s ..r )r r/ r1 Úappend)r r2 Úlistr. r# r3 r r r Ú_getlongresp£ s ú zPOP3._getlongrespc C ó | |¡ | ¡ S ©N)r' r r" r r r Ú _shortcmd³ ó zPOP3._shortcmdc C r8 r9 )r' r7 r" r r r Ú_longcmdº r; z POP3._longcmdc C s | j S r9 )r ©r r r r Ú getwelcomeÁ s zPOP3.getwelcomec C s || _ d S r9 )r )r Úlevelr r r Úset_debuglevelÅ s zPOP3.set_debuglevelc C ó | d| ¡S )zVSend user name, return response (should indicate password required). zUSER %s©r: ©r Úuserr r r rD Ë ó z POP3.userc C rA )z Send password, return response (response includes message count, mailbox size). NB: mailbox is locked by server from here to 'quit()' zPASS %srB )r Zpswdr r r Úpass_Ó s z POP3.pass_c C sF | d¡}| ¡ }| jrtdt|ƒƒ t|d ƒ}t|d ƒ}||fS )z]Get mailbox status. Result is tuple of 2 ints (message count, mailbox size) ZSTATz*stat*r é )r: Úsplitr r r Úint)r ZretvalZretsZnumMessagesZsizeMessagesr r r ÚstatÝ s z POP3.statNc C ó |dur| d| ¡S | d¡S )a 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. NzLIST %sZLIST©r: r<