| 
									
										
										
										
											2001-09-26 05:23:47 +00:00
										 |  |  | \declaremodule{standard}{email.Message} | 
					
						
							|  |  |  | \modulesynopsis{The base class representing email messages.} | 
					
						
							| 
									
										
										
										
											2001-09-26 22:21:52 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | The central class in the \module{email} package is the | 
					
						
							|  |  |  | \class{Message} class; it is the base class for the \module{email} | 
					
						
							|  |  |  | object model.  \class{Message} provides the core functionality for | 
					
						
							|  |  |  | setting and querying header fields, and for accessing message bodies. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Conceptually, a \class{Message} object consists of \emph{headers} and | 
					
						
							|  |  |  | \emph{payloads}.  Headers are \rfc{2822} style field names and | 
					
						
							|  |  |  | values where the field name and value are separated by a colon.  The | 
					
						
							|  |  |  | colon is not part of either the field name or the field value. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Headers are stored and returned in case-preserving form but are | 
					
						
							|  |  |  | matched case-insensitively.  There may also be a single | 
					
						
							|  |  |  | \emph{Unix-From} header, also known as the envelope header or the | 
					
						
							|  |  |  | \code{From_} header.  The payload is either a string in the case of | 
					
						
							|  |  |  | simple message objects, a list of \class{Message} objects for | 
					
						
							|  |  |  | multipart MIME documents, or a single \class{Message} instance for | 
					
						
							|  |  |  | \mimetype{message/rfc822} type objects. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \class{Message} objects provide a mapping style interface for | 
					
						
							|  |  |  | accessing the message headers, and an explicit interface for accessing | 
					
						
							|  |  |  | both the headers and the payload.  It provides convenience methods for | 
					
						
							|  |  |  | generating a flat text representation of the message object tree, for | 
					
						
							|  |  |  | accessing commonly used header parameters, and for recursively walking | 
					
						
							|  |  |  | over the object tree. | 
					
						
							| 
									
										
										
										
											2001-09-26 05:23:47 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | Here are the methods of the \class{Message} class: | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-09-26 22:21:52 +00:00
										 |  |  | \begin{classdesc}{Message}{} | 
					
						
							|  |  |  | The constructor takes no arguments. | 
					
						
							|  |  |  | \end{classdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-09-26 05:23:47 +00:00
										 |  |  | \begin{methoddesc}[Message]{as_string}{\optional{unixfrom}} | 
					
						
							|  |  |  | Return the entire formatted message as a string.  Optional | 
					
						
							|  |  |  | \var{unixfrom}, when true, specifies to include the \emph{Unix-From} | 
					
						
							|  |  |  | envelope header; it defaults to 0. | 
					
						
							|  |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-05-22 20:44:03 +00:00
										 |  |  | \begin{methoddesc}[Message]{__str__}{} | 
					
						
							| 
									
										
										
										
											2001-09-26 05:23:47 +00:00
										 |  |  | Equivalent to \method{aMessage.as_string(unixfrom=1)}. | 
					
						
							|  |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{methoddesc}[Message]{is_multipart}{} | 
					
						
							|  |  |  | Return 1 if the message's payload is a list of sub-\class{Message} | 
					
						
							|  |  |  | objects, otherwise return 0.  When \method{is_multipart()} returns 0, | 
					
						
							|  |  |  | the payload should either be a string object, or a single | 
					
						
							|  |  |  | \class{Message} instance. | 
					
						
							|  |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{methoddesc}[Message]{set_unixfrom}{unixfrom} | 
					
						
							|  |  |  | Set the \emph{Unix-From} (a.k.a envelope header or \code{From_} | 
					
						
							|  |  |  | header) to \var{unixfrom}, which should be a string. | 
					
						
							|  |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{methoddesc}[Message]{get_unixfrom}{} | 
					
						
							|  |  |  | Return the \emph{Unix-From} header.  Defaults to \code{None} if the | 
					
						
							|  |  |  | \emph{Unix-From} header was never set. | 
					
						
							|  |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{methoddesc}[Message]{add_payload}{payload} | 
					
						
							|  |  |  | Add \var{payload} to the message object's existing payload.  If, prior | 
					
						
							|  |  |  | to calling this method, the object's payload was \code{None} | 
					
						
							|  |  |  | (i.e. never before set), then after this method is called, the payload | 
					
						
							|  |  |  | will be the argument \var{payload}. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | If the object's payload was already a list | 
					
						
							|  |  |  | (i.e. \method{is_multipart()} returns 1), then \var{payload} is | 
					
						
							|  |  |  | appended to the end of the existing payload list. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | For any other type of existing payload, \method{add_payload()} will | 
					
						
							|  |  |  | transform the new payload into a list consisting of the old payload | 
					
						
							|  |  |  | and \var{payload}, but only if the document is already a MIME | 
					
						
							|  |  |  | multipart document.  This condition is satisfied if the message's | 
					
						
							| 
									
										
										
										
											2001-09-26 22:21:52 +00:00
										 |  |  | \mailheader{Content-Type} header's main type is either | 
					
						
							|  |  |  | \mimetype{multipart}, or there is no \mailheader{Content-Type} | 
					
						
							|  |  |  | header.  In any other situation, | 
					
						
							| 
									
										
										
										
											2001-09-26 05:23:47 +00:00
										 |  |  | \exception{MultipartConversionError} is raised. | 
					
						
							|  |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{methoddesc}[Message]{attach}{payload} | 
					
						
							|  |  |  | Synonymous with \method{add_payload()}. | 
					
						
							|  |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{methoddesc}[Message]{get_payload}{\optional{i\optional{, decode}}} | 
					
						
							|  |  |  | Return the current payload, which will be a list of \class{Message} | 
					
						
							|  |  |  | objects when \method{is_multipart()} returns 1, or a scalar (either a | 
					
						
							|  |  |  | string or a single \class{Message} instance) when | 
					
						
							|  |  |  | \method{is_multipart()} returns 0. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | With optional \var{i}, \method{get_payload()} will return the | 
					
						
							|  |  |  | \var{i}-th element of the payload, counting from zero, if | 
					
						
							| 
									
										
										
										
											2001-09-26 22:21:52 +00:00
										 |  |  | \method{is_multipart()} returns 1.  An \exception{IndexError} will be raised | 
					
						
							| 
									
										
										
										
											2001-09-26 05:23:47 +00:00
										 |  |  | if \var{i} is less than 0 or greater than or equal to the number of | 
					
						
							|  |  |  | items in the payload.  If the payload is scalar | 
					
						
							|  |  |  | (i.e. \method{is_multipart()} returns 0) and \var{i} is given, a | 
					
						
							| 
									
										
										
										
											2001-09-26 22:21:52 +00:00
										 |  |  | \exception{TypeError} is raised. | 
					
						
							| 
									
										
										
										
											2001-09-26 05:23:47 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | Optional \var{decode} is a flag indicating whether the payload should be | 
					
						
							| 
									
										
										
										
											2001-09-26 22:21:52 +00:00
										 |  |  | decoded or not, according to the \mailheader{Content-Transfer-Encoding} header. | 
					
						
							| 
									
										
										
										
											2001-09-26 05:23:47 +00:00
										 |  |  | When true and the message is not a multipart, the payload will be | 
					
						
							|  |  |  | decoded if this header's value is \samp{quoted-printable} or | 
					
						
							|  |  |  | \samp{base64}.  If some other encoding is used, or | 
					
						
							| 
									
										
										
										
											2001-09-26 22:21:52 +00:00
										 |  |  | \mailheader{Content-Transfer-Encoding} header is | 
					
						
							| 
									
										
										
										
											2001-09-26 05:23:47 +00:00
										 |  |  | missing, the payload is returned as-is (undecoded).  If the message is | 
					
						
							|  |  |  | a multipart and the \var{decode} flag is true, then \code{None} is | 
					
						
							|  |  |  | returned. | 
					
						
							|  |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{methoddesc}[Message]{set_payload}{payload} | 
					
						
							|  |  |  | Set the entire message object's payload to \var{payload}.  It is the | 
					
						
							|  |  |  | client's responsibility to ensure the payload invariants. | 
					
						
							|  |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The following methods implement a mapping-like interface for accessing | 
					
						
							|  |  |  | the message object's \rfc{2822} headers.  Note that there are some | 
					
						
							|  |  |  | semantic differences between these methods and a normal mapping | 
					
						
							|  |  |  | (i.e. dictionary) interface.  For example, in a dictionary there are | 
					
						
							|  |  |  | no duplicate keys, but here there may be duplicate message headers.  Also, | 
					
						
							|  |  |  | in dictionaries there is no guaranteed order to the keys returned by | 
					
						
							|  |  |  | \method{keys()}, but in a \class{Message} object, there is an explicit | 
					
						
							|  |  |  | order.  These semantic differences are intentional and are biased | 
					
						
							|  |  |  | toward maximal convenience. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Note that in all cases, any optional \emph{Unix-From} header the message | 
					
						
							|  |  |  | may have is not included in the mapping interface. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{methoddesc}[Message]{__len__}{} | 
					
						
							|  |  |  | Return the total number of headers, including duplicates. | 
					
						
							|  |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{methoddesc}[Message]{__contains__}{name} | 
					
						
							|  |  |  | Return true if the message object has a field named \var{name}. | 
					
						
							| 
									
										
										
										
											2001-11-05 01:55:03 +00:00
										 |  |  | Matching is done case-insensitively and \var{name} should not include the | 
					
						
							| 
									
										
										
										
											2001-09-26 05:23:47 +00:00
										 |  |  | trailing colon.  Used for the \code{in} operator, | 
					
						
							|  |  |  | e.g.: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{verbatim} | 
					
						
							|  |  |  | if 'message-id' in myMessage: | 
					
						
							|  |  |  |     print 'Message-ID:', myMessage['message-id'] | 
					
						
							|  |  |  | \end{verbatim} | 
					
						
							|  |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{methoddesc}[Message]{__getitem__}{name} | 
					
						
							|  |  |  | Return the value of the named header field.  \var{name} should not | 
					
						
							|  |  |  | include the colon field separator.  If the header is missing, | 
					
						
							| 
									
										
										
										
											2001-09-26 22:21:52 +00:00
										 |  |  | \code{None} is returned; a \exception{KeyError} is never raised. | 
					
						
							| 
									
										
										
										
											2001-09-26 05:23:47 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | Note that if the named field appears more than once in the message's | 
					
						
							|  |  |  | headers, exactly which of those field values will be returned is | 
					
						
							|  |  |  | undefined.  Use the \method{get_all()} method to get the values of all | 
					
						
							|  |  |  | the extant named headers. | 
					
						
							|  |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{methoddesc}[Message]{__setitem__}{name, val} | 
					
						
							|  |  |  | Add a header to the message with field name \var{name} and value | 
					
						
							|  |  |  | \var{val}.  The field is appended to the end of the message's existing | 
					
						
							|  |  |  | fields. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Note that this does \emph{not} overwrite or delete any existing header | 
					
						
							|  |  |  | with the same name.  If you want to ensure that the new header is the | 
					
						
							|  |  |  | only one present in the message with field name | 
					
						
							|  |  |  | \var{name}, first use \method{__delitem__()} to delete all named | 
					
						
							|  |  |  | fields, e.g.: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{verbatim} | 
					
						
							|  |  |  | del msg['subject'] | 
					
						
							|  |  |  | msg['subject'] = 'Python roolz!' | 
					
						
							|  |  |  | \end{verbatim} | 
					
						
							|  |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{methoddesc}[Message]{__delitem__}{name} | 
					
						
							|  |  |  | Delete all occurrences of the field with name \var{name} from the | 
					
						
							|  |  |  | message's headers.  No exception is raised if the named field isn't | 
					
						
							|  |  |  | present in the headers. | 
					
						
							|  |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{methoddesc}[Message]{has_key}{name} | 
					
						
							|  |  |  | Return 1 if the message contains a header field named \var{name}, | 
					
						
							|  |  |  | otherwise return 0. | 
					
						
							|  |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{methoddesc}[Message]{keys}{} | 
					
						
							|  |  |  | Return a list of all the message's header field names.  These keys | 
					
						
							|  |  |  | will be sorted in the order in which they were added to the message | 
					
						
							|  |  |  | via \method{__setitem__()}, and may contain duplicates.  Any fields | 
					
						
							|  |  |  | deleted and then subsequently re-added are always appended to the end | 
					
						
							|  |  |  | of the header list. | 
					
						
							|  |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{methoddesc}[Message]{values}{} | 
					
						
							|  |  |  | Return a list of all the message's field values.  These will be sorted | 
					
						
							|  |  |  | in the order in which they were added to the message via | 
					
						
							|  |  |  | \method{__setitem__()}, and may contain duplicates.  Any fields | 
					
						
							|  |  |  | deleted and then subsequently re-added are always appended to the end | 
					
						
							|  |  |  | of the header list. | 
					
						
							|  |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{methoddesc}[Message]{items}{} | 
					
						
							|  |  |  | Return a list of 2-tuples containing all the message's field headers and | 
					
						
							|  |  |  | values.  These will be sorted in the order in which they were added to | 
					
						
							|  |  |  | the message via \method{__setitem__()}, and may contain duplicates. | 
					
						
							|  |  |  | Any fields deleted and then subsequently re-added are always appended | 
					
						
							|  |  |  | to the end of the header list. | 
					
						
							|  |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{methoddesc}[Message]{get}{name\optional{, failobj}} | 
					
						
							|  |  |  | Return the value of the named header field.  This is identical to | 
					
						
							|  |  |  | \method{__getitem__()} except that optional \var{failobj} is returned | 
					
						
							|  |  |  | if the named header is missing (defaults to \code{None}). | 
					
						
							|  |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Here are some additional useful methods: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{methoddesc}[Message]{get_all}{name\optional{, failobj}} | 
					
						
							|  |  |  | Return a list of all the values for the field named \var{name}.  These | 
					
						
							|  |  |  | will be sorted in the order in which they were added to the message | 
					
						
							|  |  |  | via \method{__setitem__()}.  Any fields | 
					
						
							|  |  |  | deleted and then subsequently re-added are always appended to the end | 
					
						
							|  |  |  | of the list. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | If there are no such named headers in the message, \var{failobj} is | 
					
						
							|  |  |  | returned (defaults to \code{None}). | 
					
						
							|  |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{methoddesc}[Message]{add_header}{_name, _value, **_params} | 
					
						
							|  |  |  | Extended header setting.  This method is similar to | 
					
						
							|  |  |  | \method{__setitem__()} except that additional header parameters can be | 
					
						
							|  |  |  | provided as keyword arguments.  \var{_name} is the header to set and | 
					
						
							|  |  |  | \var{_value} is the \emph{primary} value for the header. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | For each item in the keyword argument dictionary \var{_params}, the | 
					
						
							|  |  |  | key is taken as the parameter name, with underscores converted to | 
					
						
							|  |  |  | dashes (since dashes are illegal in Python identifiers).  Normally, | 
					
						
							|  |  |  | the parameter will be added as \code{key="value"} unless the value is | 
					
						
							|  |  |  | \code{None}, in which case only the key will be added. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Here's an example: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{verbatim} | 
					
						
							|  |  |  | msg.add_header('Content-Disposition', 'attachment', filename='bud.gif') | 
					
						
							|  |  |  | \end{verbatim} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | This will add a header that looks like | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{verbatim} | 
					
						
							|  |  |  | Content-Disposition: attachment; filename="bud.gif" | 
					
						
							|  |  |  | \end{verbatim} | 
					
						
							|  |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{methoddesc}[Message]{get_type}{\optional{failobj}} | 
					
						
							|  |  |  | Return the message's content type, as a string of the form | 
					
						
							| 
									
										
										
										
											2001-09-26 22:21:52 +00:00
										 |  |  | \mimetype{maintype/subtype} as taken from the | 
					
						
							|  |  |  | \mailheader{Content-Type} header. | 
					
						
							| 
									
										
										
										
											2001-09-26 05:23:47 +00:00
										 |  |  | The returned string is coerced to lowercase. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-09-26 22:21:52 +00:00
										 |  |  | If there is no \mailheader{Content-Type} header in the message, | 
					
						
							| 
									
										
										
										
											2001-09-26 05:23:47 +00:00
										 |  |  | \var{failobj} is returned (defaults to \code{None}). | 
					
						
							|  |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{methoddesc}[Message]{get_main_type}{\optional{failobj}} | 
					
						
							|  |  |  | Return the message's \emph{main} content type.  This essentially returns the | 
					
						
							|  |  |  | \var{maintype} part of the string returned by \method{get_type()}, with the | 
					
						
							|  |  |  | same semantics for \var{failobj}. | 
					
						
							|  |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{methoddesc}[Message]{get_subtype}{\optional{failobj}} | 
					
						
							|  |  |  | Return the message's sub-content type.  This essentially returns the | 
					
						
							|  |  |  | \var{subtype} part of the string returned by \method{get_type()}, with the | 
					
						
							|  |  |  | same semantics for \var{failobj}. | 
					
						
							|  |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{methoddesc}[Message]{get_params}{\optional{failobj\optional{, header}}} | 
					
						
							| 
									
										
										
										
											2001-09-26 22:21:52 +00:00
										 |  |  | Return the message's \mailheader{Content-Type} parameters, as a list.  The | 
					
						
							| 
									
										
										
										
											2001-09-26 05:23:47 +00:00
										 |  |  | elements of the returned list are 2-tuples of key/value pairs, as | 
					
						
							| 
									
										
										
										
											2001-09-26 22:21:52 +00:00
										 |  |  | split on the \character{=} sign.  The left hand side of the | 
					
						
							|  |  |  | \character{=} is the key, while the right hand side is the value.  If | 
					
						
							|  |  |  | there is no \character{=} sign in the parameter the value is the empty | 
					
						
							|  |  |  | string.  The value is always unquoted with \method{Utils.unquote()}. | 
					
						
							| 
									
										
										
										
											2001-09-26 05:23:47 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | Optional \var{failobj} is the object to return if there is no | 
					
						
							| 
									
										
										
										
											2001-09-26 22:21:52 +00:00
										 |  |  | \mailheader{Content-Type} header.  Optional \var{header} is the header to | 
					
						
							|  |  |  | search instead of \mailheader{Content-Type}. | 
					
						
							| 
									
										
										
										
											2001-09-26 05:23:47 +00:00
										 |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{methoddesc}[Message]{get_param}{param\optional{, | 
					
						
							|  |  |  |     failobj\optional{, header}}} | 
					
						
							| 
									
										
										
										
											2001-09-26 22:21:52 +00:00
										 |  |  | Return the value of the \mailheader{Content-Type} header's parameter | 
					
						
							|  |  |  | \var{param} as a string.  If the message has no \mailheader{Content-Type} | 
					
						
							| 
									
										
										
										
											2001-09-26 05:23:47 +00:00
										 |  |  | header or if there is no such parameter, then \var{failobj} is | 
					
						
							|  |  |  | returned (defaults to \code{None}). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Optional \var{header} if given, specifies the message header to use | 
					
						
							| 
									
										
										
										
											2001-09-26 22:21:52 +00:00
										 |  |  | instead of \mailheader{Content-Type}. | 
					
						
							| 
									
										
										
										
											2001-09-26 05:23:47 +00:00
										 |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{methoddesc}[Message]{get_charsets}{\optional{failobj}} | 
					
						
							|  |  |  | Return a list containing the character set names in the message.  If | 
					
						
							| 
									
										
										
										
											2001-09-26 22:21:52 +00:00
										 |  |  | the message is a \mimetype{multipart}, then the list will contain one | 
					
						
							| 
									
										
										
										
											2001-09-26 05:23:47 +00:00
										 |  |  | element for each subpart in the payload, otherwise, it will be a list | 
					
						
							|  |  |  | of length 1. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Each item in the list will be a string which is the value of the | 
					
						
							| 
									
										
										
										
											2001-09-26 22:21:52 +00:00
										 |  |  | \code{charset} parameter in the \mailheader{Content-Type} header for the | 
					
						
							| 
									
										
										
										
											2001-09-26 05:23:47 +00:00
										 |  |  | represented subpart.  However, if the subpart has no | 
					
						
							| 
									
										
										
										
											2001-09-26 22:21:52 +00:00
										 |  |  | \mailheader{Content-Type} header, no \code{charset} parameter, or is not of | 
					
						
							|  |  |  | the \mimetype{text} main MIME type, then that item in the returned list | 
					
						
							| 
									
										
										
										
											2001-09-26 05:23:47 +00:00
										 |  |  | will be \var{failobj}. | 
					
						
							|  |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{methoddesc}[Message]{get_filename}{\optional{failobj}} | 
					
						
							|  |  |  | Return the value of the \code{filename} parameter of the | 
					
						
							| 
									
										
										
										
											2001-09-26 22:21:52 +00:00
										 |  |  | \mailheader{Content-Disposition} header of the message, or \var{failobj} if | 
					
						
							| 
									
										
										
										
											2001-09-26 05:23:47 +00:00
										 |  |  | either the header is missing, or has no \code{filename} parameter. | 
					
						
							|  |  |  | The returned string will always be unquoted as per | 
					
						
							|  |  |  | \method{Utils.unquote()}. | 
					
						
							|  |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{methoddesc}[Message]{get_boundary}{\optional{failobj}} | 
					
						
							|  |  |  | Return the value of the \code{boundary} parameter of the | 
					
						
							| 
									
										
										
										
											2001-09-26 22:21:52 +00:00
										 |  |  | \mailheader{Content-Type} header of the message, or \var{failobj} if either | 
					
						
							| 
									
										
										
										
											2001-09-26 05:23:47 +00:00
										 |  |  | the header is missing, or has no \code{boundary} parameter.  The | 
					
						
							|  |  |  | returned string will always be unquoted as per | 
					
						
							|  |  |  | \method{Utils.unquote()}. | 
					
						
							|  |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{methoddesc}[Message]{set_boundary}{boundary} | 
					
						
							| 
									
										
										
										
											2001-09-26 22:21:52 +00:00
										 |  |  | Set the \code{boundary} parameter of the \mailheader{Content-Type} header | 
					
						
							| 
									
										
										
										
											2001-09-26 05:23:47 +00:00
										 |  |  | to \var{boundary}.  \method{set_boundary()} will always quote | 
					
						
							|  |  |  | \var{boundary} so you should not quote it yourself.  A | 
					
						
							| 
									
										
										
										
											2001-09-26 22:21:52 +00:00
										 |  |  | \exception{HeaderParseError} is raised if the message object has no | 
					
						
							|  |  |  | \mailheader{Content-Type} header. | 
					
						
							| 
									
										
										
										
											2001-09-26 05:23:47 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | Note that using this method is subtly different than deleting the old | 
					
						
							| 
									
										
										
										
											2001-09-26 22:21:52 +00:00
										 |  |  | \mailheader{Content-Type} header and adding a new one with the new boundary | 
					
						
							| 
									
										
										
										
											2001-09-26 05:23:47 +00:00
										 |  |  | via \method{add_header()}, because \method{set_boundary()} preserves the | 
					
						
							| 
									
										
										
										
											2001-09-26 22:21:52 +00:00
										 |  |  | order of the \mailheader{Content-Type} header in the list of headers. | 
					
						
							| 
									
										
										
										
											2001-09-26 05:23:47 +00:00
										 |  |  | However, it does \emph{not} preserve any continuation lines which may | 
					
						
							| 
									
										
										
										
											2001-09-26 22:21:52 +00:00
										 |  |  | have been present in the original \mailheader{Content-Type} header. | 
					
						
							| 
									
										
										
										
											2001-09-26 05:23:47 +00:00
										 |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{methoddesc}[Message]{walk}{} | 
					
						
							|  |  |  | The \method{walk()} method is an all-purpose generator which can be | 
					
						
							|  |  |  | used to iterate over all the parts and subparts of a message object | 
					
						
							|  |  |  | tree, in depth-first traversal order.  You will typically use | 
					
						
							|  |  |  | \method{walk()} as the iterator in a \code{for ... in} loop; each | 
					
						
							|  |  |  | iteration returns the next subpart. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Here's an example that prints the MIME type of every part of a message | 
					
						
							|  |  |  | object tree: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{verbatim} | 
					
						
							|  |  |  | >>> for part in msg.walk(): | 
					
						
							|  |  |  | >>>     print part.get_type('text/plain') | 
					
						
							|  |  |  | multipart/report | 
					
						
							|  |  |  | text/plain | 
					
						
							|  |  |  | message/delivery-status | 
					
						
							|  |  |  | text/plain | 
					
						
							|  |  |  | text/plain | 
					
						
							|  |  |  | message/rfc822 | 
					
						
							|  |  |  | \end{verbatim} | 
					
						
							|  |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \class{Message} objects can also optionally contain two instance | 
					
						
							|  |  |  | attributes, which can be used when generating the plain text of a MIME | 
					
						
							|  |  |  | message. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{datadesc}{preamble} | 
					
						
							|  |  |  | The format of a MIME document allows for some text between the blank | 
					
						
							|  |  |  | line following the headers, and the first multipart boundary string. | 
					
						
							|  |  |  | Normally, this text is never visible in a MIME-aware mail reader | 
					
						
							|  |  |  | because it falls outside the standard MIME armor.  However, when | 
					
						
							|  |  |  | viewing the raw text of the message, or when viewing the message in a | 
					
						
							|  |  |  | non-MIME aware reader, this text can become visible. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The \var{preamble} attribute contains this leading extra-armor text | 
					
						
							|  |  |  | for MIME documents.  When the \class{Parser} discovers some text after | 
					
						
							|  |  |  | the headers but before the first boundary string, it assigns this text | 
					
						
							|  |  |  | to the message's \var{preamble} attribute.  When the \class{Generator} | 
					
						
							|  |  |  | is writing out the plain text representation of a MIME message, and it | 
					
						
							|  |  |  | finds the message has a \var{preamble} attribute, it will write this | 
					
						
							|  |  |  | text in the area between the headers and the first boundary. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Note that if the message object has no preamble, the | 
					
						
							|  |  |  | \var{preamble} attribute will be \code{None}. | 
					
						
							|  |  |  | \end{datadesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{datadesc}{epilogue} | 
					
						
							|  |  |  | The \var{epilogue} attribute acts the same way as the \var{preamble} | 
					
						
							|  |  |  | attribute, except that it contains text that appears between the last | 
					
						
							|  |  |  | boundary and the end of the message. | 
					
						
							| 
									
										
										
										
											2001-10-19 04:34:42 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | One note: when generating the flat text for a \mimetype{multipart} | 
					
						
							|  |  |  | message that has no \var{epilogue} (using the standard | 
					
						
							|  |  |  | \class{Generator} class), no newline is added after the closing | 
					
						
							|  |  |  | boundary line.  If the message object has an \var{epilogue} and its | 
					
						
							|  |  |  | value does not start with a newline, a newline is printed after the | 
					
						
							|  |  |  | closing boundary.  This seems a little clumsy, but it makes the most | 
					
						
							|  |  |  | practical sense.  The upshot is that if you want to ensure that a | 
					
						
							|  |  |  | newline get printed after your closing \mimetype{multipart} boundary, | 
					
						
							|  |  |  | set the \var{epilogue} to the empty string. | 
					
						
							| 
									
										
										
										
											2001-09-26 05:23:47 +00:00
										 |  |  | \end{datadesc} |