Home | History | Annotate | Download | only in library
      1 :mod:`imaplib` --- IMAP4 protocol client
      2 ========================================
      3 
      4 .. module:: imaplib
      5    :synopsis: IMAP4 protocol client (requires sockets).
      6 .. moduleauthor:: Piers Lauder <piers (a] communitysolutions.com.au>
      7 .. sectionauthor:: Piers Lauder <piers (a] communitysolutions.com.au>
      8 .. revised by ESR, January 2000
      9 .. changes for IMAP4_SSL by Tino Lange <Tino.Lange (a] isg.de>, March 2002
     10 .. changes for IMAP4_stream by Piers Lauder <piers (a] communitysolutions.com.au>,
     11    November 2002
     12 
     13 
     14 .. index::
     15    pair: IMAP4; protocol
     16    pair: IMAP4_SSL; protocol
     17    pair: IMAP4_stream; protocol
     18 
     19 **Source code:** :source:`Lib/imaplib.py`
     20 
     21 --------------
     22 
     23 This module defines three classes, :class:`IMAP4`, :class:`IMAP4_SSL` and
     24 :class:`IMAP4_stream`, which encapsulate a connection to an IMAP4 server and
     25 implement a large subset of the IMAP4rev1 client protocol as defined in
     26 :rfc:`2060`. It is backward compatible with IMAP4 (:rfc:`1730`) servers, but
     27 note that the ``STATUS`` command is not supported in IMAP4.
     28 
     29 Three classes are provided by the :mod:`imaplib` module, :class:`IMAP4` is the
     30 base class:
     31 
     32 
     33 .. class:: IMAP4([host[, port]])
     34 
     35    This class implements the actual IMAP4 protocol.  The connection is created and
     36    protocol version (IMAP4 or IMAP4rev1) is determined when the instance is
     37    initialized. If *host* is not specified, ``''`` (the local host) is used. If
     38    *port* is omitted, the standard IMAP4 port (143) is used.
     39 
     40 Three exceptions are defined as attributes of the :class:`IMAP4` class:
     41 
     42 
     43 .. exception:: IMAP4.error
     44 
     45    Exception raised on any errors.  The reason for the exception is passed to the
     46    constructor as a string.
     47 
     48 
     49 .. exception:: IMAP4.abort
     50 
     51    IMAP4 server errors cause this exception to be raised.  This is a sub-class of
     52    :exc:`IMAP4.error`.  Note that closing the instance and instantiating a new one
     53    will usually allow recovery from this exception.
     54 
     55 
     56 .. exception:: IMAP4.readonly
     57 
     58    This exception is raised when a writable mailbox has its status changed by the
     59    server.  This is a sub-class of :exc:`IMAP4.error`.  Some other client now has
     60    write permission, and the mailbox will need to be re-opened to re-obtain write
     61    permission.
     62 
     63 There's also a subclass for secure connections:
     64 
     65 
     66 .. class:: IMAP4_SSL([host[, port[, keyfile[, certfile]]]])
     67 
     68    This is a subclass derived from :class:`IMAP4` that connects over an SSL
     69    encrypted socket (to use this class you need a socket module that was compiled
     70    with SSL support).  If *host* is not specified, ``''`` (the local host) is used.
     71    If *port* is omitted, the standard IMAP4-over-SSL port (993) is used.  *keyfile*
     72    and *certfile* are also optional - they can contain a PEM formatted private key
     73    and certificate chain file for the SSL connection.
     74 
     75 The second subclass allows for connections created by a child process:
     76 
     77 
     78 .. class:: IMAP4_stream(command)
     79 
     80    This is a subclass derived from :class:`IMAP4` that connects to the
     81    ``stdin/stdout`` file descriptors created by passing *command* to
     82    ``os.popen2()``.
     83 
     84    .. versionadded:: 2.3
     85 
     86 The following utility functions are defined:
     87 
     88 
     89 .. function:: Internaldate2tuple(datestr)
     90 
     91    Parse an IMAP4 ``INTERNALDATE`` string and return corresponding local
     92    time.  The return value is a :class:`time.struct_time` instance or
     93    ``None`` if the string has wrong format.
     94 
     95 .. function:: Int2AP(num)
     96 
     97    Converts an integer into a string representation using characters from the set
     98    [``A`` .. ``P``].
     99 
    100 
    101 .. function:: ParseFlags(flagstr)
    102 
    103    Converts an IMAP4 ``FLAGS`` response to a tuple of individual flags.
    104 
    105 
    106 .. function:: Time2Internaldate(date_time)
    107 
    108    Convert *date_time* to an IMAP4 ``INTERNALDATE`` representation.  The
    109    return value is a string in the form: ``"DD-Mmm-YYYY HH:MM:SS
    110    +HHMM"`` (including double-quotes).  The *date_time* argument can be a
    111    number (int or float) representing seconds since epoch (as returned
    112    by :func:`time.time`), a 9-tuple representing local time (as returned by
    113    :func:`time.localtime`), or a double-quoted string.  In the last case, it
    114    is assumed to already be in the correct format.
    115 
    116 Note that IMAP4 message numbers change as the mailbox changes; in particular,
    117 after an ``EXPUNGE`` command performs deletions the remaining messages are
    118 renumbered. So it is highly advisable to use UIDs instead, with the UID command.
    119 
    120 At the end of the module, there is a test section that contains a more extensive
    121 example of usage.
    122 
    123 
    124 .. seealso::
    125 
    126    Documents describing the protocol, and sources and binaries  for servers
    127    implementing it, can all be found at the University of Washington's *IMAP
    128    Information Center* (https://www.washington.edu/imap/).
    129 
    130 
    131 .. _imap4-objects:
    132 
    133 IMAP4 Objects
    134 -------------
    135 
    136 All IMAP4rev1 commands are represented by methods of the same name, either
    137 upper-case or lower-case.
    138 
    139 All arguments to commands are converted to strings, except for ``AUTHENTICATE``,
    140 and the last argument to ``APPEND`` which is passed as an IMAP4 literal.  If
    141 necessary (the string contains IMAP4 protocol-sensitive characters and isn't
    142 enclosed with either parentheses or double quotes) each string is quoted.
    143 However, the *password* argument to the ``LOGIN`` command is always quoted. If
    144 you want to avoid having an argument string quoted (eg: the *flags* argument to
    145 ``STORE``) then enclose the string in parentheses (eg: ``r'(\Deleted)'``).
    146 
    147 Each command returns a tuple: ``(type, [data, ...])`` where *type* is usually
    148 ``'OK'`` or ``'NO'``, and *data* is either the text from the command response,
    149 or mandated results from the command. Each *data* is either a string, or a
    150 tuple. If a tuple, then the first part is the header of the response, and the
    151 second part contains the data (ie: 'literal' value).
    152 
    153 The *message_set* options to commands below is a string specifying one or more
    154 messages to be acted upon.  It may be a simple message number (``'1'``), a range
    155 of message numbers (``'2:4'``), or a group of non-contiguous ranges separated by
    156 commas (``'1:3,6:9'``).  A range can contain an asterisk to indicate an infinite
    157 upper bound (``'3:*'``).
    158 
    159 An :class:`IMAP4` instance has the following methods:
    160 
    161 
    162 .. method:: IMAP4.append(mailbox, flags, date_time, message)
    163 
    164    Append *message* to named mailbox.
    165 
    166 
    167 .. method:: IMAP4.authenticate(mechanism, authobject)
    168 
    169    Authenticate command --- requires response processing.
    170 
    171    *mechanism* specifies which authentication mechanism is to be used - it should
    172    appear in the instance variable ``capabilities`` in the form ``AUTH=mechanism``.
    173 
    174    *authobject* must be a callable object::
    175 
    176       data = authobject(response)
    177 
    178    It will be called to process server continuation responses. It should return
    179    ``data`` that will be encoded and sent to server. It should return ``None`` if
    180    the client abort response ``*`` should be sent instead.
    181 
    182 
    183 .. method:: IMAP4.check()
    184 
    185    Checkpoint mailbox on server.
    186 
    187 
    188 .. method:: IMAP4.close()
    189 
    190    Close currently selected mailbox. Deleted messages are removed from writable
    191    mailbox. This is the recommended command before ``LOGOUT``.
    192 
    193 
    194 .. method:: IMAP4.copy(message_set, new_mailbox)
    195 
    196    Copy *message_set* messages onto end of *new_mailbox*.
    197 
    198 
    199 .. method:: IMAP4.create(mailbox)
    200 
    201    Create new mailbox named *mailbox*.
    202 
    203 
    204 .. method:: IMAP4.delete(mailbox)
    205 
    206    Delete old mailbox named *mailbox*.
    207 
    208 
    209 .. method:: IMAP4.deleteacl(mailbox, who)
    210 
    211    Delete the ACLs (remove any rights) set for who on mailbox.
    212 
    213    .. versionadded:: 2.4
    214 
    215 
    216 .. method:: IMAP4.expunge()
    217 
    218    Permanently remove deleted items from selected mailbox. Generates an ``EXPUNGE``
    219    response for each deleted message. Returned data contains a list of ``EXPUNGE``
    220    message numbers in order received.
    221 
    222 
    223 .. method:: IMAP4.fetch(message_set, message_parts)
    224 
    225    Fetch (parts of) messages.  *message_parts* should be a string of message part
    226    names enclosed within parentheses, eg: ``"(UID BODY[TEXT])"``.  Returned data
    227    are tuples of message part envelope and data.
    228 
    229 
    230 .. method:: IMAP4.getacl(mailbox)
    231 
    232    Get the ``ACL``\ s for *mailbox*. The method is non-standard, but is supported
    233    by the ``Cyrus`` server.
    234 
    235 
    236 .. method:: IMAP4.getannotation(mailbox, entry, attribute)
    237 
    238    Retrieve the specified ``ANNOTATION``\ s for *mailbox*. The method is
    239    non-standard, but is supported by the ``Cyrus`` server.
    240 
    241    .. versionadded:: 2.5
    242 
    243 
    244 .. method:: IMAP4.getquota(root)
    245 
    246    Get the ``quota`` *root*'s resource usage and limits. This method is part of the
    247    IMAP4 QUOTA extension defined in rfc2087.
    248 
    249    .. versionadded:: 2.3
    250 
    251 
    252 .. method:: IMAP4.getquotaroot(mailbox)
    253 
    254    Get the list of ``quota`` ``roots`` for the named *mailbox*. This method is part
    255    of the IMAP4 QUOTA extension defined in rfc2087.
    256 
    257    .. versionadded:: 2.3
    258 
    259 
    260 .. method:: IMAP4.list([directory[, pattern]])
    261 
    262    List mailbox names in *directory* matching *pattern*.  *directory* defaults to
    263    the top-level mail folder, and *pattern* defaults to match anything.  Returned
    264    data contains a list of ``LIST`` responses.
    265 
    266 
    267 .. method:: IMAP4.login(user, password)
    268 
    269    Identify the client using a plaintext password. The *password* will be quoted.
    270 
    271 
    272 .. method:: IMAP4.login_cram_md5(user, password)
    273 
    274    Force use of ``CRAM-MD5`` authentication when identifying the client to protect
    275    the password.  Will only work if the server ``CAPABILITY`` response includes the
    276    phrase ``AUTH=CRAM-MD5``.
    277 
    278    .. versionadded:: 2.3
    279 
    280 
    281 .. method:: IMAP4.logout()
    282 
    283    Shutdown connection to server. Returns server ``BYE`` response.
    284 
    285 
    286 .. method:: IMAP4.lsub([directory[, pattern]])
    287 
    288    List subscribed mailbox names in directory matching pattern. *directory*
    289    defaults to the top level directory and *pattern* defaults to match any mailbox.
    290    Returned data are tuples of message part envelope and data.
    291 
    292 
    293 .. method:: IMAP4.myrights(mailbox)
    294 
    295    Show my ACLs for a mailbox (i.e. the rights that I have on mailbox).
    296 
    297    .. versionadded:: 2.4
    298 
    299 
    300 .. method:: IMAP4.namespace()
    301 
    302    Returns IMAP namespaces as defined in RFC2342.
    303 
    304    .. versionadded:: 2.3
    305 
    306 
    307 .. method:: IMAP4.noop()
    308 
    309    Send ``NOOP`` to server.
    310 
    311 
    312 .. method:: IMAP4.open(host, port)
    313 
    314    Opens socket to *port* at *host*.  This method is implicitly called by
    315    the :class:`IMAP4` constructor.  The connection objects established by this
    316    method will be used in the :meth:`IMAP4.read`, :meth:`IMAP4.readline`,
    317    :meth:`IMAP4.send`, and :meth:`IMAP4.shutdown` methods.  You may override
    318    this method.
    319 
    320 
    321 .. method:: IMAP4.partial(message_num, message_part, start, length)
    322 
    323    Fetch truncated part of a message. Returned data is a tuple of message part
    324    envelope and data.
    325 
    326 
    327 .. method:: IMAP4.proxyauth(user)
    328 
    329    Assume authentication as *user*. Allows an authorised administrator to proxy
    330    into any user's mailbox.
    331 
    332    .. versionadded:: 2.3
    333 
    334 
    335 .. method:: IMAP4.read(size)
    336 
    337    Reads *size* bytes from the remote server. You may override this method.
    338 
    339 
    340 .. method:: IMAP4.readline()
    341 
    342    Reads one line from the remote server. You may override this method.
    343 
    344 
    345 .. method:: IMAP4.recent()
    346 
    347    Prompt server for an update. Returned data is ``None`` if no new messages, else
    348    value of ``RECENT`` response.
    349 
    350 
    351 .. method:: IMAP4.rename(oldmailbox, newmailbox)
    352 
    353    Rename mailbox named *oldmailbox* to *newmailbox*.
    354 
    355 
    356 .. method:: IMAP4.response(code)
    357 
    358    Return data for response *code* if received, or ``None``. Returns the given
    359    code, instead of the usual type.
    360 
    361 
    362 .. method:: IMAP4.search(charset, criterion[, ...])
    363 
    364    Search mailbox for matching messages.  *charset* may be ``None``, in which case
    365    no ``CHARSET`` will be specified in the request to the server.  The IMAP
    366    protocol requires that at least one criterion be specified; an exception will be
    367    raised when the server returns an error.
    368 
    369    Example::
    370 
    371       # M is a connected IMAP4 instance...
    372       typ, msgnums = M.search(None, 'FROM', '"LDJ"')
    373 
    374       # or:
    375       typ, msgnums = M.search(None, '(FROM "LDJ")')
    376 
    377 
    378 .. method:: IMAP4.select([mailbox[, readonly]])
    379 
    380    Select a mailbox. Returned data is the count of messages in *mailbox*
    381    (``EXISTS`` response).  The default *mailbox* is ``'INBOX'``.  If the *readonly*
    382    flag is set, modifications to the mailbox are not allowed.
    383 
    384 
    385 .. method:: IMAP4.send(data)
    386 
    387    Sends ``data`` to the remote server. You may override this method.
    388 
    389 
    390 .. method:: IMAP4.setacl(mailbox, who, what)
    391 
    392    Set an ``ACL`` for *mailbox*. The method is non-standard, but is supported by
    393    the ``Cyrus`` server.
    394 
    395 
    396 .. method:: IMAP4.setannotation(mailbox, entry, attribute[, ...])
    397 
    398    Set ``ANNOTATION``\ s for *mailbox*. The method is non-standard, but is
    399    supported by the ``Cyrus`` server.
    400 
    401    .. versionadded:: 2.5
    402 
    403 
    404 .. method:: IMAP4.setquota(root, limits)
    405 
    406    Set the ``quota`` *root*'s resource *limits*. This method is part of the IMAP4
    407    QUOTA extension defined in rfc2087.
    408 
    409    .. versionadded:: 2.3
    410 
    411 
    412 .. method:: IMAP4.shutdown()
    413 
    414    Close connection established in ``open``.  This method is implicitly
    415    called by :meth:`IMAP4.logout`.  You may override this method.
    416 
    417 
    418 .. method:: IMAP4.socket()
    419 
    420    Returns socket instance used to connect to server.
    421 
    422 
    423 .. method:: IMAP4.sort(sort_criteria, charset, search_criterion[, ...])
    424 
    425    The ``sort`` command is a variant of ``search`` with sorting semantics for the
    426    results.  Returned data contains a space separated list of matching message
    427    numbers.
    428 
    429    Sort has two arguments before the *search_criterion* argument(s); a
    430    parenthesized list of *sort_criteria*, and the searching *charset*.  Note that
    431    unlike ``search``, the searching *charset* argument is mandatory.  There is also
    432    a ``uid sort`` command which corresponds to ``sort`` the way that ``uid search``
    433    corresponds to ``search``.  The ``sort`` command first searches the mailbox for
    434    messages that match the given searching criteria using the charset argument for
    435    the interpretation of strings in the searching criteria.  It then returns the
    436    numbers of matching messages.
    437 
    438    This is an ``IMAP4rev1`` extension command.
    439 
    440 
    441 .. method:: IMAP4.status(mailbox, names)
    442 
    443    Request named status conditions for *mailbox*.
    444 
    445 
    446 .. method:: IMAP4.store(message_set, command, flag_list)
    447 
    448    Alters flag dispositions for messages in mailbox.  *command* is specified by
    449    section 6.4.6 of :rfc:`2060` as being one of "FLAGS", "+FLAGS", or "-FLAGS",
    450    optionally with a suffix of ".SILENT".
    451 
    452    For example, to set the delete flag on all messages::
    453 
    454       typ, data = M.search(None, 'ALL')
    455       for num in data[0].split():
    456          M.store(num, '+FLAGS', '\\Deleted')
    457       M.expunge()
    458 
    459 
    460 .. method:: IMAP4.subscribe(mailbox)
    461 
    462    Subscribe to new mailbox.
    463 
    464 
    465 .. method:: IMAP4.thread(threading_algorithm, charset, search_criterion[, ...])
    466 
    467    The ``thread`` command is a variant of ``search`` with threading semantics for
    468    the results.  Returned data contains a space separated list of thread members.
    469 
    470    Thread members consist of zero or more messages numbers, delimited by spaces,
    471    indicating successive parent and child.
    472 
    473    Thread has two arguments before the *search_criterion* argument(s); a
    474    *threading_algorithm*, and the searching *charset*.  Note that unlike
    475    ``search``, the searching *charset* argument is mandatory.  There is also a
    476    ``uid thread`` command which corresponds to ``thread`` the way that ``uid
    477    search`` corresponds to ``search``.  The ``thread`` command first searches the
    478    mailbox for messages that match the given searching criteria using the charset
    479    argument for the interpretation of strings in the searching criteria. It then
    480    returns the matching messages threaded according to the specified threading
    481    algorithm.
    482 
    483    This is an ``IMAP4rev1`` extension command.
    484 
    485    .. versionadded:: 2.4
    486 
    487 
    488 .. method:: IMAP4.uid(command, arg[, ...])
    489 
    490    Execute command args with messages identified by UID, rather than message
    491    number.  Returns response appropriate to command.  At least one argument must be
    492    supplied; if none are provided, the server will return an error and an exception
    493    will be raised.
    494 
    495 
    496 .. method:: IMAP4.unsubscribe(mailbox)
    497 
    498    Unsubscribe from old mailbox.
    499 
    500 
    501 .. method:: IMAP4.xatom(name[, arg[, ...]])
    502 
    503    Allow simple extension commands notified by server in ``CAPABILITY`` response.
    504 
    505 Instances of :class:`IMAP4_SSL` have just one additional method:
    506 
    507 
    508 .. method:: IMAP4_SSL.ssl()
    509 
    510    Returns SSLObject instance used for the secure connection with the server.
    511 
    512 The following attributes are defined on instances of :class:`IMAP4`:
    513 
    514 
    515 .. attribute:: IMAP4.PROTOCOL_VERSION
    516 
    517    The most recent supported protocol in the ``CAPABILITY`` response from the
    518    server.
    519 
    520 
    521 .. attribute:: IMAP4.debug
    522 
    523    Integer value to control debugging output.  The initialize value is taken from
    524    the module variable ``Debug``.  Values greater than three trace each command.
    525 
    526 
    527 .. _imap4-example:
    528 
    529 IMAP4 Example
    530 -------------
    531 
    532 Here is a minimal example (without error checking) that opens a mailbox and
    533 retrieves and prints all messages::
    534 
    535    import getpass, imaplib
    536 
    537    M = imaplib.IMAP4()
    538    M.login(getpass.getuser(), getpass.getpass())
    539    M.select()
    540    typ, data = M.search(None, 'ALL')
    541    for num in data[0].split():
    542        typ, data = M.fetch(num, '(RFC822)')
    543        print 'Message %s\n%s\n' % (num, data[0][1])
    544    M.close()
    545    M.logout()
    546 
    547