| 
									
										
										
										
											1998-08-10 19:42:37 +00:00
										 |  |  | \section{\module{imaplib} --- | 
					
						
							| 
									
										
										
										
											1999-04-22 16:46:18 +00:00
										 |  |  |          IMAP4 protocol client} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-07-23 17:59:49 +00:00
										 |  |  | \declaremodule{standard}{imaplib} | 
					
						
							| 
									
										
										
										
											1999-04-22 16:46:18 +00:00
										 |  |  | \modulesynopsis{IMAP4 protocol client (requires sockets).} | 
					
						
							| 
									
										
										
										
											2002-11-22 05:47:39 +00:00
										 |  |  | \moduleauthor{Piers Lauder}{piers@communitysolutions.com.au} | 
					
						
							|  |  |  | \sectionauthor{Piers Lauder}{piers@communitysolutions.com.au} | 
					
						
							| 
									
										
										
										
											1998-07-23 17:59:49 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-07-30 19:12:38 +00:00
										 |  |  | % Based on HTML documentation by Piers Lauder
 | 
					
						
							|  |  |  | % <piers@communitysolutions.com.au>;
 | 
					
						
							| 
									
										
										
										
											2000-04-03 20:13:55 +00:00
										 |  |  | % converted by Fred L. Drake, Jr. <fdrake@acm.org>.
 | 
					
						
							| 
									
										
										
										
											2001-01-11 04:19:52 +00:00
										 |  |  | % Revised by ESR, January 2000.
 | 
					
						
							| 
									
										
										
										
											2002-03-08 01:53:24 +00:00
										 |  |  | % Changes for IMAP4_SSL by Tino Lange <Tino.Lange@isg.de>, March 2002 
 | 
					
						
							| 
									
										
										
										
											2004-07-30 19:12:38 +00:00
										 |  |  | % Changes for IMAP4_stream by Piers Lauder
 | 
					
						
							|  |  |  | % <piers@communitysolutions.com.au>, November 2002
 | 
					
						
							| 
									
										
										
										
											2000-04-03 20:13:55 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-04-11 05:02:45 +00:00
										 |  |  | \indexii{IMAP4}{protocol} | 
					
						
							| 
									
										
										
										
											2002-03-08 01:53:24 +00:00
										 |  |  | \indexii{IMAP4_SSL}{protocol} | 
					
						
							| 
									
										
										
										
											2002-11-22 05:47:39 +00:00
										 |  |  | \indexii{IMAP4_stream}{protocol} | 
					
						
							| 
									
										
										
										
											1998-04-11 04:19:04 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-07-30 19:12:38 +00:00
										 |  |  | This module defines three classes, \class{IMAP4}, \class{IMAP4_SSL} | 
					
						
							|  |  |  | and \class{IMAP4_stream}, which encapsulate a | 
					
						
							| 
									
										
										
										
											2002-03-08 01:53:24 +00:00
										 |  |  | connection to an IMAP4 server and implement a large subset of the | 
					
						
							| 
									
										
										
										
											2001-01-11 04:19:52 +00:00
										 |  |  | IMAP4rev1 client protocol as defined in \rfc{2060}. It is backward | 
					
						
							|  |  |  | compatible with IMAP4 (\rfc{1730}) servers, but note that the | 
					
						
							|  |  |  | \samp{STATUS} command is not supported in IMAP4. | 
					
						
							| 
									
										
										
										
											1998-04-11 04:19:04 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-07-30 19:12:38 +00:00
										 |  |  | Three classes are provided by the \module{imaplib} module, | 
					
						
							|  |  |  | \class{IMAP4} is the base class: | 
					
						
							| 
									
										
										
										
											1998-04-11 04:19:04 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | \begin{classdesc}{IMAP4}{\optional{host\optional{, port}}} | 
					
						
							|  |  |  | This class implements the actual IMAP4 protocol.  The connection is | 
					
						
							|  |  |  | created and protocol version (IMAP4 or IMAP4rev1) is determined when | 
					
						
							|  |  |  | the instance is initialized. | 
					
						
							|  |  |  | If \var{host} is not specified, \code{''} (the local host) is used. | 
					
						
							|  |  |  | If \var{port} is omitted, the standard IMAP4 port (143) is used. | 
					
						
							|  |  |  | \end{classdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-11-22 05:47:39 +00:00
										 |  |  | Three exceptions are defined as attributes of the \class{IMAP4} class: | 
					
						
							| 
									
										
										
										
											1998-04-11 04:19:04 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | \begin{excdesc}{IMAP4.error} | 
					
						
							|  |  |  | Exception raised on any errors.  The reason for the exception is | 
					
						
							|  |  |  | passed to the constructor as a string. | 
					
						
							|  |  |  | \end{excdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{excdesc}{IMAP4.abort} | 
					
						
							|  |  |  | IMAP4 server errors cause this exception to be raised.  This is a | 
					
						
							|  |  |  | sub-class of \exception{IMAP4.error}.  Note that closing the instance | 
					
						
							|  |  |  | and instantiating a new one will usually allow recovery from this | 
					
						
							|  |  |  | exception. | 
					
						
							|  |  |  | \end{excdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-12-13 23:29:39 +00:00
										 |  |  | \begin{excdesc}{IMAP4.readonly} | 
					
						
							| 
									
										
										
										
											2004-07-30 19:12:38 +00:00
										 |  |  | This exception is raised when a writable mailbox has its status | 
					
						
							|  |  |  | changed by the server.  This is a sub-class of | 
					
						
							|  |  |  | \exception{IMAP4.error}.  Some other client now has write permission, | 
					
						
							|  |  |  | and the mailbox will need to be re-opened to re-obtain write | 
					
						
							|  |  |  | permission. | 
					
						
							| 
									
										
										
										
											1999-12-13 23:29:39 +00:00
										 |  |  | \end{excdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-03-08 01:53:24 +00:00
										 |  |  | There's also a subclass for secure connections: | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-07-30 19:12:38 +00:00
										 |  |  | \begin{classdesc}{IMAP4_SSL}{\optional{host\optional{, port\optional{, | 
					
						
							|  |  |  |                              keyfile\optional{, certfile}}}}} | 
					
						
							|  |  |  | This is a subclass derived from \class{IMAP4} that connects over an | 
					
						
							|  |  |  | SSL encrypted socket (to use this class you need a socket module that | 
					
						
							|  |  |  | was compiled with SSL support).  If \var{host} is not specified, | 
					
						
							|  |  |  | \code{''} (the local host) is used.  If \var{port} is omitted, the | 
					
						
							|  |  |  | standard IMAP4-over-SSL port (993) is used.  \var{keyfile} and | 
					
						
							|  |  |  | \var{certfile} are also optional - they can contain a PEM formatted | 
					
						
							|  |  |  | private key and certificate chain file for the SSL connection. | 
					
						
							| 
									
										
										
										
											2002-03-08 01:53:24 +00:00
										 |  |  | \end{classdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-11-22 05:47:39 +00:00
										 |  |  | The second subclass allows for connections created by a child process: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{classdesc}{IMAP4_stream}{command} | 
					
						
							|  |  |  | This is a subclass derived from \class{IMAP4} that connects | 
					
						
							| 
									
										
										
										
											2004-07-30 19:12:38 +00:00
										 |  |  | to the \code{stdin/stdout} file descriptors created by passing | 
					
						
							|  |  |  | \var{command} to \code{os.popen2()}. | 
					
						
							| 
									
										
										
										
											2003-01-02 15:32:00 +00:00
										 |  |  | \versionadded{2.3} | 
					
						
							| 
									
										
										
										
											2002-11-22 05:47:39 +00:00
										 |  |  | \end{classdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-04-11 04:19:04 +00:00
										 |  |  | The following utility functions are defined: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{funcdesc}{Internaldate2tuple}{datestr} | 
					
						
							|  |  |  |   Converts an IMAP4 INTERNALDATE string to Coordinated Universal | 
					
						
							| 
									
										
										
										
											1999-04-22 16:46:18 +00:00
										 |  |  |   Time. Returns a \refmodule{time} module tuple. | 
					
						
							| 
									
										
										
										
											1998-04-11 04:19:04 +00:00
										 |  |  | \end{funcdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{funcdesc}{Int2AP}{num} | 
					
						
							|  |  |  |   Converts an integer into a string representation using characters | 
					
						
							|  |  |  |   from the set [\code{A} .. \code{P}]. | 
					
						
							|  |  |  | \end{funcdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{funcdesc}{ParseFlags}{flagstr} | 
					
						
							|  |  |  |   Converts an IMAP4 \samp{FLAGS} response to a tuple of individual | 
					
						
							|  |  |  |   flags. | 
					
						
							|  |  |  | \end{funcdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{funcdesc}{Time2Internaldate}{date_time} | 
					
						
							| 
									
										
										
										
											1999-04-22 16:46:18 +00:00
										 |  |  |   Converts a \refmodule{time} module tuple to an IMAP4 | 
					
						
							| 
									
										
										
										
											1998-04-11 04:19:04 +00:00
										 |  |  |   \samp{INTERNALDATE} representation.  Returns a string in the form: | 
					
						
							|  |  |  |   \code{"DD-Mmm-YYYY HH:MM:SS +HHMM"} (including double-quotes). | 
					
						
							|  |  |  | \end{funcdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-01-11 04:19:52 +00:00
										 |  |  | Note that IMAP4 message numbers change as the mailbox changes; in | 
					
						
							|  |  |  | particular, after an \samp{EXPUNGE} command performs deletions the | 
					
						
							|  |  |  | remaining messages are renumbered. So it is highly advisable to use | 
					
						
							|  |  |  | UIDs instead, with the UID command. | 
					
						
							| 
									
										
										
										
											1999-07-07 13:42:56 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | At the end of the module, there is a test section that contains a more | 
					
						
							|  |  |  | extensive example of usage. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{seealso} | 
					
						
							| 
									
										
										
										
											1999-11-10 16:21:37 +00:00
										 |  |  |   \seetext{Documents describing the protocol, and sources and binaries  | 
					
						
							|  |  |  |            for servers implementing it, can all be found at the | 
					
						
							|  |  |  |            University of Washington's \emph{IMAP Information Center} | 
					
						
							|  |  |  |            (\url{http://www.cac.washington.edu/imap/}).} | 
					
						
							| 
									
										
										
										
											1999-07-07 13:42:56 +00:00
										 |  |  | \end{seealso} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \subsection{IMAP4 Objects \label{imap4-objects}} | 
					
						
							| 
									
										
										
										
											1998-04-11 04:19:04 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | All IMAP4rev1 commands are represented by methods of the same name, | 
					
						
							|  |  |  | either upper-case or lower-case. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-12-13 23:29:39 +00:00
										 |  |  | All arguments to commands are converted to strings, except for | 
					
						
							| 
									
										
										
										
											1999-12-13 23:34:42 +00:00
										 |  |  | \samp{AUTHENTICATE}, and the last argument to \samp{APPEND} which is | 
					
						
							|  |  |  | passed as an IMAP4 literal.  If necessary (the string contains IMAP4 | 
					
						
							|  |  |  | protocol-sensitive characters and isn't enclosed with either | 
					
						
							|  |  |  | parentheses or double quotes) each string is quoted. However, the | 
					
						
							|  |  |  | \var{password} argument to the \samp{LOGIN} command is always quoted. | 
					
						
							| 
									
										
										
										
											2000-05-26 04:08:37 +00:00
										 |  |  | If you want to avoid having an argument string quoted | 
					
						
							|  |  |  | (eg: the \var{flags} argument to \samp{STORE}) then enclose the string in | 
					
						
							|  |  |  | parentheses (eg: \code{r'(\e Deleted)'}). | 
					
						
							| 
									
										
										
										
											1999-12-13 23:29:39 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-04-22 16:46:18 +00:00
										 |  |  | Each command returns a tuple: \code{(\var{type}, [\var{data}, | 
					
						
							|  |  |  | ...])} where \var{type} is usually \code{'OK'} or \code{'NO'}, | 
					
						
							| 
									
										
										
										
											1998-04-11 04:19:04 +00:00
										 |  |  | and \var{data} is either the text from the command response, or | 
					
						
							| 
									
										
										
										
											2002-11-22 05:47:39 +00:00
										 |  |  | mandated results from the command. Each \var{data} | 
					
						
							|  |  |  | is either a string, or a tuple. If a tuple, then the first part | 
					
						
							|  |  |  | is the header of the response, and the second part contains | 
					
						
							|  |  |  | the data (ie: 'literal' value). | 
					
						
							| 
									
										
										
										
											1998-04-11 04:19:04 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-01-19 04:44:07 +00:00
										 |  |  | The \var{message_set} options to commands below is a string specifying one | 
					
						
							|  |  |  | or more messages to be acted upon.  It may be a simple message number | 
					
						
							|  |  |  | (\code{'1'}), a range of message numbers (\code{'2:4'}), or a group of | 
					
						
							|  |  |  | non-contiguous ranges separated by commas (\code{'1:3,6:9'}).  A range | 
					
						
							|  |  |  | can contain an asterisk to indicate an infinite upper bound | 
					
						
							|  |  |  | (\code{'3:*'}). | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-04-11 04:19:04 +00:00
										 |  |  | An \class{IMAP4} instance has the following methods: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{methoddesc}{append}{mailbox, flags, date_time, message} | 
					
						
							| 
									
										
										
										
											2004-05-20 12:12:58 +00:00
										 |  |  |   Append \var{message} to named mailbox.  | 
					
						
							| 
									
										
										
										
											1998-04-11 04:19:04 +00:00
										 |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-05-20 12:12:58 +00:00
										 |  |  | \begin{methoddesc}{authenticate}{mechanism, authobject} | 
					
						
							|  |  |  |   Authenticate command --- requires response processing. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-07-30 19:12:38 +00:00
										 |  |  |   \var{mechanism} specifies which authentication mechanism is to be | 
					
						
							|  |  |  |   used - it should appear in the instance variable \code{capabilities} | 
					
						
							|  |  |  |   in the form \code{AUTH=mechanism}. | 
					
						
							| 
									
										
										
										
											2004-05-20 12:12:58 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |   \var{authobject} must be a callable object: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{verbatim} | 
					
						
							|  |  |  | data = authobject(response) | 
					
						
							|  |  |  | \end{verbatim} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   It will be called to process server continuation responses. | 
					
						
							|  |  |  |   It should return \code{data} that will be encoded and sent to server. | 
					
						
							|  |  |  |   It should return \code{None} if the client abort response \samp{*} should | 
					
						
							|  |  |  |   be sent instead. | 
					
						
							| 
									
										
										
										
											1998-04-11 04:19:04 +00:00
										 |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{methoddesc}{check}{} | 
					
						
							|  |  |  |   Checkpoint mailbox on server.  | 
					
						
							|  |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{methoddesc}{close}{} | 
					
						
							|  |  |  |   Close currently selected mailbox. Deleted messages are removed from | 
					
						
							|  |  |  |   writable mailbox. This is the recommended command before | 
					
						
							|  |  |  |   \samp{LOGOUT}. | 
					
						
							|  |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{methoddesc}{copy}{message_set, new_mailbox} | 
					
						
							|  |  |  |   Copy \var{message_set} messages onto end of \var{new_mailbox}.  | 
					
						
							|  |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{methoddesc}{create}{mailbox} | 
					
						
							|  |  |  |   Create new mailbox named \var{mailbox}. | 
					
						
							|  |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{methoddesc}{delete}{mailbox} | 
					
						
							|  |  |  |   Delete old mailbox named \var{mailbox}. | 
					
						
							|  |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-07-27 05:07:19 +00:00
										 |  |  | \begin{methoddesc}{deleteacl}{mailbox, who} | 
					
						
							|  |  |  |   Delete the ACLs (remove any rights) set for who on mailbox. | 
					
						
							| 
									
										
										
										
											2004-07-28 02:34:12 +00:00
										 |  |  | \versionadded{2.4} | 
					
						
							| 
									
										
										
										
											2004-07-27 05:07:19 +00:00
										 |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-04-11 04:19:04 +00:00
										 |  |  | \begin{methoddesc}{expunge}{} | 
					
						
							|  |  |  |   Permanently remove deleted items from selected mailbox. Generates an | 
					
						
							|  |  |  |   \samp{EXPUNGE} response for each deleted message. Returned data | 
					
						
							|  |  |  |   contains a list of \samp{EXPUNGE} message numbers in order | 
					
						
							|  |  |  |   received. | 
					
						
							|  |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{methoddesc}{fetch}{message_set, message_parts} | 
					
						
							| 
									
										
										
										
											2000-05-26 04:08:37 +00:00
										 |  |  |   Fetch (parts of) messages.  \var{message_parts} should be | 
					
						
							|  |  |  |   a string of message part names enclosed within parentheses, | 
					
						
							|  |  |  |   eg: \samp{"(UID BODY[TEXT])"}.  Returned data are tuples | 
					
						
							|  |  |  |   of message part envelope and data. | 
					
						
							| 
									
										
										
										
											1998-04-11 04:19:04 +00:00
										 |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-07-20 11:04:19 +00:00
										 |  |  | \begin{methoddesc}{getacl}{mailbox} | 
					
						
							|  |  |  |   Get the \samp{ACL}s for \var{mailbox}. | 
					
						
							|  |  |  |   The method is non-standard, but is supported by the \samp{Cyrus} server. | 
					
						
							|  |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-06-01 23:50:52 +00:00
										 |  |  | \begin{methoddesc}{getannotation}{mailbox, entry, attribute} | 
					
						
							|  |  |  |   Retrieve the specified \samp{ANNOTATION}s for \var{mailbox}. | 
					
						
							|  |  |  |   The method is non-standard, but is supported by the \samp{Cyrus} server. | 
					
						
							| 
									
										
										
										
											2006-02-07 07:23:26 +00:00
										 |  |  | \versionadded{2.5} | 
					
						
							| 
									
										
										
										
											2005-06-01 23:50:52 +00:00
										 |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-06-17 07:07:20 +00:00
										 |  |  | \begin{methoddesc}{getquota}{root} | 
					
						
							|  |  |  |   Get the \samp{quota} \var{root}'s resource usage and limits. | 
					
						
							|  |  |  |   This method is part of the IMAP4 QUOTA extension defined in rfc2087. | 
					
						
							| 
									
										
										
										
											2002-07-20 00:46:12 +00:00
										 |  |  | \versionadded{2.3} | 
					
						
							| 
									
										
										
										
											2002-06-17 07:07:20 +00:00
										 |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{methoddesc}{getquotaroot}{mailbox} | 
					
						
							|  |  |  |   Get the list of \samp{quota} \samp{roots} for the named \var{mailbox}. | 
					
						
							|  |  |  |   This method is part of the IMAP4 QUOTA extension defined in rfc2087. | 
					
						
							| 
									
										
										
										
											2002-07-20 00:46:12 +00:00
										 |  |  | \versionadded{2.3} | 
					
						
							| 
									
										
										
										
											2002-06-17 07:07:20 +00:00
										 |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-04-11 05:02:45 +00:00
										 |  |  | \begin{methoddesc}{list}{\optional{directory\optional{, pattern}}} | 
					
						
							|  |  |  |   List mailbox names in \var{directory} matching | 
					
						
							|  |  |  |   \var{pattern}.  \var{directory} defaults to the top-level mail | 
					
						
							|  |  |  |   folder, and \var{pattern} defaults to match anything.  Returned data | 
					
						
							|  |  |  |   contains a list of \samp{LIST} responses. | 
					
						
							| 
									
										
										
										
											1998-04-11 04:19:04 +00:00
										 |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{methoddesc}{login}{user, password} | 
					
						
							|  |  |  |   Identify the client using a plaintext password. | 
					
						
							| 
									
										
										
										
											1999-12-13 23:29:39 +00:00
										 |  |  |   The \var{password} will be quoted. | 
					
						
							| 
									
										
										
										
											1998-04-11 04:19:04 +00:00
										 |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-11-22 05:47:39 +00:00
										 |  |  | \begin{methoddesc}{login_cram_md5}{user, password} | 
					
						
							| 
									
										
										
										
											2004-07-30 19:12:38 +00:00
										 |  |  |   Force use of \samp{CRAM-MD5} authentication when identifying the | 
					
						
							|  |  |  |   client to protect the password.  Will only work if the server | 
					
						
							|  |  |  |   \samp{CAPABILITY} response includes the phrase \samp{AUTH=CRAM-MD5}. | 
					
						
							| 
									
										
										
										
											2003-01-02 15:32:00 +00:00
										 |  |  | \versionadded{2.3} | 
					
						
							| 
									
										
										
										
											2002-11-22 05:47:39 +00:00
										 |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-04-11 04:19:04 +00:00
										 |  |  | \begin{methoddesc}{logout}{} | 
					
						
							|  |  |  |   Shutdown connection to server. Returns server \samp{BYE} response. | 
					
						
							|  |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-04-11 05:02:45 +00:00
										 |  |  | \begin{methoddesc}{lsub}{\optional{directory\optional{, pattern}}} | 
					
						
							|  |  |  |   List subscribed mailbox names in directory matching pattern. | 
					
						
							|  |  |  |   \var{directory} defaults to the top level directory and | 
					
						
							|  |  |  |   \var{pattern} defaults to match any mailbox. | 
					
						
							|  |  |  |   Returned data are tuples of message part envelope and data. | 
					
						
							| 
									
										
										
										
											1998-04-11 04:19:04 +00:00
										 |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-07-30 16:09:19 +00:00
										 |  |  | \begin{methoddesc}{myrights}{mailbox} | 
					
						
							| 
									
										
										
										
											2004-07-27 05:07:19 +00:00
										 |  |  |   Show my ACLs for a mailbox (i.e. the rights that I have on mailbox). | 
					
						
							| 
									
										
										
										
											2004-07-28 02:34:12 +00:00
										 |  |  | \versionadded{2.4} | 
					
						
							| 
									
										
										
										
											2004-07-27 05:07:19 +00:00
										 |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-05-20 12:12:58 +00:00
										 |  |  | \begin{methoddesc}{namespace}{} | 
					
						
							|  |  |  |   Returns IMAP namespaces as defined in RFC2342. | 
					
						
							|  |  |  | \versionadded{2.3} | 
					
						
							|  |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-12-13 23:29:39 +00:00
										 |  |  | \begin{methoddesc}{noop}{} | 
					
						
							| 
									
										
										
										
											1999-12-13 23:34:42 +00:00
										 |  |  |   Send \samp{NOOP} to server. | 
					
						
							| 
									
										
										
										
											1999-12-13 23:29:39 +00:00
										 |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{methoddesc}{open}{host, port} | 
					
						
							|  |  |  |   Opens socket to \var{port} at \var{host}. | 
					
						
							| 
									
										
										
										
											2001-07-20 11:04:19 +00:00
										 |  |  |   The connection objects established by this method | 
					
						
							| 
									
										
										
										
											2004-07-30 19:12:38 +00:00
										 |  |  |   will be used in the \code{read}, \code{readline}, \code{send}, and | 
					
						
							|  |  |  |   \code{shutdown} methods. | 
					
						
							| 
									
										
										
										
											1999-12-13 23:29:39 +00:00
										 |  |  |   You may override this method. | 
					
						
							|  |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{methoddesc}{partial}{message_num, message_part, start, length} | 
					
						
							|  |  |  |   Fetch truncated part of a message. | 
					
						
							|  |  |  |   Returned data is a tuple of message part envelope and data. | 
					
						
							|  |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-11-22 05:47:39 +00:00
										 |  |  | \begin{methoddesc}{proxyauth}{user} | 
					
						
							|  |  |  |   Assume authentication as \var{user}. | 
					
						
							|  |  |  |   Allows an authorised administrator to proxy into any user's mailbox. | 
					
						
							| 
									
										
										
										
											2003-01-02 15:32:00 +00:00
										 |  |  | \versionadded{2.3} | 
					
						
							| 
									
										
										
										
											2002-11-22 05:47:39 +00:00
										 |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-07-20 11:04:19 +00:00
										 |  |  | \begin{methoddesc}{read}{size} | 
					
						
							|  |  |  |   Reads \var{size} bytes from the remote server. | 
					
						
							|  |  |  |   You may override this method. | 
					
						
							|  |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{methoddesc}{readline}{} | 
					
						
							|  |  |  |   Reads one line from the remote server. | 
					
						
							|  |  |  |   You may override this method. | 
					
						
							|  |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-04-11 04:19:04 +00:00
										 |  |  | \begin{methoddesc}{recent}{} | 
					
						
							|  |  |  |   Prompt server for an update. Returned data is \code{None} if no new | 
					
						
							|  |  |  |   messages, else value of \samp{RECENT} response. | 
					
						
							|  |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{methoddesc}{rename}{oldmailbox, newmailbox} | 
					
						
							|  |  |  |   Rename mailbox named \var{oldmailbox} to \var{newmailbox}. | 
					
						
							|  |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{methoddesc}{response}{code} | 
					
						
							|  |  |  |   Return data for response \var{code} if received, or | 
					
						
							|  |  |  |   \code{None}. Returns the given code, instead of the usual type. | 
					
						
							|  |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-03-27 16:59:38 +00:00
										 |  |  | \begin{methoddesc}{search}{charset, criterion\optional{, ...}} | 
					
						
							| 
									
										
										
										
											2005-09-23 04:26:24 +00:00
										 |  |  |   Search mailbox for matching messages.  \var{charset} may be | 
					
						
							| 
									
										
										
										
											2000-05-26 04:08:37 +00:00
										 |  |  |   \code{None}, in which case no \samp{CHARSET} will be specified in the | 
					
						
							|  |  |  |   request to the server.  The IMAP protocol requires that at least one | 
					
						
							| 
									
										
										
										
											2003-03-27 16:59:38 +00:00
										 |  |  |   criterion be specified; an exception will be raised when the server | 
					
						
							| 
									
										
										
										
											2000-05-26 04:08:37 +00:00
										 |  |  |   returns an error. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   Example: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{verbatim} | 
					
						
							|  |  |  | # M is a connected IMAP4 instance... | 
					
						
							| 
									
										
										
										
											2005-09-23 04:26:24 +00:00
										 |  |  | typ, msgnums = M.search(None, 'FROM', '"LDJ"') | 
					
						
							| 
									
										
										
										
											2000-05-26 04:08:37 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | # or: | 
					
						
							| 
									
										
										
										
											2005-09-23 04:26:24 +00:00
										 |  |  | typ, msgnums = M.search(None, '(FROM "LDJ")') | 
					
						
							| 
									
										
										
										
											2000-05-26 04:08:37 +00:00
										 |  |  | \end{verbatim} | 
					
						
							| 
									
										
										
										
											1998-04-11 04:19:04 +00:00
										 |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{methoddesc}{select}{\optional{mailbox\optional{, readonly}}} | 
					
						
							|  |  |  |   Select a mailbox. Returned data is the count of messages in | 
					
						
							|  |  |  |   \var{mailbox} (\samp{EXISTS} response).  The default \var{mailbox} | 
					
						
							|  |  |  |   is \code{'INBOX'}.  If the \var{readonly} flag is set, modifications | 
					
						
							|  |  |  |   to the mailbox are not allowed. | 
					
						
							|  |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-06-17 07:07:20 +00:00
										 |  |  | \begin{methoddesc}{send}{data} | 
					
						
							|  |  |  |   Sends \code{data} to the remote server. | 
					
						
							|  |  |  |   You may override this method. | 
					
						
							|  |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-07-20 11:04:19 +00:00
										 |  |  | \begin{methoddesc}{setacl}{mailbox, who, what} | 
					
						
							|  |  |  |   Set an \samp{ACL} for \var{mailbox}. | 
					
						
							|  |  |  |   The method is non-standard, but is supported by the \samp{Cyrus} server. | 
					
						
							|  |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-06-01 23:50:52 +00:00
										 |  |  | \begin{methoddesc}{setannotation}{mailbox, entry, attribute\optional{, ...}} | 
					
						
							|  |  |  |   Set \samp{ANNOTATION}s for \var{mailbox}. | 
					
						
							|  |  |  |   The method is non-standard, but is supported by the \samp{Cyrus} server. | 
					
						
							| 
									
										
										
										
											2006-02-07 07:23:26 +00:00
										 |  |  | \versionadded{2.5} | 
					
						
							| 
									
										
										
										
											2005-06-01 23:50:52 +00:00
										 |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-06-17 07:07:20 +00:00
										 |  |  | \begin{methoddesc}{setquota}{root, limits} | 
					
						
							|  |  |  |   Set the \samp{quota} \var{root}'s resource \var{limits}. | 
					
						
							|  |  |  |   This method is part of the IMAP4 QUOTA extension defined in rfc2087. | 
					
						
							| 
									
										
										
										
											2002-07-20 00:46:12 +00:00
										 |  |  | \versionadded{2.3} | 
					
						
							| 
									
										
										
										
											2002-06-17 07:07:20 +00:00
										 |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-07-20 11:04:19 +00:00
										 |  |  | \begin{methoddesc}{shutdown}{} | 
					
						
							|  |  |  |   Close connection established in \code{open}. | 
					
						
							|  |  |  |   You may override this method. | 
					
						
							|  |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-12-13 23:29:39 +00:00
										 |  |  | \begin{methoddesc}{socket}{} | 
					
						
							| 
									
										
										
										
											2001-07-20 11:04:19 +00:00
										 |  |  |   Returns socket instance used to connect to server. | 
					
						
							|  |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-03-27 16:59:38 +00:00
										 |  |  | \begin{methoddesc}{sort}{sort_criteria, charset, search_criterion\optional{, ...}} | 
					
						
							| 
									
										
										
										
											2004-07-30 19:12:38 +00:00
										 |  |  |   The \code{sort} command is a variant of \code{search} with sorting | 
					
						
							|  |  |  |   semantics for the results.  Returned data contains a space separated | 
					
						
							|  |  |  |   list of matching message numbers. | 
					
						
							| 
									
										
										
										
											2001-07-20 11:04:19 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-03-27 16:59:38 +00:00
										 |  |  |   Sort has two arguments before the \var{search_criterion} | 
					
						
							| 
									
										
										
										
											2004-07-30 19:12:38 +00:00
										 |  |  |   argument(s); a parenthesized list of \var{sort_criteria}, and the | 
					
						
							|  |  |  |   searching \var{charset}.  Note that unlike \code{search}, the | 
					
						
							|  |  |  |   searching \var{charset} argument is mandatory.  There is also a | 
					
						
							|  |  |  |   \code{uid sort} command which corresponds to \code{sort} the way | 
					
						
							|  |  |  |   that \code{uid search} corresponds to \code{search}.  The | 
					
						
							|  |  |  |   \code{sort} command first searches the mailbox for messages that | 
					
						
							| 
									
										
										
										
											2001-07-20 11:04:19 +00:00
										 |  |  |   match the given searching criteria using the charset argument for | 
					
						
							|  |  |  |   the interpretation of strings in the searching criteria.  It then | 
					
						
							|  |  |  |   returns the numbers of matching messages. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   This is an \samp{IMAP4rev1} extension command. | 
					
						
							| 
									
										
										
										
											1999-12-13 23:29:39 +00:00
										 |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-04-11 04:19:04 +00:00
										 |  |  | \begin{methoddesc}{status}{mailbox, names} | 
					
						
							|  |  |  |   Request named status conditions for \var{mailbox}.  | 
					
						
							|  |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{methoddesc}{store}{message_set, command, flag_list} | 
					
						
							| 
									
										
										
										
											2005-01-19 04:44:07 +00:00
										 |  |  |   Alters flag dispositions for messages in mailbox.  \var{command} is | 
					
						
							|  |  |  |   specified by section 6.4.6 of \rfc{2060} as being one of "FLAGS", "+FLAGS", | 
					
						
							|  |  |  |   or "-FLAGS", optionally with a suffix of ".SILENT". | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   For example, to set the delete flag on all messages: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{verbatim} | 
					
						
							|  |  |  | typ, data = M.search(None, 'ALL') | 
					
						
							|  |  |  | for num in data[0].split(): | 
					
						
							|  |  |  |    M.store(num, '+FLAGS', '\\Deleted') | 
					
						
							|  |  |  | M.expunge() | 
					
						
							|  |  |  | \end{verbatim} | 
					
						
							| 
									
										
										
										
											1998-04-11 04:19:04 +00:00
										 |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{methoddesc}{subscribe}{mailbox} | 
					
						
							|  |  |  |   Subscribe to new mailbox. | 
					
						
							|  |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-07-30 19:12:38 +00:00
										 |  |  | \begin{methoddesc}{thread}{threading_algorithm, charset, | 
					
						
							|  |  |  |                            search_criterion\optional{, ...}} | 
					
						
							|  |  |  |   The \code{thread} command is a variant of \code{search} with | 
					
						
							|  |  |  |   threading semantics for the results.  Returned data contains a space | 
					
						
							| 
									
										
										
										
											2003-11-10 06:44:44 +00:00
										 |  |  |   separated list of thread members. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-07-30 19:12:38 +00:00
										 |  |  |   Thread members consist of zero or more messages numbers, delimited | 
					
						
							|  |  |  |   by spaces, indicating successive parent and child. | 
					
						
							| 
									
										
										
										
											2003-11-10 06:44:44 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |   Thread has two arguments before the \var{search_criterion} | 
					
						
							| 
									
										
										
										
											2004-07-30 19:12:38 +00:00
										 |  |  |   argument(s); a \var{threading_algorithm}, and the searching | 
					
						
							|  |  |  |   \var{charset}.  Note that unlike \code{search}, the searching | 
					
						
							|  |  |  |   \var{charset} argument is mandatory.  There is also a \code{uid | 
					
						
							|  |  |  |   thread} command which corresponds to \code{thread} the way that | 
					
						
							|  |  |  |   \code{uid search} corresponds to \code{search}.  The \code{thread} | 
					
						
							|  |  |  |   command first searches the mailbox for messages that match the given | 
					
						
							|  |  |  |   searching criteria using the charset argument for the interpretation | 
					
						
							| 
									
										
										
										
											2005-01-01 00:28:46 +00:00
										 |  |  |   of strings in the searching criteria. It then returns the matching | 
					
						
							| 
									
										
										
										
											2004-07-30 19:12:38 +00:00
										 |  |  |   messages threaded according to the specified threading algorithm. | 
					
						
							| 
									
										
										
										
											2003-11-10 06:44:44 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |   This is an \samp{IMAP4rev1} extension command. \versionadded{2.4} | 
					
						
							|  |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-05-26 04:08:37 +00:00
										 |  |  | \begin{methoddesc}{uid}{command, arg\optional{, ...}} | 
					
						
							| 
									
										
										
										
											1998-04-11 04:19:04 +00:00
										 |  |  |   Execute command args with messages identified by UID, rather than | 
					
						
							| 
									
										
										
										
											2000-05-26 04:08:37 +00:00
										 |  |  |   message number.  Returns response appropriate to command.  At least | 
					
						
							|  |  |  |   one argument must be supplied; if none are provided, the server will | 
					
						
							|  |  |  |   return an error and an exception will be raised. | 
					
						
							| 
									
										
										
										
											1998-04-11 04:19:04 +00:00
										 |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{methoddesc}{unsubscribe}{mailbox} | 
					
						
							|  |  |  |   Unsubscribe from old mailbox. | 
					
						
							|  |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-05-26 04:08:37 +00:00
										 |  |  | \begin{methoddesc}{xatom}{name\optional{, arg\optional{, ...}}} | 
					
						
							| 
									
										
										
										
											1998-04-11 04:19:04 +00:00
										 |  |  |   Allow simple extension commands notified by server in | 
					
						
							|  |  |  |   \samp{CAPABILITY} response. | 
					
						
							|  |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-03-08 01:53:24 +00:00
										 |  |  | Instances of \class{IMAP4_SSL} have just one additional method: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{methoddesc}{ssl}{} | 
					
						
							|  |  |  |   Returns SSLObject instance used for the secure connection with the server. | 
					
						
							|  |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-04-11 15:11:55 +00:00
										 |  |  | The following attributes are defined on instances of \class{IMAP4}: | 
					
						
							| 
									
										
										
										
											1998-04-11 04:19:04 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-04-11 15:11:55 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | \begin{memberdesc}{PROTOCOL_VERSION} | 
					
						
							| 
									
										
										
										
											1999-04-22 16:46:18 +00:00
										 |  |  | The most recent supported protocol in the | 
					
						
							|  |  |  | \samp{CAPABILITY} response from the server. | 
					
						
							| 
									
										
										
										
											1998-04-11 15:11:55 +00:00
										 |  |  | \end{memberdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{memberdesc}{debug} | 
					
						
							|  |  |  | Integer value to control debugging output.  The initialize value is | 
					
						
							|  |  |  | taken from the module variable \code{Debug}.  Values greater than | 
					
						
							|  |  |  | three trace each command. | 
					
						
							|  |  |  | \end{memberdesc} | 
					
						
							| 
									
										
										
										
											1998-04-11 04:19:04 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-07-07 13:42:56 +00:00
										 |  |  | \subsection{IMAP4 Example \label{imap4-example}} | 
					
						
							| 
									
										
										
										
											1998-04-11 04:19:04 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | Here is a minimal example (without error checking) that opens a | 
					
						
							|  |  |  | mailbox and retrieves and prints all messages: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{verbatim} | 
					
						
							| 
									
										
										
										
											2001-07-20 11:04:19 +00:00
										 |  |  | import getpass, imaplib | 
					
						
							| 
									
										
										
										
											1999-07-07 13:42:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-04-11 04:19:04 +00:00
										 |  |  | M = imaplib.IMAP4() | 
					
						
							| 
									
										
										
										
											1999-07-07 13:42:56 +00:00
										 |  |  | M.login(getpass.getuser(), getpass.getpass()) | 
					
						
							|  |  |  | M.select() | 
					
						
							|  |  |  | typ, data = M.search(None, 'ALL') | 
					
						
							| 
									
										
										
										
											2001-07-20 11:04:19 +00:00
										 |  |  | for num in data[0].split(): | 
					
						
							| 
									
										
										
										
											1999-07-07 13:42:56 +00:00
										 |  |  |     typ, data = M.fetch(num, '(RFC822)') | 
					
						
							| 
									
										
										
										
											1998-04-11 04:19:04 +00:00
										 |  |  |     print 'Message %s\n%s\n' % (num, data[0][1])
 | 
					
						
							| 
									
										
										
										
											2005-01-19 04:44:07 +00:00
										 |  |  | M.close() | 
					
						
							| 
									
										
										
										
											1999-07-07 13:42:56 +00:00
										 |  |  | M.logout() | 
					
						
							| 
									
										
										
										
											1998-04-11 04:19:04 +00:00
										 |  |  | \end{verbatim} |