Older versions of the mailbox module do not support modification of mailboxes, such as adding or removing message, and do not provide classes to represent format-specific message properties. For backward compatibility, the older mailbox classes are still available, but the newer classes should be used in preference to them.
Older mailbox objects support only iteration and provide a single public method:
Most of the older mailbox classes have names that differ from the current mailbox class names, except for Maildir. For this reason, the new Maildir class defines a next() method and its constructor differs slightly from those of the other new mailbox classes.
The older mailbox classes whose names are not the same as their newer counterparts are as follows:
For maximum portability, messages in a Unix-style mailbox are
separated by any line that begins exactly with the string
' (note the trailing space) if preceded by exactly two newlines.
Because of the wide-range of variations in practice, nothing else on
the From_ line should be considered. However, the current
implementation doesn't check for the leading two newlines. This is
usually fine for most applications.
The UnixMailbox class implements a more strict version of From_ line checking, using a regular expression that usually correctly matched From_ delimiters. It considers delimiter line to be separated by "From name time" lines. For maximum portability, use the PortableUnixMailbox class instead. This class is identical to UnixMailbox except that individual messages are separated by only "From " lines.
For more information, see Configuring Netscape Mail on Unix: Why the Content-Length Format is Bad.
'From 'are quoted by mail handling software at delivery-time.
'*** EOOH ***'(End-Of-Original-Headers) and the visible headers appear after the
EOOHline. Babyl-compliant mail readers will show you only the visible headers, and BabylMailbox objects will return messages containing only the visible headers. You'll have to do your own parsing of the mailbox file to get at the original headers. Mail messages start with the EOOH line and end with a line containing only
'\037\014'. factory is as with the UnixMailbox class.
If you wish to use the older mailbox classes with the email module rather than the deprecated rfc822 module, you can do so as follows:
import email import email.Errors import mailbox def msgfactory(fp): try: return email.message_from_file(fp) except email.Errors.MessageParseError: # Don't return None since that will # stop the mailbox iterator return '' mbox = mailbox.UnixMailbox(fp, msgfactory)
Alternatively, if you know your mailbox contains only well-formed MIME messages, you can simplify this to:
import email import mailbox mbox = mailbox.UnixMailbox(fp, email.message_from_file)
See About this document... for information on suggesting changes.