blob: fa736fe3af44924fa6fb641bfc881a735a7260b7 [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.
Antoine Pitrouc5e075f2014-03-22 18:19:11 +010072 If *port* is omitted, the standard IMAP4-over-SSL port (993) is used.
73 *ssl_context* is a :class:`ssl.SSLContext` object which allows bundling
74 SSL configuration options, certificates and private keys into a single
75 (potentially long-lived) structure. Please read :ref:`ssl-security` for
76 best practices.
77
78 *keyfile* and *certfile* are a legacy alternative to *ssl_context* - they
79 can point to PEM-formatted private key and certificate chain files for
80 the SSL connection. Note that the *keyfile*/*certfile* parameters are
81 mutually exclusive with *ssl_context*, a :class:`ValueError` is raised
82 if *keyfile*/*certfile* is provided along with *ssl_context*.
Antoine Pitrou08728162011-05-06 18:49:52 +020083
84 .. versionchanged:: 3.3
85 *ssl_context* parameter added.
Georg Brandl116aa622007-08-15 14:28:22 +000086
Christian Heimes48aae572013-12-02 20:01:29 +010087 .. versionchanged:: 3.4
88 The class now supports hostname check with
Antoine Pitrouc5e075f2014-03-22 18:19:11 +010089 :attr:`ssl.SSLContext.check_hostname` and *Server Name Indication* (see
90 :data:`ssl.HAS_SNI`).
Antoine Pitrouf3b001f2010-11-12 18:49:16 +000091
Georg Brandl116aa622007-08-15 14:28:22 +000092The second subclass allows for connections created by a child process:
93
94
95.. class:: IMAP4_stream(command)
96
97 This is a subclass derived from :class:`IMAP4` that connects to the
98 ``stdin/stdout`` file descriptors created by passing *command* to
Christian Heimesfb5faf02008-11-05 19:39:50 +000099 ``subprocess.Popen()``.
Georg Brandl116aa622007-08-15 14:28:22 +0000100
Georg Brandl116aa622007-08-15 14:28:22 +0000101
102The following utility functions are defined:
103
104
105.. function:: Internaldate2tuple(datestr)
106
Alexander Belopolsky41a99bc2011-01-19 19:53:30 +0000107 Parse an IMAP4 ``INTERNALDATE`` string and return corresponding local
108 time. The return value is a :class:`time.struct_time` tuple or
109 None if the string has wrong format.
Georg Brandl116aa622007-08-15 14:28:22 +0000110
111.. function:: Int2AP(num)
112
113 Converts an integer into a string representation using characters from the set
114 [``A`` .. ``P``].
115
116
117.. function:: ParseFlags(flagstr)
118
119 Converts an IMAP4 ``FLAGS`` response to a tuple of individual flags.
120
121
122.. function:: Time2Internaldate(date_time)
123
Alexander Belopolsky8141cc72012-06-22 21:03:39 -0400124 Convert *date_time* to an IMAP4 ``INTERNALDATE`` representation.
125 The return value is a string in the form: ``"DD-Mmm-YYYY HH:MM:SS
126 +HHMM"`` (including double-quotes). The *date_time* argument can
127 be a number (int or float) representing seconds since epoch (as
128 returned by :func:`time.time`), a 9-tuple representing local time
129 an instance of :class:`time.struct_time` (as returned by
130 :func:`time.localtime`), an aware instance of
131 :class:`datetime.datetime`, or a double-quoted string. In the last
132 case, it is assumed to already be in the correct format.
Georg Brandl116aa622007-08-15 14:28:22 +0000133
134Note that IMAP4 message numbers change as the mailbox changes; in particular,
135after an ``EXPUNGE`` command performs deletions the remaining messages are
136renumbered. So it is highly advisable to use UIDs instead, with the UID command.
137
138At the end of the module, there is a test section that contains a more extensive
139example of usage.
140
141
142.. seealso::
143
144 Documents describing the protocol, and sources and binaries for servers
145 implementing it, can all be found at the University of Washington's *IMAP
Christian Heimesdd15f6c2008-03-16 00:07:10 +0000146 Information Center* (http://www.washington.edu/imap/).
Georg Brandl116aa622007-08-15 14:28:22 +0000147
148
149.. _imap4-objects:
150
151IMAP4 Objects
152-------------
153
154All IMAP4rev1 commands are represented by methods of the same name, either
155upper-case or lower-case.
156
157All arguments to commands are converted to strings, except for ``AUTHENTICATE``,
158and the last argument to ``APPEND`` which is passed as an IMAP4 literal. If
159necessary (the string contains IMAP4 protocol-sensitive characters and isn't
160enclosed with either parentheses or double quotes) each string is quoted.
161However, the *password* argument to the ``LOGIN`` command is always quoted. If
162you want to avoid having an argument string quoted (eg: the *flags* argument to
163``STORE``) then enclose the string in parentheses (eg: ``r'(\Deleted)'``).
164
165Each command returns a tuple: ``(type, [data, ...])`` where *type* is usually
166``'OK'`` or ``'NO'``, and *data* is either the text from the command response,
167or mandated results from the command. Each *data* is either a string, or a
168tuple. If a tuple, then the first part is the header of the response, and the
169second part contains the data (ie: 'literal' value).
170
171The *message_set* options to commands below is a string specifying one or more
172messages to be acted upon. It may be a simple message number (``'1'``), a range
173of message numbers (``'2:4'``), or a group of non-contiguous ranges separated by
174commas (``'1:3,6:9'``). A range can contain an asterisk to indicate an infinite
175upper bound (``'3:*'``).
176
177An :class:`IMAP4` instance has the following methods:
178
179
180.. method:: IMAP4.append(mailbox, flags, date_time, message)
181
182 Append *message* to named mailbox.
183
184
185.. method:: IMAP4.authenticate(mechanism, authobject)
186
187 Authenticate command --- requires response processing.
188
189 *mechanism* specifies which authentication mechanism is to be used - it should
190 appear in the instance variable ``capabilities`` in the form ``AUTH=mechanism``.
191
192 *authobject* must be a callable object::
193
194 data = authobject(response)
195
R David Murray774a39f2013-02-19 12:17:31 -0500196 It will be called to process server continuation responses; the *response*
197 argument it is passed will be ``bytes``. It should return ``bytes`` *data*
198 that will be base64 encoded and sent to the server. It should return
199 ``None`` if the client abort response ``*`` should be sent instead.
Georg Brandl116aa622007-08-15 14:28:22 +0000200
201
202.. method:: IMAP4.check()
203
204 Checkpoint mailbox on server.
205
206
207.. method:: IMAP4.close()
208
209 Close currently selected mailbox. Deleted messages are removed from writable
210 mailbox. This is the recommended command before ``LOGOUT``.
211
212
213.. method:: IMAP4.copy(message_set, new_mailbox)
214
215 Copy *message_set* messages onto end of *new_mailbox*.
216
217
218.. method:: IMAP4.create(mailbox)
219
220 Create new mailbox named *mailbox*.
221
222
223.. method:: IMAP4.delete(mailbox)
224
225 Delete old mailbox named *mailbox*.
226
227
228.. method:: IMAP4.deleteacl(mailbox, who)
229
230 Delete the ACLs (remove any rights) set for who on mailbox.
231
Georg Brandl116aa622007-08-15 14:28:22 +0000232
233.. method:: IMAP4.expunge()
234
235 Permanently remove deleted items from selected mailbox. Generates an ``EXPUNGE``
236 response for each deleted message. Returned data contains a list of ``EXPUNGE``
237 message numbers in order received.
238
239
240.. method:: IMAP4.fetch(message_set, message_parts)
241
242 Fetch (parts of) messages. *message_parts* should be a string of message part
243 names enclosed within parentheses, eg: ``"(UID BODY[TEXT])"``. Returned data
244 are tuples of message part envelope and data.
245
246
247.. method:: IMAP4.getacl(mailbox)
248
249 Get the ``ACL``\ s for *mailbox*. The method is non-standard, but is supported
250 by the ``Cyrus`` server.
251
252
253.. method:: IMAP4.getannotation(mailbox, entry, attribute)
254
255 Retrieve the specified ``ANNOTATION``\ s for *mailbox*. The method is
256 non-standard, but is supported by the ``Cyrus`` server.
257
Georg Brandl116aa622007-08-15 14:28:22 +0000258
259.. method:: IMAP4.getquota(root)
260
261 Get the ``quota`` *root*'s resource usage and limits. This method is part of the
262 IMAP4 QUOTA extension defined in rfc2087.
263
Georg Brandl116aa622007-08-15 14:28:22 +0000264
265.. method:: IMAP4.getquotaroot(mailbox)
266
267 Get the list of ``quota`` ``roots`` for the named *mailbox*. This method is part
268 of the IMAP4 QUOTA extension defined in rfc2087.
269
Georg Brandl116aa622007-08-15 14:28:22 +0000270
271.. method:: IMAP4.list([directory[, pattern]])
272
273 List mailbox names in *directory* matching *pattern*. *directory* defaults to
274 the top-level mail folder, and *pattern* defaults to match anything. Returned
275 data contains a list of ``LIST`` responses.
276
277
278.. method:: IMAP4.login(user, password)
279
280 Identify the client using a plaintext password. The *password* will be quoted.
281
282
283.. method:: IMAP4.login_cram_md5(user, password)
284
285 Force use of ``CRAM-MD5`` authentication when identifying the client to protect
286 the password. Will only work if the server ``CAPABILITY`` response includes the
287 phrase ``AUTH=CRAM-MD5``.
288
Georg Brandl116aa622007-08-15 14:28:22 +0000289
290.. method:: IMAP4.logout()
291
292 Shutdown connection to server. Returns server ``BYE`` response.
293
294
Georg Brandl3dd33882009-06-01 17:35:27 +0000295.. method:: IMAP4.lsub(directory='""', pattern='*')
Georg Brandl116aa622007-08-15 14:28:22 +0000296
297 List subscribed mailbox names in directory matching pattern. *directory*
298 defaults to the top level directory and *pattern* defaults to match any mailbox.
299 Returned data are tuples of message part envelope and data.
300
301
302.. method:: IMAP4.myrights(mailbox)
303
304 Show my ACLs for a mailbox (i.e. the rights that I have on mailbox).
305
Georg Brandl116aa622007-08-15 14:28:22 +0000306
307.. method:: IMAP4.namespace()
308
309 Returns IMAP namespaces as defined in RFC2342.
310
Georg Brandl116aa622007-08-15 14:28:22 +0000311
312.. method:: IMAP4.noop()
313
314 Send ``NOOP`` to server.
315
316
317.. method:: IMAP4.open(host, port)
318
Antoine Pitroufdded562011-02-07 15:58:11 +0000319 Opens socket to *port* at *host*. This method is implicitly called by
320 the :class:`IMAP4` constructor. The connection objects established by this
Serhiy Storchakabfdcd432013-10-13 23:09:14 +0300321 method will be used in the :meth:`IMAP4.read`, :meth:`IMAP4.readline`,
322 :meth:`IMAP4.send`, and :meth:`IMAP4.shutdown` methods. You may override
323 this method.
Georg Brandl116aa622007-08-15 14:28:22 +0000324
325
326.. method:: IMAP4.partial(message_num, message_part, start, length)
327
328 Fetch truncated part of a message. Returned data is a tuple of message part
329 envelope and data.
330
331
332.. method:: IMAP4.proxyauth(user)
333
334 Assume authentication as *user*. Allows an authorised administrator to proxy
335 into any user's mailbox.
336
Georg Brandl116aa622007-08-15 14:28:22 +0000337
338.. method:: IMAP4.read(size)
339
340 Reads *size* bytes from the remote server. You may override this method.
341
342
343.. method:: IMAP4.readline()
344
345 Reads one line from the remote server. You may override this method.
346
347
348.. method:: IMAP4.recent()
349
350 Prompt server for an update. Returned data is ``None`` if no new messages, else
351 value of ``RECENT`` response.
352
353
354.. method:: IMAP4.rename(oldmailbox, newmailbox)
355
356 Rename mailbox named *oldmailbox* to *newmailbox*.
357
358
359.. method:: IMAP4.response(code)
360
361 Return data for response *code* if received, or ``None``. Returns the given
362 code, instead of the usual type.
363
364
365.. method:: IMAP4.search(charset, criterion[, ...])
366
367 Search mailbox for matching messages. *charset* may be ``None``, in which case
368 no ``CHARSET`` will be specified in the request to the server. The IMAP
369 protocol requires that at least one criterion be specified; an exception will be
370 raised when the server returns an error.
371
372 Example::
373
374 # M is a connected IMAP4 instance...
375 typ, msgnums = M.search(None, 'FROM', '"LDJ"')
376
377 # or:
378 typ, msgnums = M.search(None, '(FROM "LDJ")')
379
380
Georg Brandl3dd33882009-06-01 17:35:27 +0000381.. method:: IMAP4.select(mailbox='INBOX', readonly=False)
Georg Brandl116aa622007-08-15 14:28:22 +0000382
383 Select a mailbox. Returned data is the count of messages in *mailbox*
384 (``EXISTS`` response). The default *mailbox* is ``'INBOX'``. If the *readonly*
385 flag is set, modifications to the mailbox are not allowed.
386
387
388.. method:: IMAP4.send(data)
389
390 Sends ``data`` to the remote server. You may override this method.
391
392
393.. method:: IMAP4.setacl(mailbox, who, what)
394
395 Set an ``ACL`` for *mailbox*. The method is non-standard, but is supported by
396 the ``Cyrus`` server.
397
398
399.. method:: IMAP4.setannotation(mailbox, entry, attribute[, ...])
400
401 Set ``ANNOTATION``\ s for *mailbox*. The method is non-standard, but is
402 supported by the ``Cyrus`` server.
403
Georg Brandl116aa622007-08-15 14:28:22 +0000404
405.. method:: IMAP4.setquota(root, limits)
406
407 Set the ``quota`` *root*'s resource *limits*. This method is part of the IMAP4
408 QUOTA extension defined in rfc2087.
409
Georg Brandl116aa622007-08-15 14:28:22 +0000410
411.. method:: IMAP4.shutdown()
412
Antoine Pitroufdded562011-02-07 15:58:11 +0000413 Close connection established in ``open``. This method is implicitly
414 called by :meth:`IMAP4.logout`. You may override this method.
Georg Brandl116aa622007-08-15 14:28:22 +0000415
416
417.. method:: IMAP4.socket()
418
419 Returns socket instance used to connect to server.
420
421
422.. method:: IMAP4.sort(sort_criteria, charset, search_criterion[, ...])
423
424 The ``sort`` command is a variant of ``search`` with sorting semantics for the
425 results. Returned data contains a space separated list of matching message
426 numbers.
427
428 Sort has two arguments before the *search_criterion* argument(s); a
429 parenthesized list of *sort_criteria*, and the searching *charset*. Note that
430 unlike ``search``, the searching *charset* argument is mandatory. There is also
431 a ``uid sort`` command which corresponds to ``sort`` the way that ``uid search``
432 corresponds to ``search``. The ``sort`` command first searches the mailbox for
433 messages that match the given searching criteria using the charset argument for
434 the interpretation of strings in the searching criteria. It then returns the
435 numbers of matching messages.
436
437 This is an ``IMAP4rev1`` extension command.
438
439
Antoine Pitrouf3b001f2010-11-12 18:49:16 +0000440.. method:: IMAP4.starttls(ssl_context=None)
441
442 Send a ``STARTTLS`` command. The *ssl_context* argument is optional
443 and should be a :class:`ssl.SSLContext` object. This will enable
Antoine Pitrouc5e075f2014-03-22 18:19:11 +0100444 encryption on the IMAP connection. Please read :ref:`ssl-security` for
445 best practices.
Antoine Pitrouf3b001f2010-11-12 18:49:16 +0000446
447 .. versionadded:: 3.2
448
Christian Heimes48aae572013-12-02 20:01:29 +0100449 .. versionchanged:: 3.4
450 The method now supports hostname check with
Antoine Pitrouc5e075f2014-03-22 18:19:11 +0100451 :attr:`ssl.SSLContext.check_hostname` and *Server Name Indication* (see
452 :data:`ssl.HAS_SNI`).
Antoine Pitrouf3b001f2010-11-12 18:49:16 +0000453
Georg Brandldf48b972014-03-24 09:06:18 +0100454
Georg Brandl116aa622007-08-15 14:28:22 +0000455.. method:: IMAP4.status(mailbox, names)
456
457 Request named status conditions for *mailbox*.
458
459
460.. method:: IMAP4.store(message_set, command, flag_list)
461
462 Alters flag dispositions for messages in mailbox. *command* is specified by
463 section 6.4.6 of :rfc:`2060` as being one of "FLAGS", "+FLAGS", or "-FLAGS",
464 optionally with a suffix of ".SILENT".
465
466 For example, to set the delete flag on all messages::
467
468 typ, data = M.search(None, 'ALL')
469 for num in data[0].split():
470 M.store(num, '+FLAGS', '\\Deleted')
471 M.expunge()
472
473
474.. method:: IMAP4.subscribe(mailbox)
475
476 Subscribe to new mailbox.
477
478
479.. method:: IMAP4.thread(threading_algorithm, charset, search_criterion[, ...])
480
481 The ``thread`` command is a variant of ``search`` with threading semantics for
482 the results. Returned data contains a space separated list of thread members.
483
484 Thread members consist of zero or more messages numbers, delimited by spaces,
485 indicating successive parent and child.
486
487 Thread has two arguments before the *search_criterion* argument(s); a
488 *threading_algorithm*, and the searching *charset*. Note that unlike
489 ``search``, the searching *charset* argument is mandatory. There is also a
490 ``uid thread`` command which corresponds to ``thread`` the way that ``uid
491 search`` corresponds to ``search``. The ``thread`` command first searches the
492 mailbox for messages that match the given searching criteria using the charset
493 argument for the interpretation of strings in the searching criteria. It then
494 returns the matching messages threaded according to the specified threading
495 algorithm.
496
497 This is an ``IMAP4rev1`` extension command.
498
Georg Brandl116aa622007-08-15 14:28:22 +0000499
500.. method:: IMAP4.uid(command, arg[, ...])
501
502 Execute command args with messages identified by UID, rather than message
503 number. Returns response appropriate to command. At least one argument must be
504 supplied; if none are provided, the server will return an error and an exception
505 will be raised.
506
507
508.. method:: IMAP4.unsubscribe(mailbox)
509
510 Unsubscribe from old mailbox.
511
512
Georg Brandl3dd33882009-06-01 17:35:27 +0000513.. method:: IMAP4.xatom(name[, ...])
Georg Brandl116aa622007-08-15 14:28:22 +0000514
515 Allow simple extension commands notified by server in ``CAPABILITY`` response.
516
Georg Brandl116aa622007-08-15 14:28:22 +0000517
Georg Brandl3dd33882009-06-01 17:35:27 +0000518The following attributes are defined on instances of :class:`IMAP4`:
Georg Brandl116aa622007-08-15 14:28:22 +0000519
520.. attribute:: IMAP4.PROTOCOL_VERSION
521
522 The most recent supported protocol in the ``CAPABILITY`` response from the
523 server.
524
525
526.. attribute:: IMAP4.debug
527
528 Integer value to control debugging output. The initialize value is taken from
529 the module variable ``Debug``. Values greater than three trace each command.
530
531
532.. _imap4-example:
533
534IMAP4 Example
535-------------
536
537Here is a minimal example (without error checking) that opens a mailbox and
538retrieves and prints all messages::
539
540 import getpass, imaplib
541
542 M = imaplib.IMAP4()
543 M.login(getpass.getuser(), getpass.getpass())
544 M.select()
545 typ, data = M.search(None, 'ALL')
546 for num in data[0].split():
547 typ, data = M.fetch(num, '(RFC822)')
Georg Brandl6911e3c2007-09-04 07:15:32 +0000548 print('Message %s\n%s\n' % (num, data[0][1]))
Georg Brandl116aa622007-08-15 14:28:22 +0000549 M.close()
550 M.logout()
551