blob: 7658bc965f29c72407f1d912c72f6ee8c66a177d [file] [log] [blame]
Fred Drake295da241998-08-10 19:42:37 +00001\section{\module{imaplib} ---
Fred Drakeb7745501999-04-22 16:46:18 +00002 IMAP4 protocol client}
3
Fred Drakeb91e9341998-07-23 17:59:49 +00004\declaremodule{standard}{imaplib}
Fred Drakeb7745501999-04-22 16:46:18 +00005\modulesynopsis{IMAP4 protocol client (requires sockets).}
Piers Lauderd3c821e2002-11-22 05:47:39 +00006\moduleauthor{Piers Lauder}{piers@communitysolutions.com.au}
7\sectionauthor{Piers Lauder}{piers@communitysolutions.com.au}
Fred Drakeb91e9341998-07-23 17:59:49 +00008
Fred Drake63a5d0b2004-07-30 19:12:38 +00009% Based on HTML documentation by Piers Lauder
10% <piers@communitysolutions.com.au>;
Fred Drake38e5d272000-04-03 20:13:55 +000011% converted by Fred L. Drake, Jr. <fdrake@acm.org>.
Eric S. Raymond5ac97952001-01-11 04:19:52 +000012% Revised by ESR, January 2000.
Piers Laudera4f83132002-03-08 01:53:24 +000013% Changes for IMAP4_SSL by Tino Lange <Tino.Lange@isg.de>, March 2002
Fred Drake63a5d0b2004-07-30 19:12:38 +000014% Changes for IMAP4_stream by Piers Lauder
15% <piers@communitysolutions.com.au>, November 2002
Fred Drake38e5d272000-04-03 20:13:55 +000016
Fred Drakee5cf53a1998-04-11 05:02:45 +000017\indexii{IMAP4}{protocol}
Piers Laudera4f83132002-03-08 01:53:24 +000018\indexii{IMAP4_SSL}{protocol}
Piers Lauderd3c821e2002-11-22 05:47:39 +000019\indexii{IMAP4_stream}{protocol}
Fred Drake89de3141998-04-11 04:19:04 +000020
Fred Drake63a5d0b2004-07-30 19:12:38 +000021This module defines three classes, \class{IMAP4}, \class{IMAP4_SSL}
22and \class{IMAP4_stream}, which encapsulate a
Piers Laudera4f83132002-03-08 01:53:24 +000023connection to an IMAP4 server and implement a large subset of the
Eric S. Raymond5ac97952001-01-11 04:19:52 +000024IMAP4rev1 client protocol as defined in \rfc{2060}. It is backward
25compatible with IMAP4 (\rfc{1730}) servers, but note that the
26\samp{STATUS} command is not supported in IMAP4.
Fred Drake89de3141998-04-11 04:19:04 +000027
Fred Drake63a5d0b2004-07-30 19:12:38 +000028Three classes are provided by the \module{imaplib} module,
29\class{IMAP4} is the base class:
Fred Drake89de3141998-04-11 04:19:04 +000030
31\begin{classdesc}{IMAP4}{\optional{host\optional{, port}}}
32This class implements the actual IMAP4 protocol. The connection is
33created and protocol version (IMAP4 or IMAP4rev1) is determined when
34the instance is initialized.
35If \var{host} is not specified, \code{''} (the local host) is used.
36If \var{port} is omitted, the standard IMAP4 port (143) is used.
37\end{classdesc}
38
Piers Lauderd3c821e2002-11-22 05:47:39 +000039Three exceptions are defined as attributes of the \class{IMAP4} class:
Fred Drake89de3141998-04-11 04:19:04 +000040
41\begin{excdesc}{IMAP4.error}
42Exception raised on any errors. The reason for the exception is
43passed to the constructor as a string.
44\end{excdesc}
45
46\begin{excdesc}{IMAP4.abort}
47IMAP4 server errors cause this exception to be raised. This is a
48sub-class of \exception{IMAP4.error}. Note that closing the instance
49and instantiating a new one will usually allow recovery from this
50exception.
51\end{excdesc}
52
Guido van Rossum5f7a28c1999-12-13 23:29:39 +000053\begin{excdesc}{IMAP4.readonly}
Fred Drake63a5d0b2004-07-30 19:12:38 +000054This exception is raised when a writable mailbox has its status
55changed by the server. This is a sub-class of
56\exception{IMAP4.error}. Some other client now has write permission,
57and the mailbox will need to be re-opened to re-obtain write
58permission.
Guido van Rossum5f7a28c1999-12-13 23:29:39 +000059\end{excdesc}
60
Piers Laudera4f83132002-03-08 01:53:24 +000061There's also a subclass for secure connections:
62
Fred Drake63a5d0b2004-07-30 19:12:38 +000063\begin{classdesc}{IMAP4_SSL}{\optional{host\optional{, port\optional{,
64 keyfile\optional{, certfile}}}}}
65This is a subclass derived from \class{IMAP4} that connects over an
66SSL encrypted socket (to use this class you need a socket module that
67was compiled with SSL support). If \var{host} is not specified,
68\code{''} (the local host) is used. If \var{port} is omitted, the
69standard IMAP4-over-SSL port (993) is used. \var{keyfile} and
70\var{certfile} are also optional - they can contain a PEM formatted
71private key and certificate chain file for the SSL connection.
Piers Laudera4f83132002-03-08 01:53:24 +000072\end{classdesc}
73
Piers Lauderd3c821e2002-11-22 05:47:39 +000074The second subclass allows for connections created by a child process:
75
76\begin{classdesc}{IMAP4_stream}{command}
77This is a subclass derived from \class{IMAP4} that connects
Fred Drake63a5d0b2004-07-30 19:12:38 +000078to the \code{stdin/stdout} file descriptors created by passing
79\var{command} to \code{os.popen2()}.
Neal Norwitze1497982003-01-02 15:32:00 +000080\versionadded{2.3}
Piers Lauderd3c821e2002-11-22 05:47:39 +000081\end{classdesc}
82
Fred Drake89de3141998-04-11 04:19:04 +000083The following utility functions are defined:
84
85\begin{funcdesc}{Internaldate2tuple}{datestr}
86 Converts an IMAP4 INTERNALDATE string to Coordinated Universal
Fred Drakeb7745501999-04-22 16:46:18 +000087 Time. Returns a \refmodule{time} module tuple.
Fred Drake89de3141998-04-11 04:19:04 +000088\end{funcdesc}
89
90\begin{funcdesc}{Int2AP}{num}
91 Converts an integer into a string representation using characters
92 from the set [\code{A} .. \code{P}].
93\end{funcdesc}
94
95\begin{funcdesc}{ParseFlags}{flagstr}
96 Converts an IMAP4 \samp{FLAGS} response to a tuple of individual
97 flags.
98\end{funcdesc}
99
100\begin{funcdesc}{Time2Internaldate}{date_time}
Fred Drakeb7745501999-04-22 16:46:18 +0000101 Converts a \refmodule{time} module tuple to an IMAP4
Fred Drake89de3141998-04-11 04:19:04 +0000102 \samp{INTERNALDATE} representation. Returns a string in the form:
103 \code{"DD-Mmm-YYYY HH:MM:SS +HHMM"} (including double-quotes).
104\end{funcdesc}
105
106
Eric S. Raymond5ac97952001-01-11 04:19:52 +0000107Note that IMAP4 message numbers change as the mailbox changes; in
108particular, after an \samp{EXPUNGE} command performs deletions the
109remaining messages are renumbered. So it is highly advisable to use
110UIDs instead, with the UID command.
Fred Drake363d67c1999-07-07 13:42:56 +0000111
112At the end of the module, there is a test section that contains a more
113extensive example of usage.
114
115\begin{seealso}
Fred Drake37f15741999-11-10 16:21:37 +0000116 \seetext{Documents describing the protocol, and sources and binaries
117 for servers implementing it, can all be found at the
118 University of Washington's \emph{IMAP Information Center}
119 (\url{http://www.cac.washington.edu/imap/}).}
Fred Drake363d67c1999-07-07 13:42:56 +0000120\end{seealso}
121
122
123\subsection{IMAP4 Objects \label{imap4-objects}}
Fred Drake89de3141998-04-11 04:19:04 +0000124
125All IMAP4rev1 commands are represented by methods of the same name,
126either upper-case or lower-case.
127
Guido van Rossum5f7a28c1999-12-13 23:29:39 +0000128All arguments to commands are converted to strings, except for
Fred Draked16b5ab1999-12-13 23:34:42 +0000129\samp{AUTHENTICATE}, and the last argument to \samp{APPEND} which is
130passed as an IMAP4 literal. If necessary (the string contains IMAP4
131protocol-sensitive characters and isn't enclosed with either
132parentheses or double quotes) each string is quoted. However, the
133\var{password} argument to the \samp{LOGIN} command is always quoted.
Fred Drake99d707a2000-05-26 04:08:37 +0000134If you want to avoid having an argument string quoted
135(eg: the \var{flags} argument to \samp{STORE}) then enclose the string in
136parentheses (eg: \code{r'(\e Deleted)'}).
Guido van Rossum5f7a28c1999-12-13 23:29:39 +0000137
Fred Drakeb7745501999-04-22 16:46:18 +0000138Each command returns a tuple: \code{(\var{type}, [\var{data},
139...])} where \var{type} is usually \code{'OK'} or \code{'NO'},
Fred Drake89de3141998-04-11 04:19:04 +0000140and \var{data} is either the text from the command response, or
Piers Lauderd3c821e2002-11-22 05:47:39 +0000141mandated results from the command. Each \var{data}
142is either a string, or a tuple. If a tuple, then the first part
143is the header of the response, and the second part contains
144the data (ie: 'literal' value).
Fred Drake89de3141998-04-11 04:19:04 +0000145
Fred Drake5e37d792005-01-19 04:44:07 +0000146The \var{message_set} options to commands below is a string specifying one
147or more messages to be acted upon. It may be a simple message number
148(\code{'1'}), a range of message numbers (\code{'2:4'}), or a group of
149non-contiguous ranges separated by commas (\code{'1:3,6:9'}). A range
150can contain an asterisk to indicate an infinite upper bound
151(\code{'3:*'}).
152
Fred Drake89de3141998-04-11 04:19:04 +0000153An \class{IMAP4} instance has the following methods:
154
155
156\begin{methoddesc}{append}{mailbox, flags, date_time, message}
Piers Lauder8bc81fc2004-05-20 12:12:58 +0000157 Append \var{message} to named mailbox.
Fred Drake89de3141998-04-11 04:19:04 +0000158\end{methoddesc}
159
Piers Lauder8bc81fc2004-05-20 12:12:58 +0000160\begin{methoddesc}{authenticate}{mechanism, authobject}
161 Authenticate command --- requires response processing.
162
Fred Drake63a5d0b2004-07-30 19:12:38 +0000163 \var{mechanism} specifies which authentication mechanism is to be
164 used - it should appear in the instance variable \code{capabilities}
165 in the form \code{AUTH=mechanism}.
Piers Lauder8bc81fc2004-05-20 12:12:58 +0000166
167 \var{authobject} must be a callable object:
168
169\begin{verbatim}
170data = authobject(response)
171\end{verbatim}
172
173 It will be called to process server continuation responses.
174 It should return \code{data} that will be encoded and sent to server.
175 It should return \code{None} if the client abort response \samp{*} should
176 be sent instead.
Fred Drake89de3141998-04-11 04:19:04 +0000177\end{methoddesc}
178
179\begin{methoddesc}{check}{}
180 Checkpoint mailbox on server.
181\end{methoddesc}
182
183\begin{methoddesc}{close}{}
184 Close currently selected mailbox. Deleted messages are removed from
185 writable mailbox. This is the recommended command before
186 \samp{LOGOUT}.
187\end{methoddesc}
188
189\begin{methoddesc}{copy}{message_set, new_mailbox}
190 Copy \var{message_set} messages onto end of \var{new_mailbox}.
191\end{methoddesc}
192
193\begin{methoddesc}{create}{mailbox}
194 Create new mailbox named \var{mailbox}.
195\end{methoddesc}
196
197\begin{methoddesc}{delete}{mailbox}
198 Delete old mailbox named \var{mailbox}.
199\end{methoddesc}
200
Martin v. Löwis7b9190b2004-07-27 05:07:19 +0000201\begin{methoddesc}{deleteacl}{mailbox, who}
202 Delete the ACLs (remove any rights) set for who on mailbox.
Neal Norwitzbee41742004-07-28 02:34:12 +0000203\versionadded{2.4}
Martin v. Löwis7b9190b2004-07-27 05:07:19 +0000204\end{methoddesc}
205
Fred Drake89de3141998-04-11 04:19:04 +0000206\begin{methoddesc}{expunge}{}
207 Permanently remove deleted items from selected mailbox. Generates an
208 \samp{EXPUNGE} response for each deleted message. Returned data
209 contains a list of \samp{EXPUNGE} message numbers in order
210 received.
211\end{methoddesc}
212
213\begin{methoddesc}{fetch}{message_set, message_parts}
Fred Drake99d707a2000-05-26 04:08:37 +0000214 Fetch (parts of) messages. \var{message_parts} should be
215 a string of message part names enclosed within parentheses,
216 eg: \samp{"(UID BODY[TEXT])"}. Returned data are tuples
217 of message part envelope and data.
Fred Drake89de3141998-04-11 04:19:04 +0000218\end{methoddesc}
219
Piers Laudera3a16682001-07-20 11:04:19 +0000220\begin{methoddesc}{getacl}{mailbox}
221 Get the \samp{ACL}s for \var{mailbox}.
222 The method is non-standard, but is supported by the \samp{Cyrus} server.
223\end{methoddesc}
224
Piers Lauderd80ef022005-06-01 23:50:52 +0000225\begin{methoddesc}{getannotation}{mailbox, entry, attribute}
226 Retrieve the specified \samp{ANNOTATION}s for \var{mailbox}.
227 The method is non-standard, but is supported by the \samp{Cyrus} server.
Neal Norwitz05110aa2006-02-07 07:23:26 +0000228\versionadded{2.5}
Piers Lauderd80ef022005-06-01 23:50:52 +0000229\end{methoddesc}
230
Piers Lauder3fca2912002-06-17 07:07:20 +0000231\begin{methoddesc}{getquota}{root}
232 Get the \samp{quota} \var{root}'s resource usage and limits.
233 This method is part of the IMAP4 QUOTA extension defined in rfc2087.
Neal Norwitz1cfcafc2002-07-20 00:46:12 +0000234\versionadded{2.3}
Piers Lauder3fca2912002-06-17 07:07:20 +0000235\end{methoddesc}
236
237\begin{methoddesc}{getquotaroot}{mailbox}
238 Get the list of \samp{quota} \samp{roots} for the named \var{mailbox}.
239 This method is part of the IMAP4 QUOTA extension defined in rfc2087.
Neal Norwitz1cfcafc2002-07-20 00:46:12 +0000240\versionadded{2.3}
Piers Lauder3fca2912002-06-17 07:07:20 +0000241\end{methoddesc}
242
Fred Drakee5cf53a1998-04-11 05:02:45 +0000243\begin{methoddesc}{list}{\optional{directory\optional{, pattern}}}
244 List mailbox names in \var{directory} matching
245 \var{pattern}. \var{directory} defaults to the top-level mail
246 folder, and \var{pattern} defaults to match anything. Returned data
247 contains a list of \samp{LIST} responses.
Fred Drake89de3141998-04-11 04:19:04 +0000248\end{methoddesc}
249
250\begin{methoddesc}{login}{user, password}
251 Identify the client using a plaintext password.
Guido van Rossum5f7a28c1999-12-13 23:29:39 +0000252 The \var{password} will be quoted.
Fred Drake89de3141998-04-11 04:19:04 +0000253\end{methoddesc}
254
Piers Lauderd3c821e2002-11-22 05:47:39 +0000255\begin{methoddesc}{login_cram_md5}{user, password}
Fred Drake63a5d0b2004-07-30 19:12:38 +0000256 Force use of \samp{CRAM-MD5} authentication when identifying the
257 client to protect the password. Will only work if the server
258 \samp{CAPABILITY} response includes the phrase \samp{AUTH=CRAM-MD5}.
Neal Norwitze1497982003-01-02 15:32:00 +0000259\versionadded{2.3}
Piers Lauderd3c821e2002-11-22 05:47:39 +0000260\end{methoddesc}
261
Fred Drake89de3141998-04-11 04:19:04 +0000262\begin{methoddesc}{logout}{}
263 Shutdown connection to server. Returns server \samp{BYE} response.
264\end{methoddesc}
265
Fred Drakee5cf53a1998-04-11 05:02:45 +0000266\begin{methoddesc}{lsub}{\optional{directory\optional{, pattern}}}
267 List subscribed mailbox names in directory matching pattern.
268 \var{directory} defaults to the top level directory and
269 \var{pattern} defaults to match any mailbox.
270 Returned data are tuples of message part envelope and data.
Fred Drake89de3141998-04-11 04:19:04 +0000271\end{methoddesc}
272
Martin v. Löwis479b7a72004-07-30 16:09:19 +0000273\begin{methoddesc}{myrights}{mailbox}
Martin v. Löwis7b9190b2004-07-27 05:07:19 +0000274 Show my ACLs for a mailbox (i.e. the rights that I have on mailbox).
Neal Norwitzbee41742004-07-28 02:34:12 +0000275\versionadded{2.4}
Martin v. Löwis7b9190b2004-07-27 05:07:19 +0000276\end{methoddesc}
277
Piers Lauder8bc81fc2004-05-20 12:12:58 +0000278\begin{methoddesc}{namespace}{}
279 Returns IMAP namespaces as defined in RFC2342.
280\versionadded{2.3}
281\end{methoddesc}
282
Guido van Rossum5f7a28c1999-12-13 23:29:39 +0000283\begin{methoddesc}{noop}{}
Fred Draked16b5ab1999-12-13 23:34:42 +0000284 Send \samp{NOOP} to server.
Guido van Rossum5f7a28c1999-12-13 23:29:39 +0000285\end{methoddesc}
286
287\begin{methoddesc}{open}{host, port}
288 Opens socket to \var{port} at \var{host}.
Piers Laudera3a16682001-07-20 11:04:19 +0000289 The connection objects established by this method
Fred Drake63a5d0b2004-07-30 19:12:38 +0000290 will be used in the \code{read}, \code{readline}, \code{send}, and
291 \code{shutdown} methods.
Guido van Rossum5f7a28c1999-12-13 23:29:39 +0000292 You may override this method.
293\end{methoddesc}
294
295\begin{methoddesc}{partial}{message_num, message_part, start, length}
296 Fetch truncated part of a message.
297 Returned data is a tuple of message part envelope and data.
298\end{methoddesc}
299
Piers Lauderd3c821e2002-11-22 05:47:39 +0000300\begin{methoddesc}{proxyauth}{user}
301 Assume authentication as \var{user}.
302 Allows an authorised administrator to proxy into any user's mailbox.
Neal Norwitze1497982003-01-02 15:32:00 +0000303\versionadded{2.3}
Piers Lauderd3c821e2002-11-22 05:47:39 +0000304\end{methoddesc}
305
Piers Laudera3a16682001-07-20 11:04:19 +0000306\begin{methoddesc}{read}{size}
307 Reads \var{size} bytes from the remote server.
308 You may override this method.
309\end{methoddesc}
310
311\begin{methoddesc}{readline}{}
312 Reads one line from the remote server.
313 You may override this method.
314\end{methoddesc}
315
Fred Drake89de3141998-04-11 04:19:04 +0000316\begin{methoddesc}{recent}{}
317 Prompt server for an update. Returned data is \code{None} if no new
318 messages, else value of \samp{RECENT} response.
319\end{methoddesc}
320
321\begin{methoddesc}{rename}{oldmailbox, newmailbox}
322 Rename mailbox named \var{oldmailbox} to \var{newmailbox}.
323\end{methoddesc}
324
325\begin{methoddesc}{response}{code}
326 Return data for response \var{code} if received, or
327 \code{None}. Returns the given code, instead of the usual type.
328\end{methoddesc}
329
Martin v. Löwis3ae0f7a2003-03-27 16:59:38 +0000330\begin{methoddesc}{search}{charset, criterion\optional{, ...}}
Neal Norwitz02cfa0b2005-09-23 04:26:24 +0000331 Search mailbox for matching messages. \var{charset} may be
Fred Drake99d707a2000-05-26 04:08:37 +0000332 \code{None}, in which case no \samp{CHARSET} will be specified in the
333 request to the server. The IMAP protocol requires that at least one
Martin v. Löwis3ae0f7a2003-03-27 16:59:38 +0000334 criterion be specified; an exception will be raised when the server
Fred Drake99d707a2000-05-26 04:08:37 +0000335 returns an error.
336
337 Example:
338
339\begin{verbatim}
340# M is a connected IMAP4 instance...
Neal Norwitz02cfa0b2005-09-23 04:26:24 +0000341typ, msgnums = M.search(None, 'FROM', '"LDJ"')
Fred Drake99d707a2000-05-26 04:08:37 +0000342
343# or:
Neal Norwitz02cfa0b2005-09-23 04:26:24 +0000344typ, msgnums = M.search(None, '(FROM "LDJ")')
Fred Drake99d707a2000-05-26 04:08:37 +0000345\end{verbatim}
Fred Drake89de3141998-04-11 04:19:04 +0000346\end{methoddesc}
347
348\begin{methoddesc}{select}{\optional{mailbox\optional{, readonly}}}
349 Select a mailbox. Returned data is the count of messages in
350 \var{mailbox} (\samp{EXISTS} response). The default \var{mailbox}
351 is \code{'INBOX'}. If the \var{readonly} flag is set, modifications
352 to the mailbox are not allowed.
353\end{methoddesc}
354
Piers Lauder3fca2912002-06-17 07:07:20 +0000355\begin{methoddesc}{send}{data}
356 Sends \code{data} to the remote server.
357 You may override this method.
358\end{methoddesc}
359
Piers Laudera3a16682001-07-20 11:04:19 +0000360\begin{methoddesc}{setacl}{mailbox, who, what}
361 Set an \samp{ACL} for \var{mailbox}.
362 The method is non-standard, but is supported by the \samp{Cyrus} server.
363\end{methoddesc}
364
Piers Lauderd80ef022005-06-01 23:50:52 +0000365\begin{methoddesc}{setannotation}{mailbox, entry, attribute\optional{, ...}}
366 Set \samp{ANNOTATION}s for \var{mailbox}.
367 The method is non-standard, but is supported by the \samp{Cyrus} server.
Neal Norwitz05110aa2006-02-07 07:23:26 +0000368\versionadded{2.5}
Piers Lauderd80ef022005-06-01 23:50:52 +0000369\end{methoddesc}
370
Piers Lauder3fca2912002-06-17 07:07:20 +0000371\begin{methoddesc}{setquota}{root, limits}
372 Set the \samp{quota} \var{root}'s resource \var{limits}.
373 This method is part of the IMAP4 QUOTA extension defined in rfc2087.
Neal Norwitz1cfcafc2002-07-20 00:46:12 +0000374\versionadded{2.3}
Piers Lauder3fca2912002-06-17 07:07:20 +0000375\end{methoddesc}
376
Piers Laudera3a16682001-07-20 11:04:19 +0000377\begin{methoddesc}{shutdown}{}
378 Close connection established in \code{open}.
379 You may override this method.
380\end{methoddesc}
381
Guido van Rossum5f7a28c1999-12-13 23:29:39 +0000382\begin{methoddesc}{socket}{}
Piers Laudera3a16682001-07-20 11:04:19 +0000383 Returns socket instance used to connect to server.
384\end{methoddesc}
385
Martin v. Löwis3ae0f7a2003-03-27 16:59:38 +0000386\begin{methoddesc}{sort}{sort_criteria, charset, search_criterion\optional{, ...}}
Fred Drake63a5d0b2004-07-30 19:12:38 +0000387 The \code{sort} command is a variant of \code{search} with sorting
388 semantics for the results. Returned data contains a space separated
389 list of matching message numbers.
Piers Laudera3a16682001-07-20 11:04:19 +0000390
Martin v. Löwis3ae0f7a2003-03-27 16:59:38 +0000391 Sort has two arguments before the \var{search_criterion}
Fred Drake63a5d0b2004-07-30 19:12:38 +0000392 argument(s); a parenthesized list of \var{sort_criteria}, and the
393 searching \var{charset}. Note that unlike \code{search}, the
394 searching \var{charset} argument is mandatory. There is also a
395 \code{uid sort} command which corresponds to \code{sort} the way
396 that \code{uid search} corresponds to \code{search}. The
397 \code{sort} command first searches the mailbox for messages that
Piers Laudera3a16682001-07-20 11:04:19 +0000398 match the given searching criteria using the charset argument for
399 the interpretation of strings in the searching criteria. It then
400 returns the numbers of matching messages.
401
402 This is an \samp{IMAP4rev1} extension command.
Guido van Rossum5f7a28c1999-12-13 23:29:39 +0000403\end{methoddesc}
404
Fred Drake89de3141998-04-11 04:19:04 +0000405\begin{methoddesc}{status}{mailbox, names}
406 Request named status conditions for \var{mailbox}.
407\end{methoddesc}
408
409\begin{methoddesc}{store}{message_set, command, flag_list}
Fred Drake5e37d792005-01-19 04:44:07 +0000410 Alters flag dispositions for messages in mailbox. \var{command} is
411 specified by section 6.4.6 of \rfc{2060} as being one of "FLAGS", "+FLAGS",
412 or "-FLAGS", optionally with a suffix of ".SILENT".
413
414 For example, to set the delete flag on all messages:
415
416\begin{verbatim}
417typ, data = M.search(None, 'ALL')
418for num in data[0].split():
419 M.store(num, '+FLAGS', '\\Deleted')
420M.expunge()
421\end{verbatim}
Fred Drake89de3141998-04-11 04:19:04 +0000422\end{methoddesc}
423
424\begin{methoddesc}{subscribe}{mailbox}
425 Subscribe to new mailbox.
426\end{methoddesc}
427
Fred Drake63a5d0b2004-07-30 19:12:38 +0000428\begin{methoddesc}{thread}{threading_algorithm, charset,
429 search_criterion\optional{, ...}}
430 The \code{thread} command is a variant of \code{search} with
431 threading semantics for the results. Returned data contains a space
Martin v. Löwisd8921372003-11-10 06:44:44 +0000432 separated list of thread members.
433
Fred Drake63a5d0b2004-07-30 19:12:38 +0000434 Thread members consist of zero or more messages numbers, delimited
435 by spaces, indicating successive parent and child.
Martin v. Löwisd8921372003-11-10 06:44:44 +0000436
437 Thread has two arguments before the \var{search_criterion}
Fred Drake63a5d0b2004-07-30 19:12:38 +0000438 argument(s); a \var{threading_algorithm}, and the searching
439 \var{charset}. Note that unlike \code{search}, the searching
440 \var{charset} argument is mandatory. There is also a \code{uid
441 thread} command which corresponds to \code{thread} the way that
442 \code{uid search} corresponds to \code{search}. The \code{thread}
443 command first searches the mailbox for messages that match the given
444 searching criteria using the charset argument for the interpretation
Raymond Hettinger68804312005-01-01 00:28:46 +0000445 of strings in the searching criteria. It then returns the matching
Fred Drake63a5d0b2004-07-30 19:12:38 +0000446 messages threaded according to the specified threading algorithm.
Martin v. Löwisd8921372003-11-10 06:44:44 +0000447
448 This is an \samp{IMAP4rev1} extension command. \versionadded{2.4}
449\end{methoddesc}
450
Fred Drake99d707a2000-05-26 04:08:37 +0000451\begin{methoddesc}{uid}{command, arg\optional{, ...}}
Fred Drake89de3141998-04-11 04:19:04 +0000452 Execute command args with messages identified by UID, rather than
Fred Drake99d707a2000-05-26 04:08:37 +0000453 message number. Returns response appropriate to command. At least
454 one argument must be supplied; if none are provided, the server will
455 return an error and an exception will be raised.
Fred Drake89de3141998-04-11 04:19:04 +0000456\end{methoddesc}
457
458\begin{methoddesc}{unsubscribe}{mailbox}
459 Unsubscribe from old mailbox.
460\end{methoddesc}
461
Fred Drake99d707a2000-05-26 04:08:37 +0000462\begin{methoddesc}{xatom}{name\optional{, arg\optional{, ...}}}
Fred Drake89de3141998-04-11 04:19:04 +0000463 Allow simple extension commands notified by server in
464 \samp{CAPABILITY} response.
465\end{methoddesc}
466
467
Piers Laudera4f83132002-03-08 01:53:24 +0000468Instances of \class{IMAP4_SSL} have just one additional method:
469
470\begin{methoddesc}{ssl}{}
471 Returns SSLObject instance used for the secure connection with the server.
472\end{methoddesc}
473
474
Fred Drake8f6b9581998-04-11 15:11:55 +0000475The following attributes are defined on instances of \class{IMAP4}:
Fred Drake89de3141998-04-11 04:19:04 +0000476
Fred Drake8f6b9581998-04-11 15:11:55 +0000477
478\begin{memberdesc}{PROTOCOL_VERSION}
Fred Drakeb7745501999-04-22 16:46:18 +0000479The most recent supported protocol in the
480\samp{CAPABILITY} response from the server.
Fred Drake8f6b9581998-04-11 15:11:55 +0000481\end{memberdesc}
482
483\begin{memberdesc}{debug}
484Integer value to control debugging output. The initialize value is
485taken from the module variable \code{Debug}. Values greater than
486three trace each command.
487\end{memberdesc}
Fred Drake89de3141998-04-11 04:19:04 +0000488
489
Fred Drake363d67c1999-07-07 13:42:56 +0000490\subsection{IMAP4 Example \label{imap4-example}}
Fred Drake89de3141998-04-11 04:19:04 +0000491
492Here is a minimal example (without error checking) that opens a
493mailbox and retrieves and prints all messages:
494
495\begin{verbatim}
Piers Laudera3a16682001-07-20 11:04:19 +0000496import getpass, imaplib
Fred Drake363d67c1999-07-07 13:42:56 +0000497
Fred Drake89de3141998-04-11 04:19:04 +0000498M = imaplib.IMAP4()
Fred Drake363d67c1999-07-07 13:42:56 +0000499M.login(getpass.getuser(), getpass.getpass())
500M.select()
501typ, data = M.search(None, 'ALL')
Piers Laudera3a16682001-07-20 11:04:19 +0000502for num in data[0].split():
Fred Drake363d67c1999-07-07 13:42:56 +0000503 typ, data = M.fetch(num, '(RFC822)')
Fred Drake89de3141998-04-11 04:19:04 +0000504 print 'Message %s\n%s\n' % (num, data[0][1])
Fred Drake5e37d792005-01-19 04:44:07 +0000505M.close()
Fred Drake363d67c1999-07-07 13:42:56 +0000506M.logout()
Fred Drake89de3141998-04-11 04:19:04 +0000507\end{verbatim}