source: vendor/python/2.5/Doc/lib/libimaplib.tex

Last change on this file was 3225, checked in by bird, 18 years ago

Python 2.5

File size: 17.9 KB
Line 
1\section{\module{imaplib} ---
2 IMAP4 protocol client}
3
4\declaremodule{standard}{imaplib}
5\modulesynopsis{IMAP4 protocol client (requires sockets).}
6\moduleauthor{Piers Lauder}{piers@communitysolutions.com.au}
7\sectionauthor{Piers Lauder}{piers@communitysolutions.com.au}
8
9% Based on HTML documentation by Piers Lauder
10% <piers@communitysolutions.com.au>;
11% converted by Fred L. Drake, Jr. <fdrake@acm.org>.
12% Revised by ESR, January 2000.
13% Changes for IMAP4_SSL by Tino Lange <Tino.Lange@isg.de>, March 2002
14% Changes for IMAP4_stream by Piers Lauder
15% <piers@communitysolutions.com.au>, November 2002
16
17\indexii{IMAP4}{protocol}
18\indexii{IMAP4_SSL}{protocol}
19\indexii{IMAP4_stream}{protocol}
20
21This module defines three classes, \class{IMAP4}, \class{IMAP4_SSL}
22and \class{IMAP4_stream}, which encapsulate a
23connection to an IMAP4 server and implement a large subset of the
24IMAP4rev1 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.
27
28Three classes are provided by the \module{imaplib} module,
29\class{IMAP4} is the base class:
30
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
39Three exceptions are defined as attributes of the \class{IMAP4} class:
40
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
53\begin{excdesc}{IMAP4.readonly}
54This 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.
59\end{excdesc}
60
61There's also a subclass for secure connections:
62
63\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.
72\end{classdesc}
73
74The 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
78to the \code{stdin/stdout} file descriptors created by passing
79\var{command} to \code{os.popen2()}.
80\versionadded{2.3}
81\end{classdesc}
82
83The following utility functions are defined:
84
85\begin{funcdesc}{Internaldate2tuple}{datestr}
86 Converts an IMAP4 INTERNALDATE string to Coordinated Universal
87 Time. Returns a \refmodule{time} module tuple.
88\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}
101 Converts a \refmodule{time} module tuple to an IMAP4
102 \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
107Note 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.
111
112At the end of the module, there is a test section that contains a more
113extensive example of usage.
114
115\begin{seealso}
116 \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/}).}
120\end{seealso}
121
122
123\subsection{IMAP4 Objects \label{imap4-objects}}
124
125All IMAP4rev1 commands are represented by methods of the same name,
126either upper-case or lower-case.
127
128All arguments to commands are converted to strings, except for
129\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.
134If 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)'}).
137
138Each command returns a tuple: \code{(\var{type}, [\var{data},
139...])} where \var{type} is usually \code{'OK'} or \code{'NO'},
140and \var{data} is either the text from the command response, or
141mandated 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).
145
146The \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
153An \class{IMAP4} instance has the following methods:
154
155
156\begin{methoddesc}{append}{mailbox, flags, date_time, message}
157 Append \var{message} to named mailbox.
158\end{methoddesc}
159
160\begin{methoddesc}{authenticate}{mechanism, authobject}
161 Authenticate command --- requires response processing.
162
163 \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}.
166
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.
177\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
201\begin{methoddesc}{deleteacl}{mailbox, who}
202 Delete the ACLs (remove any rights) set for who on mailbox.
203\versionadded{2.4}
204\end{methoddesc}
205
206\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}
214 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.
218\end{methoddesc}
219
220\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
225\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.
228\versionadded{2.5}
229\end{methoddesc}
230
231\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.
234\versionadded{2.3}
235\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.
240\versionadded{2.3}
241\end{methoddesc}
242
243\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.
248\end{methoddesc}
249
250\begin{methoddesc}{login}{user, password}
251 Identify the client using a plaintext password.
252 The \var{password} will be quoted.
253\end{methoddesc}
254
255\begin{methoddesc}{login_cram_md5}{user, password}
256 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}.
259\versionadded{2.3}
260\end{methoddesc}
261
262\begin{methoddesc}{logout}{}
263 Shutdown connection to server. Returns server \samp{BYE} response.
264\end{methoddesc}
265
266\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.
271\end{methoddesc}
272
273\begin{methoddesc}{myrights}{mailbox}
274 Show my ACLs for a mailbox (i.e. the rights that I have on mailbox).
275\versionadded{2.4}
276\end{methoddesc}
277
278\begin{methoddesc}{namespace}{}
279 Returns IMAP namespaces as defined in RFC2342.
280\versionadded{2.3}
281\end{methoddesc}
282
283\begin{methoddesc}{noop}{}
284 Send \samp{NOOP} to server.
285\end{methoddesc}
286
287\begin{methoddesc}{open}{host, port}
288 Opens socket to \var{port} at \var{host}.
289 The connection objects established by this method
290 will be used in the \code{read}, \code{readline}, \code{send}, and
291 \code{shutdown} methods.
292 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
300\begin{methoddesc}{proxyauth}{user}
301 Assume authentication as \var{user}.
302 Allows an authorised administrator to proxy into any user's mailbox.
303\versionadded{2.3}
304\end{methoddesc}
305
306\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
316\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
330\begin{methoddesc}{search}{charset, criterion\optional{, ...}}
331 Search mailbox for matching messages. \var{charset} may be
332 \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
334 criterion be specified; an exception will be raised when the server
335 returns an error.
336
337 Example:
338
339\begin{verbatim}
340# M is a connected IMAP4 instance...
341typ, msgnums = M.search(None, 'FROM', '"LDJ"')
342
343# or:
344typ, msgnums = M.search(None, '(FROM "LDJ")')
345\end{verbatim}
346\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
355\begin{methoddesc}{send}{data}
356 Sends \code{data} to the remote server.
357 You may override this method.
358\end{methoddesc}
359
360\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
365\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.
368\versionadded{2.5}
369\end{methoddesc}
370
371\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.
374\versionadded{2.3}
375\end{methoddesc}
376
377\begin{methoddesc}{shutdown}{}
378 Close connection established in \code{open}.
379 You may override this method.
380\end{methoddesc}
381
382\begin{methoddesc}{socket}{}
383 Returns socket instance used to connect to server.
384\end{methoddesc}
385
386\begin{methoddesc}{sort}{sort_criteria, charset, search_criterion\optional{, ...}}
387 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.
390
391 Sort has two arguments before the \var{search_criterion}
392 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
398 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.
403\end{methoddesc}
404
405\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}
410 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}
422\end{methoddesc}
423
424\begin{methoddesc}{subscribe}{mailbox}
425 Subscribe to new mailbox.
426\end{methoddesc}
427
428\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
432 separated list of thread members.
433
434 Thread members consist of zero or more messages numbers, delimited
435 by spaces, indicating successive parent and child.
436
437 Thread has two arguments before the \var{search_criterion}
438 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
445 of strings in the searching criteria. It then returns the matching
446 messages threaded according to the specified threading algorithm.
447
448 This is an \samp{IMAP4rev1} extension command. \versionadded{2.4}
449\end{methoddesc}
450
451\begin{methoddesc}{uid}{command, arg\optional{, ...}}
452 Execute command args with messages identified by UID, rather than
453 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.
456\end{methoddesc}
457
458\begin{methoddesc}{unsubscribe}{mailbox}
459 Unsubscribe from old mailbox.
460\end{methoddesc}
461
462\begin{methoddesc}{xatom}{name\optional{, arg\optional{, ...}}}
463 Allow simple extension commands notified by server in
464 \samp{CAPABILITY} response.
465\end{methoddesc}
466
467
468Instances 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
475The following attributes are defined on instances of \class{IMAP4}:
476
477
478\begin{memberdesc}{PROTOCOL_VERSION}
479The most recent supported protocol in the
480\samp{CAPABILITY} response from the server.
481\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}
488
489
490\subsection{IMAP4 Example \label{imap4-example}}
491
492Here is a minimal example (without error checking) that opens a
493mailbox and retrieves and prints all messages:
494
495\begin{verbatim}
496import getpass, imaplib
497
498M = imaplib.IMAP4()
499M.login(getpass.getuser(), getpass.getpass())
500M.select()
501typ, data = M.search(None, 'ALL')
502for num in data[0].split():
503 typ, data = M.fetch(num, '(RFC822)')
504 print 'Message %s\n%s\n' % (num, data[0][1])
505M.close()
506M.logout()
507\end{verbatim}
Note: See TracBrowser for help on using the repository browser.