Back to module index

Go to module by name

poplib

A POP3 client class.

Based on the J. Myers POP3 draft, Jan. 96

Classes

POP3

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.
    
apop(self, user, password)

  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()'
        
capa(self)

  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...
        
close(self)

  Close the connection without assuming anything about it.
dele(self, which)

  Delete message number 'which'.

          Result is 'response'.
        
getwelcome(self)
list(self, which=None)

  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.
        
noop(self)

  Does nothing.

          One supposes the response indicates the server is alive.
        
pass_(self, pswd)

  Send password, return response

          (response includes message count, mailbox size).

          NB: mailbox is locked by server from here to 'quit()'
        
quit(self)

  Signoff: commit changes on server, unlock mailbox, close connection.
retr(self, which)

  Retrieve whole message number 'which'.

          Result is in form ['response', ['line', ...], octets].
        
rpop(self, user)

  Not sure what this does.
rset(self)

  Unmark all messages marked for deletion.
set_debuglevel(self, level)
stat(self)

  Get mailbox status.

          Result is tuple of 2 ints (message count, mailbox size)
        
stls(self, context=None)

  Start a TLS session on the active connection as specified in RFC 2595.

                  context - a ssl.SSLContext
        
top(self, which, howmuch)

  Retrieve message header of message number 'which'
          and first 'howmuch' lines of message body.

          Result is in form ['response', ['line', ...], octets].
        
uidl(self, which=None)

  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]
        
user(self, user)

  Send user name, return response

          (should indicate password required).
        
utf8(self)

  Try to enter UTF-8 mode (see RFC 6856). Returns server response.
        
encoding = 'UTF-8'
timestamp = re.compile(b'\\+OK.[^<]*(<.*>)')

POP3_SSL

POP3 client class over SSL connection

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

               hostname - the hostname of the pop3 over ssl server
               port - port number
               keyfile - PEM formatted file that contains your private key
               certfile - PEM formatted certificate chain file
               context - a ssl.SSLContext

        See the methods of the parent class POP3 for more documentation.
        
apop(self, user, password)

  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()'
        
capa(self)

  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...
        
close(self)

  Close the connection without assuming anything about it.
dele(self, which)

  Delete message number 'which'.

          Result is 'response'.
        
getwelcome(self)
list(self, which=None)

  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.
        
noop(self)

  Does nothing.

          One supposes the response indicates the server is alive.
        
pass_(self, pswd)

  Send password, return response

          (response includes message count, mailbox size).

          NB: mailbox is locked by server from here to 'quit()'
        
quit(self)

  Signoff: commit changes on server, unlock mailbox, close connection.
retr(self, which)

  Retrieve whole message number 'which'.

          Result is in form ['response', ['line', ...], octets].
        
rpop(self, user)

  Not sure what this does.
rset(self)

  Unmark all messages marked for deletion.
set_debuglevel(self, level)
stat(self)

  Get mailbox status.

          Result is tuple of 2 ints (message count, mailbox size)
        
stls(self, keyfile=None, certfile=None, context=None)

  The method unconditionally raises an exception since the
              STLS command doesn't make any sense on an already established
              SSL/TLS session.
            
top(self, which, howmuch)

  Retrieve message header of message number 'which'
          and first 'howmuch' lines of message body.

          Result is in form ['response', ['line', ...], octets].
        
uidl(self, which=None)

  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]
        
user(self, user)

  Send user name, return response

          (should indicate password required).
        
utf8(self)

  Try to enter UTF-8 mode (see RFC 6856). Returns server response.
        
encoding = 'UTF-8'
timestamp = re.compile(b'\\+OK.[^<]*(<.*>)')

error_proto

with_traceback(...)

  Exception.with_traceback(tb) --
      set self.__traceback__ to tb and return self.
args = <attribute 'args' of 'BaseException' objects>

Other members

CR = b'\r'
CRLF = b'\r\n'
HAVE_SSL = True
LF = b'\n'
POP3_PORT = 110
POP3_SSL_PORT = 995

Modules

errno

re

socket

ssl

sys