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