blob: d901ad2cc1c48e1948bb40f07bb188ae9ed430dd [file] [log] [blame]
Georg Brandl116aa622007-08-15 14:28:22 +00001:mod:`mailbox` --- Manipulate mailboxes in various formats
2==========================================================
3
4.. module:: mailbox
5 :synopsis: Manipulate mailboxes in various formats
Terry Jan Reedyfa089b92016-06-11 15:02:54 -04006
Georg Brandl116aa622007-08-15 14:28:22 +00007.. moduleauthor:: Gregory K. Johnson <gkj@gregorykjohnson.com>
8.. sectionauthor:: Gregory K. Johnson <gkj@gregorykjohnson.com>
9
Terry Jan Reedyfa089b92016-06-11 15:02:54 -040010**Source code:** :source:`Lib/mailbox.py`
11
12--------------
Georg Brandl116aa622007-08-15 14:28:22 +000013
14This module defines two classes, :class:`Mailbox` and :class:`Message`, for
15accessing and manipulating on-disk mailboxes and the messages they contain.
16:class:`Mailbox` offers a dictionary-like mapping from keys to messages.
R David Murray53202502012-09-28 15:19:16 -040017:class:`Message` extends the :mod:`email.message` module's
18:class:`~email.message.Message` class with format-specific state and behavior.
19Supported mailbox formats are Maildir, mbox, MH, Babyl, and MMDF.
Georg Brandl116aa622007-08-15 14:28:22 +000020
21
22.. seealso::
23
24 Module :mod:`email`
25 Represent and manipulate messages.
26
27
28.. _mailbox-objects:
29
30:class:`Mailbox` objects
31------------------------
32
Georg Brandl116aa622007-08-15 14:28:22 +000033.. class:: Mailbox
34
35 A mailbox, which may be inspected and modified.
36
Benjamin Petersone41251e2008-04-25 01:59:09 +000037 The :class:`Mailbox` class defines an interface and is not intended to be
38 instantiated. Instead, format-specific subclasses should inherit from
39 :class:`Mailbox` and your code should instantiate a particular subclass.
Georg Brandl116aa622007-08-15 14:28:22 +000040
Benjamin Petersone41251e2008-04-25 01:59:09 +000041 The :class:`Mailbox` interface is dictionary-like, with small keys
42 corresponding to messages. Keys are issued by the :class:`Mailbox` instance
43 with which they will be used and are only meaningful to that :class:`Mailbox`
44 instance. A key continues to identify a message even if the corresponding
45 message is modified, such as by replacing it with another message.
Georg Brandl116aa622007-08-15 14:28:22 +000046
Benjamin Petersone41251e2008-04-25 01:59:09 +000047 Messages may be added to a :class:`Mailbox` instance using the set-like
48 method :meth:`add` and removed using a ``del`` statement or the set-like
49 methods :meth:`remove` and :meth:`discard`.
Georg Brandl116aa622007-08-15 14:28:22 +000050
Benjamin Petersone41251e2008-04-25 01:59:09 +000051 :class:`Mailbox` interface semantics differ from dictionary semantics in some
52 noteworthy ways. Each time a message is requested, a new representation
53 (typically a :class:`Message` instance) is generated based upon the current
54 state of the mailbox. Similarly, when a message is added to a
55 :class:`Mailbox` instance, the provided message representation's contents are
56 copied. In neither case is a reference to the message representation kept by
57 the :class:`Mailbox` instance.
Georg Brandl116aa622007-08-15 14:28:22 +000058
Benjamin Petersone41251e2008-04-25 01:59:09 +000059 The default :class:`Mailbox` iterator iterates over message representations,
60 not keys as the default dictionary iterator does. Moreover, modification of a
61 mailbox during iteration is safe and well-defined. Messages added to the
62 mailbox after an iterator is created will not be seen by the
63 iterator. Messages removed from the mailbox before the iterator yields them
64 will be silently skipped, though using a key from an iterator may result in a
65 :exc:`KeyError` exception if the corresponding message is subsequently
66 removed.
Georg Brandl116aa622007-08-15 14:28:22 +000067
Benjamin Petersone41251e2008-04-25 01:59:09 +000068 .. warning::
Georg Brandl116aa622007-08-15 14:28:22 +000069
Benjamin Petersone41251e2008-04-25 01:59:09 +000070 Be very cautious when modifying mailboxes that might be simultaneously
71 changed by some other process. The safest mailbox format to use for such
72 tasks is Maildir; try to avoid using single-file formats such as mbox for
73 concurrent writing. If you're modifying a mailbox, you *must* lock it by
74 calling the :meth:`lock` and :meth:`unlock` methods *before* reading any
75 messages in the file or making any changes by adding or deleting a
76 message. Failing to lock the mailbox runs the risk of losing messages or
77 corrupting the entire mailbox.
Georg Brandl116aa622007-08-15 14:28:22 +000078
Benjamin Petersone41251e2008-04-25 01:59:09 +000079 :class:`Mailbox` instances have the following methods:
Georg Brandl116aa622007-08-15 14:28:22 +000080
81
Benjamin Petersone41251e2008-04-25 01:59:09 +000082 .. method:: add(message)
Georg Brandl116aa622007-08-15 14:28:22 +000083
Benjamin Petersone41251e2008-04-25 01:59:09 +000084 Add *message* to the mailbox and return the key that has been assigned to
85 it.
Georg Brandl116aa622007-08-15 14:28:22 +000086
Benjamin Petersone41251e2008-04-25 01:59:09 +000087 Parameter *message* may be a :class:`Message` instance, an
R David Murray53202502012-09-28 15:19:16 -040088 :class:`email.message.Message` instance, a string, a byte string, or a
R. David Murrayb7deff12011-01-30 06:21:28 +000089 file-like object (which should be open in binary mode). If *message* is
90 an instance of the
Benjamin Petersone41251e2008-04-25 01:59:09 +000091 appropriate format-specific :class:`Message` subclass (e.g., if it's an
92 :class:`mboxMessage` instance and this is an :class:`mbox` instance), its
93 format-specific information is used. Otherwise, reasonable defaults for
94 format-specific information are used.
Georg Brandl116aa622007-08-15 14:28:22 +000095
Georg Brandl33369cf2012-06-24 22:48:03 +020096 .. versionchanged:: 3.2
97 Support for binary input was added.
R. David Murrayb7deff12011-01-30 06:21:28 +000098
Georg Brandl116aa622007-08-15 14:28:22 +000099
Benjamin Petersone41251e2008-04-25 01:59:09 +0000100 .. method:: remove(key)
101 __delitem__(key)
102 discard(key)
Georg Brandl116aa622007-08-15 14:28:22 +0000103
Benjamin Petersone41251e2008-04-25 01:59:09 +0000104 Delete the message corresponding to *key* from the mailbox.
Georg Brandl116aa622007-08-15 14:28:22 +0000105
Benjamin Petersone41251e2008-04-25 01:59:09 +0000106 If no such message exists, a :exc:`KeyError` exception is raised if the
107 method was called as :meth:`remove` or :meth:`__delitem__` but no
108 exception is raised if the method was called as :meth:`discard`. The
109 behavior of :meth:`discard` may be preferred if the underlying mailbox
110 format supports concurrent modification by other processes.
Georg Brandl116aa622007-08-15 14:28:22 +0000111
112
Benjamin Petersone41251e2008-04-25 01:59:09 +0000113 .. method:: __setitem__(key, message)
Georg Brandl116aa622007-08-15 14:28:22 +0000114
Benjamin Petersone41251e2008-04-25 01:59:09 +0000115 Replace the message corresponding to *key* with *message*. Raise a
116 :exc:`KeyError` exception if no message already corresponds to *key*.
Georg Brandl116aa622007-08-15 14:28:22 +0000117
Benjamin Petersone41251e2008-04-25 01:59:09 +0000118 As with :meth:`add`, parameter *message* may be a :class:`Message`
R David Murray53202502012-09-28 15:19:16 -0400119 instance, an :class:`email.message.Message` instance, a string, a byte
R. David Murrayb7deff12011-01-30 06:21:28 +0000120 string, or a file-like object (which should be open in binary mode). If
121 *message* is an
Benjamin Petersone41251e2008-04-25 01:59:09 +0000122 instance of the appropriate format-specific :class:`Message` subclass
123 (e.g., if it's an :class:`mboxMessage` instance and this is an
124 :class:`mbox` instance), its format-specific information is
125 used. Otherwise, the format-specific information of the message that
126 currently corresponds to *key* is left unchanged.
Georg Brandl116aa622007-08-15 14:28:22 +0000127
128
Benjamin Petersone41251e2008-04-25 01:59:09 +0000129 .. method:: iterkeys()
130 keys()
Georg Brandl116aa622007-08-15 14:28:22 +0000131
Benjamin Petersone41251e2008-04-25 01:59:09 +0000132 Return an iterator over all keys if called as :meth:`iterkeys` or return a
133 list of keys if called as :meth:`keys`.
Georg Brandl116aa622007-08-15 14:28:22 +0000134
135
Benjamin Petersone41251e2008-04-25 01:59:09 +0000136 .. method:: itervalues()
137 __iter__()
138 values()
Georg Brandl116aa622007-08-15 14:28:22 +0000139
Benjamin Petersone41251e2008-04-25 01:59:09 +0000140 Return an iterator over representations of all messages if called as
141 :meth:`itervalues` or :meth:`__iter__` or return a list of such
142 representations if called as :meth:`values`. The messages are represented
143 as instances of the appropriate format-specific :class:`Message` subclass
144 unless a custom message factory was specified when the :class:`Mailbox`
145 instance was initialized.
Georg Brandl116aa622007-08-15 14:28:22 +0000146
Benjamin Petersone41251e2008-04-25 01:59:09 +0000147 .. note::
Georg Brandl116aa622007-08-15 14:28:22 +0000148
Benjamin Petersone41251e2008-04-25 01:59:09 +0000149 The behavior of :meth:`__iter__` is unlike that of dictionaries, which
150 iterate over keys.
Georg Brandl116aa622007-08-15 14:28:22 +0000151
152
Benjamin Petersone41251e2008-04-25 01:59:09 +0000153 .. method:: iteritems()
154 items()
Georg Brandl116aa622007-08-15 14:28:22 +0000155
Benjamin Petersone41251e2008-04-25 01:59:09 +0000156 Return an iterator over (*key*, *message*) pairs, where *key* is a key and
157 *message* is a message representation, if called as :meth:`iteritems` or
158 return a list of such pairs if called as :meth:`items`. The messages are
159 represented as instances of the appropriate format-specific
160 :class:`Message` subclass unless a custom message factory was specified
161 when the :class:`Mailbox` instance was initialized.
Georg Brandl116aa622007-08-15 14:28:22 +0000162
163
Georg Brandlcd7f32b2009-06-08 09:13:45 +0000164 .. method:: get(key, default=None)
Benjamin Petersone41251e2008-04-25 01:59:09 +0000165 __getitem__(key)
Georg Brandl116aa622007-08-15 14:28:22 +0000166
Benjamin Petersone41251e2008-04-25 01:59:09 +0000167 Return a representation of the message corresponding to *key*. If no such
168 message exists, *default* is returned if the method was called as
169 :meth:`get` and a :exc:`KeyError` exception is raised if the method was
170 called as :meth:`__getitem__`. The message is represented as an instance
171 of the appropriate format-specific :class:`Message` subclass unless a
172 custom message factory was specified when the :class:`Mailbox` instance
173 was initialized.
Georg Brandl116aa622007-08-15 14:28:22 +0000174
175
Benjamin Petersone41251e2008-04-25 01:59:09 +0000176 .. method:: get_message(key)
Georg Brandl116aa622007-08-15 14:28:22 +0000177
Benjamin Petersone41251e2008-04-25 01:59:09 +0000178 Return a representation of the message corresponding to *key* as an
179 instance of the appropriate format-specific :class:`Message` subclass, or
180 raise a :exc:`KeyError` exception if no such message exists.
Georg Brandl116aa622007-08-15 14:28:22 +0000181
182
R. David Murrayb7deff12011-01-30 06:21:28 +0000183 .. method:: get_bytes(key)
184
185 Return a byte representation of the message corresponding to *key*, or
186 raise a :exc:`KeyError` exception if no such message exists.
187
188 .. versionadded:: 3.2
189
190
Benjamin Petersone41251e2008-04-25 01:59:09 +0000191 .. method:: get_string(key)
Georg Brandl116aa622007-08-15 14:28:22 +0000192
Benjamin Petersone41251e2008-04-25 01:59:09 +0000193 Return a string representation of the message corresponding to *key*, or
R. David Murrayb7deff12011-01-30 06:21:28 +0000194 raise a :exc:`KeyError` exception if no such message exists. The
195 message is processed through :class:`email.message.Message` to
196 convert it to a 7bit clean representation.
Georg Brandl116aa622007-08-15 14:28:22 +0000197
198
Benjamin Petersone41251e2008-04-25 01:59:09 +0000199 .. method:: get_file(key)
Georg Brandl116aa622007-08-15 14:28:22 +0000200
Benjamin Petersone41251e2008-04-25 01:59:09 +0000201 Return a file-like representation of the message corresponding to *key*,
Georg Brandl6ce29fa2010-10-30 14:33:28 +0000202 or raise a :exc:`KeyError` exception if no such message exists. The
203 file-like object behaves as if open in binary mode. This file should be
Benjamin Petersone41251e2008-04-25 01:59:09 +0000204 closed once it is no longer needed.
Georg Brandl116aa622007-08-15 14:28:22 +0000205
R. David Murrayb7deff12011-01-30 06:21:28 +0000206 .. versionchanged:: 3.2
207 The file object really is a binary file; previously it was incorrectly
208 returned in text mode. Also, the file-like object now supports the
Serhiy Storchaka14867992014-09-10 23:43:41 +0300209 context management protocol: you can use a :keyword:`with` statement to
R. David Murrayb7deff12011-01-30 06:21:28 +0000210 automatically close it.
Georg Brandl6ce29fa2010-10-30 14:33:28 +0000211
Benjamin Petersone41251e2008-04-25 01:59:09 +0000212 .. note::
Georg Brandl116aa622007-08-15 14:28:22 +0000213
Benjamin Petersone41251e2008-04-25 01:59:09 +0000214 Unlike other representations of messages, file-like representations are
215 not necessarily independent of the :class:`Mailbox` instance that
Georg Brandl6ce29fa2010-10-30 14:33:28 +0000216 created them or of the underlying mailbox. More specific documentation
Benjamin Petersone41251e2008-04-25 01:59:09 +0000217 is provided by each subclass.
Georg Brandl116aa622007-08-15 14:28:22 +0000218
219
Benjamin Petersone41251e2008-04-25 01:59:09 +0000220 .. method:: __contains__(key)
Georg Brandl116aa622007-08-15 14:28:22 +0000221
Benjamin Petersone41251e2008-04-25 01:59:09 +0000222 Return ``True`` if *key* corresponds to a message, ``False`` otherwise.
Georg Brandl116aa622007-08-15 14:28:22 +0000223
224
Benjamin Petersone41251e2008-04-25 01:59:09 +0000225 .. method:: __len__()
Georg Brandl116aa622007-08-15 14:28:22 +0000226
Benjamin Petersone41251e2008-04-25 01:59:09 +0000227 Return a count of messages in the mailbox.
Georg Brandl116aa622007-08-15 14:28:22 +0000228
229
Benjamin Petersone41251e2008-04-25 01:59:09 +0000230 .. method:: clear()
Georg Brandl116aa622007-08-15 14:28:22 +0000231
Benjamin Petersone41251e2008-04-25 01:59:09 +0000232 Delete all messages from the mailbox.
Georg Brandl116aa622007-08-15 14:28:22 +0000233
234
Georg Brandlcd7f32b2009-06-08 09:13:45 +0000235 .. method:: pop(key, default=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000236
Benjamin Petersone41251e2008-04-25 01:59:09 +0000237 Return a representation of the message corresponding to *key* and delete
Georg Brandlcd7f32b2009-06-08 09:13:45 +0000238 the message. If no such message exists, return *default*. The message is
Benjamin Petersone41251e2008-04-25 01:59:09 +0000239 represented as an instance of the appropriate format-specific
240 :class:`Message` subclass unless a custom message factory was specified
241 when the :class:`Mailbox` instance was initialized.
Georg Brandl116aa622007-08-15 14:28:22 +0000242
243
Benjamin Petersone41251e2008-04-25 01:59:09 +0000244 .. method:: popitem()
Georg Brandl116aa622007-08-15 14:28:22 +0000245
Benjamin Petersone41251e2008-04-25 01:59:09 +0000246 Return an arbitrary (*key*, *message*) pair, where *key* is a key and
247 *message* is a message representation, and delete the corresponding
248 message. If the mailbox is empty, raise a :exc:`KeyError` exception. The
249 message is represented as an instance of the appropriate format-specific
250 :class:`Message` subclass unless a custom message factory was specified
251 when the :class:`Mailbox` instance was initialized.
Georg Brandl116aa622007-08-15 14:28:22 +0000252
253
Benjamin Petersone41251e2008-04-25 01:59:09 +0000254 .. method:: update(arg)
Georg Brandl116aa622007-08-15 14:28:22 +0000255
Benjamin Petersone41251e2008-04-25 01:59:09 +0000256 Parameter *arg* should be a *key*-to-*message* mapping or an iterable of
257 (*key*, *message*) pairs. Updates the mailbox so that, for each given
258 *key* and *message*, the message corresponding to *key* is set to
259 *message* as if by using :meth:`__setitem__`. As with :meth:`__setitem__`,
260 each *key* must already correspond to a message in the mailbox or else a
261 :exc:`KeyError` exception will be raised, so in general it is incorrect
262 for *arg* to be a :class:`Mailbox` instance.
Georg Brandl116aa622007-08-15 14:28:22 +0000263
Benjamin Petersone41251e2008-04-25 01:59:09 +0000264 .. note::
Georg Brandl116aa622007-08-15 14:28:22 +0000265
Benjamin Petersone41251e2008-04-25 01:59:09 +0000266 Unlike with dictionaries, keyword arguments are not supported.
Georg Brandl116aa622007-08-15 14:28:22 +0000267
268
Benjamin Petersone41251e2008-04-25 01:59:09 +0000269 .. method:: flush()
Georg Brandl116aa622007-08-15 14:28:22 +0000270
Benjamin Petersone41251e2008-04-25 01:59:09 +0000271 Write any pending changes to the filesystem. For some :class:`Mailbox`
272 subclasses, changes are always written immediately and :meth:`flush` does
273 nothing, but you should still make a habit of calling this method.
Georg Brandl116aa622007-08-15 14:28:22 +0000274
275
Benjamin Petersone41251e2008-04-25 01:59:09 +0000276 .. method:: lock()
Georg Brandl116aa622007-08-15 14:28:22 +0000277
Benjamin Petersone41251e2008-04-25 01:59:09 +0000278 Acquire an exclusive advisory lock on the mailbox so that other processes
279 know not to modify it. An :exc:`ExternalClashError` is raised if the lock
280 is not available. The particular locking mechanisms used depend upon the
281 mailbox format. You should *always* lock the mailbox before making any
282 modifications to its contents.
Georg Brandl116aa622007-08-15 14:28:22 +0000283
284
Benjamin Petersone41251e2008-04-25 01:59:09 +0000285 .. method:: unlock()
Georg Brandl116aa622007-08-15 14:28:22 +0000286
Benjamin Petersone41251e2008-04-25 01:59:09 +0000287 Release the lock on the mailbox, if any.
Georg Brandl116aa622007-08-15 14:28:22 +0000288
289
Benjamin Petersone41251e2008-04-25 01:59:09 +0000290 .. method:: close()
Georg Brandl116aa622007-08-15 14:28:22 +0000291
Benjamin Petersone41251e2008-04-25 01:59:09 +0000292 Flush the mailbox, unlock it if necessary, and close any open files. For
293 some :class:`Mailbox` subclasses, this method does nothing.
Georg Brandl116aa622007-08-15 14:28:22 +0000294
295
296.. _mailbox-maildir:
297
298:class:`Maildir`
299^^^^^^^^^^^^^^^^
300
301
Georg Brandlcd7f32b2009-06-08 09:13:45 +0000302.. class:: Maildir(dirname, factory=None, create=True)
Georg Brandl116aa622007-08-15 14:28:22 +0000303
304 A subclass of :class:`Mailbox` for mailboxes in Maildir format. Parameter
305 *factory* is a callable object that accepts a file-like message representation
306 (which behaves as if opened in binary mode) and returns a custom representation.
307 If *factory* is ``None``, :class:`MaildirMessage` is used as the default message
308 representation. If *create* is ``True``, the mailbox is created if it does not
309 exist.
310
Georg Brandlaa5b4112008-05-11 20:51:18 +0000311 It is for historical reasons that *dirname* is named as such rather than *path*.
Georg Brandl116aa622007-08-15 14:28:22 +0000312
Benjamin Petersone41251e2008-04-25 01:59:09 +0000313 Maildir is a directory-based mailbox format invented for the qmail mail
314 transfer agent and now widely supported by other programs. Messages in a
315 Maildir mailbox are stored in separate files within a common directory
316 structure. This design allows Maildir mailboxes to be accessed and modified
317 by multiple unrelated programs without data corruption, so file locking is
318 unnecessary.
Georg Brandl116aa622007-08-15 14:28:22 +0000319
Benjamin Petersone41251e2008-04-25 01:59:09 +0000320 Maildir mailboxes contain three subdirectories, namely: :file:`tmp`,
321 :file:`new`, and :file:`cur`. Messages are created momentarily in the
322 :file:`tmp` subdirectory and then moved to the :file:`new` subdirectory to
323 finalize delivery. A mail user agent may subsequently move the message to the
324 :file:`cur` subdirectory and store information about the state of the message
325 in a special "info" section appended to its file name.
Georg Brandl116aa622007-08-15 14:28:22 +0000326
Benjamin Petersone41251e2008-04-25 01:59:09 +0000327 Folders of the style introduced by the Courier mail transfer agent are also
328 supported. Any subdirectory of the main mailbox is considered a folder if
329 ``'.'`` is the first character in its name. Folder names are represented by
330 :class:`Maildir` without the leading ``'.'``. Each folder is itself a Maildir
331 mailbox but should not contain other folders. Instead, a logical nesting is
332 indicated using ``'.'`` to delimit levels, e.g., "Archived.2005.07".
Georg Brandl116aa622007-08-15 14:28:22 +0000333
Benjamin Petersone41251e2008-04-25 01:59:09 +0000334 .. note::
Georg Brandl116aa622007-08-15 14:28:22 +0000335
Benjamin Petersone41251e2008-04-25 01:59:09 +0000336 The Maildir specification requires the use of a colon (``':'``) in certain
337 message file names. However, some operating systems do not permit this
338 character in file names, If you wish to use a Maildir-like format on such
339 an operating system, you should specify another character to use
340 instead. The exclamation point (``'!'``) is a popular choice. For
341 example::
Georg Brandl116aa622007-08-15 14:28:22 +0000342
Benjamin Petersone41251e2008-04-25 01:59:09 +0000343 import mailbox
344 mailbox.Maildir.colon = '!'
Georg Brandl116aa622007-08-15 14:28:22 +0000345
Benjamin Petersone41251e2008-04-25 01:59:09 +0000346 The :attr:`colon` attribute may also be set on a per-instance basis.
Georg Brandl116aa622007-08-15 14:28:22 +0000347
Benjamin Petersone41251e2008-04-25 01:59:09 +0000348 :class:`Maildir` instances have all of the methods of :class:`Mailbox` in
349 addition to the following:
Georg Brandl116aa622007-08-15 14:28:22 +0000350
351
Benjamin Petersone41251e2008-04-25 01:59:09 +0000352 .. method:: list_folders()
Georg Brandl116aa622007-08-15 14:28:22 +0000353
Benjamin Petersone41251e2008-04-25 01:59:09 +0000354 Return a list of the names of all folders.
Georg Brandl116aa622007-08-15 14:28:22 +0000355
356
Ezio Melotti2d352d02009-09-15 18:51:37 +0000357 .. method:: get_folder(folder)
Georg Brandl116aa622007-08-15 14:28:22 +0000358
Benjamin Petersone41251e2008-04-25 01:59:09 +0000359 Return a :class:`Maildir` instance representing the folder whose name is
360 *folder*. A :exc:`NoSuchMailboxError` exception is raised if the folder
361 does not exist.
Georg Brandl116aa622007-08-15 14:28:22 +0000362
363
Benjamin Petersone41251e2008-04-25 01:59:09 +0000364 .. method:: add_folder(folder)
Georg Brandl116aa622007-08-15 14:28:22 +0000365
Benjamin Petersone41251e2008-04-25 01:59:09 +0000366 Create a folder whose name is *folder* and return a :class:`Maildir`
367 instance representing it.
Georg Brandl116aa622007-08-15 14:28:22 +0000368
369
Benjamin Petersone41251e2008-04-25 01:59:09 +0000370 .. method:: remove_folder(folder)
Georg Brandl116aa622007-08-15 14:28:22 +0000371
Benjamin Petersone41251e2008-04-25 01:59:09 +0000372 Delete the folder whose name is *folder*. If the folder contains any
373 messages, a :exc:`NotEmptyError` exception will be raised and the folder
374 will not be deleted.
Georg Brandl116aa622007-08-15 14:28:22 +0000375
376
Benjamin Petersone41251e2008-04-25 01:59:09 +0000377 .. method:: clean()
Georg Brandl116aa622007-08-15 14:28:22 +0000378
Benjamin Petersone41251e2008-04-25 01:59:09 +0000379 Delete temporary files from the mailbox that have not been accessed in the
380 last 36 hours. The Maildir specification says that mail-reading programs
381 should do this occasionally.
Georg Brandl116aa622007-08-15 14:28:22 +0000382
Benjamin Petersone41251e2008-04-25 01:59:09 +0000383 Some :class:`Mailbox` methods implemented by :class:`Maildir` deserve special
384 remarks:
Georg Brandl116aa622007-08-15 14:28:22 +0000385
386
Benjamin Petersone41251e2008-04-25 01:59:09 +0000387 .. method:: add(message)
388 __setitem__(key, message)
389 update(arg)
Georg Brandl116aa622007-08-15 14:28:22 +0000390
Benjamin Petersone41251e2008-04-25 01:59:09 +0000391 .. warning::
Georg Brandl116aa622007-08-15 14:28:22 +0000392
Benjamin Petersone41251e2008-04-25 01:59:09 +0000393 These methods generate unique file names based upon the current process
394 ID. When using multiple threads, undetected name clashes may occur and
395 cause corruption of the mailbox unless threads are coordinated to avoid
396 using these methods to manipulate the same mailbox simultaneously.
Georg Brandl116aa622007-08-15 14:28:22 +0000397
398
Benjamin Petersone41251e2008-04-25 01:59:09 +0000399 .. method:: flush()
Georg Brandl116aa622007-08-15 14:28:22 +0000400
Benjamin Petersone41251e2008-04-25 01:59:09 +0000401 All changes to Maildir mailboxes are immediately applied, so this method
402 does nothing.
Georg Brandl116aa622007-08-15 14:28:22 +0000403
404
Benjamin Petersone41251e2008-04-25 01:59:09 +0000405 .. method:: lock()
406 unlock()
Georg Brandl116aa622007-08-15 14:28:22 +0000407
Benjamin Petersone41251e2008-04-25 01:59:09 +0000408 Maildir mailboxes do not support (or require) locking, so these methods do
409 nothing.
Georg Brandl116aa622007-08-15 14:28:22 +0000410
411
Benjamin Petersone41251e2008-04-25 01:59:09 +0000412 .. method:: close()
Georg Brandl116aa622007-08-15 14:28:22 +0000413
Benjamin Petersone41251e2008-04-25 01:59:09 +0000414 :class:`Maildir` instances do not keep any open files and the underlying
415 mailboxes do not support locking, so this method does nothing.
Georg Brandl116aa622007-08-15 14:28:22 +0000416
417
Benjamin Petersone41251e2008-04-25 01:59:09 +0000418 .. method:: get_file(key)
Georg Brandl116aa622007-08-15 14:28:22 +0000419
Benjamin Petersone41251e2008-04-25 01:59:09 +0000420 Depending upon the host platform, it may not be possible to modify or
421 remove the underlying message while the returned file remains open.
Georg Brandl116aa622007-08-15 14:28:22 +0000422
423
424.. seealso::
425
426 `maildir man page from qmail <http://www.qmail.org/man/man5/maildir.html>`_
427 The original specification of the format.
428
Serhiy Storchaka6dff0202016-05-07 10:49:07 +0300429 `Using maildir format <https://cr.yp.to/proto/maildir.html>`_
Georg Brandl116aa622007-08-15 14:28:22 +0000430 Notes on Maildir by its inventor. Includes an updated name-creation scheme and
431 details on "info" semantics.
432
Christian Heimesdd15f6c2008-03-16 00:07:10 +0000433 `maildir man page from Courier <http://www.courier-mta.org/maildir.html>`_
Georg Brandl116aa622007-08-15 14:28:22 +0000434 Another specification of the format. Describes a common extension for supporting
435 folders.
436
437
438.. _mailbox-mbox:
439
440:class:`mbox`
441^^^^^^^^^^^^^
442
443
Georg Brandlcd7f32b2009-06-08 09:13:45 +0000444.. class:: mbox(path, factory=None, create=True)
Georg Brandl116aa622007-08-15 14:28:22 +0000445
446 A subclass of :class:`Mailbox` for mailboxes in mbox format. Parameter *factory*
447 is a callable object that accepts a file-like message representation (which
448 behaves as if opened in binary mode) and returns a custom representation. If
449 *factory* is ``None``, :class:`mboxMessage` is used as the default message
450 representation. If *create* is ``True``, the mailbox is created if it does not
451 exist.
452
Benjamin Petersone41251e2008-04-25 01:59:09 +0000453 The mbox format is the classic format for storing mail on Unix systems. All
454 messages in an mbox mailbox are stored in a single file with the beginning of
455 each message indicated by a line whose first five characters are "From ".
Georg Brandl116aa622007-08-15 14:28:22 +0000456
Benjamin Petersone41251e2008-04-25 01:59:09 +0000457 Several variations of the mbox format exist to address perceived shortcomings in
458 the original. In the interest of compatibility, :class:`mbox` implements the
459 original format, which is sometimes referred to as :dfn:`mboxo`. This means that
460 the :mailheader:`Content-Length` header, if present, is ignored and that any
461 occurrences of "From " at the beginning of a line in a message body are
462 transformed to ">From " when storing the message, although occurrences of ">From
463 " are not transformed to "From " when reading the message.
Georg Brandl116aa622007-08-15 14:28:22 +0000464
Benjamin Petersone41251e2008-04-25 01:59:09 +0000465 Some :class:`Mailbox` methods implemented by :class:`mbox` deserve special
466 remarks:
Georg Brandl116aa622007-08-15 14:28:22 +0000467
468
Benjamin Petersone41251e2008-04-25 01:59:09 +0000469 .. method:: get_file(key)
Georg Brandl116aa622007-08-15 14:28:22 +0000470
Benjamin Petersone41251e2008-04-25 01:59:09 +0000471 Using the file after calling :meth:`flush` or :meth:`close` on the
472 :class:`mbox` instance may yield unpredictable results or raise an
473 exception.
Georg Brandl116aa622007-08-15 14:28:22 +0000474
475
Benjamin Petersone41251e2008-04-25 01:59:09 +0000476 .. method:: lock()
477 unlock()
Georg Brandl116aa622007-08-15 14:28:22 +0000478
Benjamin Petersone41251e2008-04-25 01:59:09 +0000479 Three locking mechanisms are used---dot locking and, if available, the
Georg Brandl60203b42010-10-06 10:11:56 +0000480 :c:func:`flock` and :c:func:`lockf` system calls.
Georg Brandl116aa622007-08-15 14:28:22 +0000481
482
483.. seealso::
484
485 `mbox man page from qmail <http://www.qmail.org/man/man5/mbox.html>`_
486 A specification of the format and its variations.
487
488 `mbox man page from tin <http://www.tin.org/bin/man.cgi?section=5&topic=mbox>`_
489 Another specification of the format, with details on locking.
490
Georg Brandl5d941342016-02-26 19:37:12 +0100491 `Configuring Netscape Mail on Unix: Why The Content-Length Format is Bad <https://www.jwz.org/doc/content-length.html>`_
Georg Brandl116aa622007-08-15 14:28:22 +0000492 An argument for using the original mbox format rather than a variation.
493
jimmy4f29f3c2017-12-13 13:37:51 +0100494 `"mbox" is a family of several mutually incompatible mailbox formats <https://www.loc.gov/preservation/digital/formats/fdd/fdd000383.shtml>`_
Georg Brandl116aa622007-08-15 14:28:22 +0000495 A history of mbox variations.
496
497
498.. _mailbox-mh:
499
500:class:`MH`
501^^^^^^^^^^^
502
503
Georg Brandlcd7f32b2009-06-08 09:13:45 +0000504.. class:: MH(path, factory=None, create=True)
Georg Brandl116aa622007-08-15 14:28:22 +0000505
506 A subclass of :class:`Mailbox` for mailboxes in MH format. Parameter *factory*
507 is a callable object that accepts a file-like message representation (which
508 behaves as if opened in binary mode) and returns a custom representation. If
509 *factory* is ``None``, :class:`MHMessage` is used as the default message
510 representation. If *create* is ``True``, the mailbox is created if it does not
511 exist.
512
Benjamin Petersone41251e2008-04-25 01:59:09 +0000513 MH is a directory-based mailbox format invented for the MH Message Handling
514 System, a mail user agent. Each message in an MH mailbox resides in its own
515 file. An MH mailbox may contain other MH mailboxes (called :dfn:`folders`) in
516 addition to messages. Folders may be nested indefinitely. MH mailboxes also
517 support :dfn:`sequences`, which are named lists used to logically group
518 messages without moving them to sub-folders. Sequences are defined in a file
519 called :file:`.mh_sequences` in each folder.
Georg Brandl116aa622007-08-15 14:28:22 +0000520
Benjamin Petersone41251e2008-04-25 01:59:09 +0000521 The :class:`MH` class manipulates MH mailboxes, but it does not attempt to
522 emulate all of :program:`mh`'s behaviors. In particular, it does not modify
523 and is not affected by the :file:`context` or :file:`.mh_profile` files that
524 are used by :program:`mh` to store its state and configuration.
Georg Brandl116aa622007-08-15 14:28:22 +0000525
Benjamin Petersone41251e2008-04-25 01:59:09 +0000526 :class:`MH` instances have all of the methods of :class:`Mailbox` in addition
527 to the following:
Georg Brandl116aa622007-08-15 14:28:22 +0000528
529
Benjamin Petersone41251e2008-04-25 01:59:09 +0000530 .. method:: list_folders()
Georg Brandl116aa622007-08-15 14:28:22 +0000531
Benjamin Petersone41251e2008-04-25 01:59:09 +0000532 Return a list of the names of all folders.
Georg Brandl116aa622007-08-15 14:28:22 +0000533
534
Benjamin Petersone41251e2008-04-25 01:59:09 +0000535 .. method:: get_folder(folder)
Georg Brandl116aa622007-08-15 14:28:22 +0000536
Benjamin Petersone41251e2008-04-25 01:59:09 +0000537 Return an :class:`MH` instance representing the folder whose name is
538 *folder*. A :exc:`NoSuchMailboxError` exception is raised if the folder
539 does not exist.
Georg Brandl116aa622007-08-15 14:28:22 +0000540
541
Benjamin Petersone41251e2008-04-25 01:59:09 +0000542 .. method:: add_folder(folder)
Georg Brandl116aa622007-08-15 14:28:22 +0000543
Benjamin Petersone41251e2008-04-25 01:59:09 +0000544 Create a folder whose name is *folder* and return an :class:`MH` instance
545 representing it.
Georg Brandl116aa622007-08-15 14:28:22 +0000546
547
Benjamin Petersone41251e2008-04-25 01:59:09 +0000548 .. method:: remove_folder(folder)
Georg Brandl116aa622007-08-15 14:28:22 +0000549
Benjamin Petersone41251e2008-04-25 01:59:09 +0000550 Delete the folder whose name is *folder*. If the folder contains any
551 messages, a :exc:`NotEmptyError` exception will be raised and the folder
552 will not be deleted.
Georg Brandl116aa622007-08-15 14:28:22 +0000553
554
Benjamin Petersone41251e2008-04-25 01:59:09 +0000555 .. method:: get_sequences()
Georg Brandl116aa622007-08-15 14:28:22 +0000556
Benjamin Petersone41251e2008-04-25 01:59:09 +0000557 Return a dictionary of sequence names mapped to key lists. If there are no
558 sequences, the empty dictionary is returned.
Georg Brandl116aa622007-08-15 14:28:22 +0000559
560
Benjamin Petersone41251e2008-04-25 01:59:09 +0000561 .. method:: set_sequences(sequences)
Georg Brandl116aa622007-08-15 14:28:22 +0000562
Benjamin Petersone41251e2008-04-25 01:59:09 +0000563 Re-define the sequences that exist in the mailbox based upon *sequences*,
564 a dictionary of names mapped to key lists, like returned by
565 :meth:`get_sequences`.
Georg Brandl116aa622007-08-15 14:28:22 +0000566
567
Benjamin Petersone41251e2008-04-25 01:59:09 +0000568 .. method:: pack()
Georg Brandl116aa622007-08-15 14:28:22 +0000569
Benjamin Petersone41251e2008-04-25 01:59:09 +0000570 Rename messages in the mailbox as necessary to eliminate gaps in
571 numbering. Entries in the sequences list are updated correspondingly.
Georg Brandl116aa622007-08-15 14:28:22 +0000572
Benjamin Petersone41251e2008-04-25 01:59:09 +0000573 .. note::
Georg Brandl116aa622007-08-15 14:28:22 +0000574
Benjamin Petersone41251e2008-04-25 01:59:09 +0000575 Already-issued keys are invalidated by this operation and should not be
576 subsequently used.
Georg Brandl116aa622007-08-15 14:28:22 +0000577
Benjamin Petersone41251e2008-04-25 01:59:09 +0000578 Some :class:`Mailbox` methods implemented by :class:`MH` deserve special
579 remarks:
Georg Brandl116aa622007-08-15 14:28:22 +0000580
581
Benjamin Petersone41251e2008-04-25 01:59:09 +0000582 .. method:: remove(key)
583 __delitem__(key)
584 discard(key)
Georg Brandl116aa622007-08-15 14:28:22 +0000585
Benjamin Petersone41251e2008-04-25 01:59:09 +0000586 These methods immediately delete the message. The MH convention of marking
587 a message for deletion by prepending a comma to its name is not used.
Georg Brandl116aa622007-08-15 14:28:22 +0000588
589
Benjamin Petersone41251e2008-04-25 01:59:09 +0000590 .. method:: lock()
591 unlock()
Georg Brandl116aa622007-08-15 14:28:22 +0000592
Benjamin Petersone41251e2008-04-25 01:59:09 +0000593 Three locking mechanisms are used---dot locking and, if available, the
Georg Brandl60203b42010-10-06 10:11:56 +0000594 :c:func:`flock` and :c:func:`lockf` system calls. For MH mailboxes, locking
Benjamin Petersone41251e2008-04-25 01:59:09 +0000595 the mailbox means locking the :file:`.mh_sequences` file and, only for the
596 duration of any operations that affect them, locking individual message
597 files.
Georg Brandl116aa622007-08-15 14:28:22 +0000598
599
Benjamin Petersone41251e2008-04-25 01:59:09 +0000600 .. method:: get_file(key)
Georg Brandl116aa622007-08-15 14:28:22 +0000601
Benjamin Petersone41251e2008-04-25 01:59:09 +0000602 Depending upon the host platform, it may not be possible to remove the
603 underlying message while the returned file remains open.
Georg Brandl116aa622007-08-15 14:28:22 +0000604
605
Benjamin Petersone41251e2008-04-25 01:59:09 +0000606 .. method:: flush()
Georg Brandl116aa622007-08-15 14:28:22 +0000607
Benjamin Petersone41251e2008-04-25 01:59:09 +0000608 All changes to MH mailboxes are immediately applied, so this method does
609 nothing.
Georg Brandl116aa622007-08-15 14:28:22 +0000610
611
Benjamin Petersone41251e2008-04-25 01:59:09 +0000612 .. method:: close()
Georg Brandl116aa622007-08-15 14:28:22 +0000613
Benjamin Petersone41251e2008-04-25 01:59:09 +0000614 :class:`MH` instances do not keep any open files, so this method is
615 equivalent to :meth:`unlock`.
Georg Brandl116aa622007-08-15 14:28:22 +0000616
617
618.. seealso::
619
620 `nmh - Message Handling System <http://www.nongnu.org/nmh/>`_
621 Home page of :program:`nmh`, an updated version of the original :program:`mh`.
622
Sanyam Khurana338cd832018-01-20 05:55:37 +0530623 `MH & nmh: Email for Users & Programmers <https://rand-mh.sourceforge.io/book/>`_
Georg Brandl116aa622007-08-15 14:28:22 +0000624 A GPL-licensed book on :program:`mh` and :program:`nmh`, with some information
625 on the mailbox format.
626
627
628.. _mailbox-babyl:
629
630:class:`Babyl`
631^^^^^^^^^^^^^^
632
633
Georg Brandlcd7f32b2009-06-08 09:13:45 +0000634.. class:: Babyl(path, factory=None, create=True)
Georg Brandl116aa622007-08-15 14:28:22 +0000635
636 A subclass of :class:`Mailbox` for mailboxes in Babyl format. Parameter
637 *factory* is a callable object that accepts a file-like message representation
638 (which behaves as if opened in binary mode) and returns a custom representation.
639 If *factory* is ``None``, :class:`BabylMessage` is used as the default message
640 representation. If *create* is ``True``, the mailbox is created if it does not
641 exist.
642
Benjamin Petersone41251e2008-04-25 01:59:09 +0000643 Babyl is a single-file mailbox format used by the Rmail mail user agent
644 included with Emacs. The beginning of a message is indicated by a line
645 containing the two characters Control-Underscore (``'\037'``) and Control-L
646 (``'\014'``). The end of a message is indicated by the start of the next
647 message or, in the case of the last message, a line containing a
648 Control-Underscore (``'\037'``) character.
Georg Brandl116aa622007-08-15 14:28:22 +0000649
Benjamin Petersone41251e2008-04-25 01:59:09 +0000650 Messages in a Babyl mailbox have two sets of headers, original headers and
651 so-called visible headers. Visible headers are typically a subset of the
652 original headers that have been reformatted or abridged to be more
653 attractive. Each message in a Babyl mailbox also has an accompanying list of
654 :dfn:`labels`, or short strings that record extra information about the
655 message, and a list of all user-defined labels found in the mailbox is kept
656 in the Babyl options section.
Georg Brandl116aa622007-08-15 14:28:22 +0000657
Benjamin Petersone41251e2008-04-25 01:59:09 +0000658 :class:`Babyl` instances have all of the methods of :class:`Mailbox` in
659 addition to the following:
Georg Brandl116aa622007-08-15 14:28:22 +0000660
661
Benjamin Petersone41251e2008-04-25 01:59:09 +0000662 .. method:: get_labels()
Georg Brandl116aa622007-08-15 14:28:22 +0000663
Benjamin Petersone41251e2008-04-25 01:59:09 +0000664 Return a list of the names of all user-defined labels used in the mailbox.
Georg Brandl116aa622007-08-15 14:28:22 +0000665
Benjamin Petersone41251e2008-04-25 01:59:09 +0000666 .. note::
Georg Brandl116aa622007-08-15 14:28:22 +0000667
Benjamin Petersone41251e2008-04-25 01:59:09 +0000668 The actual messages are inspected to determine which labels exist in
669 the mailbox rather than consulting the list of labels in the Babyl
670 options section, but the Babyl section is updated whenever the mailbox
671 is modified.
Georg Brandl116aa622007-08-15 14:28:22 +0000672
Benjamin Petersone41251e2008-04-25 01:59:09 +0000673 Some :class:`Mailbox` methods implemented by :class:`Babyl` deserve special
674 remarks:
Georg Brandl116aa622007-08-15 14:28:22 +0000675
676
Benjamin Petersone41251e2008-04-25 01:59:09 +0000677 .. method:: get_file(key)
Georg Brandl116aa622007-08-15 14:28:22 +0000678
Benjamin Petersone41251e2008-04-25 01:59:09 +0000679 In Babyl mailboxes, the headers of a message are not stored contiguously
680 with the body of the message. To generate a file-like representation, the
Martin Panter7462b6492015-11-02 03:37:02 +0000681 headers and body are copied together into an :class:`io.BytesIO` instance,
Serhiy Storchakae79be872013-08-17 00:09:55 +0300682 which has an API identical to that of a
Benjamin Petersone41251e2008-04-25 01:59:09 +0000683 file. As a result, the file-like object is truly independent of the
684 underlying mailbox but does not save memory compared to a string
685 representation.
Georg Brandl116aa622007-08-15 14:28:22 +0000686
687
Benjamin Petersone41251e2008-04-25 01:59:09 +0000688 .. method:: lock()
689 unlock()
Georg Brandl116aa622007-08-15 14:28:22 +0000690
Benjamin Petersone41251e2008-04-25 01:59:09 +0000691 Three locking mechanisms are used---dot locking and, if available, the
Georg Brandl60203b42010-10-06 10:11:56 +0000692 :c:func:`flock` and :c:func:`lockf` system calls.
Georg Brandl116aa622007-08-15 14:28:22 +0000693
694
695.. seealso::
696
Serhiy Storchaka6dff0202016-05-07 10:49:07 +0300697 `Format of Version 5 Babyl Files <https://quimby.gnus.org/notes/BABYL>`_
Georg Brandl116aa622007-08-15 14:28:22 +0000698 A specification of the Babyl format.
699
Serhiy Storchaka6dff0202016-05-07 10:49:07 +0300700 `Reading Mail with Rmail <https://www.gnu.org/software/emacs/manual/html_node/emacs/Rmail.html>`_
Georg Brandl116aa622007-08-15 14:28:22 +0000701 The Rmail manual, with some information on Babyl semantics.
702
703
704.. _mailbox-mmdf:
705
706:class:`MMDF`
707^^^^^^^^^^^^^
708
709
Georg Brandlcd7f32b2009-06-08 09:13:45 +0000710.. class:: MMDF(path, factory=None, create=True)
Georg Brandl116aa622007-08-15 14:28:22 +0000711
712 A subclass of :class:`Mailbox` for mailboxes in MMDF format. Parameter *factory*
713 is a callable object that accepts a file-like message representation (which
714 behaves as if opened in binary mode) and returns a custom representation. If
715 *factory* is ``None``, :class:`MMDFMessage` is used as the default message
716 representation. If *create* is ``True``, the mailbox is created if it does not
717 exist.
718
Benjamin Petersone41251e2008-04-25 01:59:09 +0000719 MMDF is a single-file mailbox format invented for the Multichannel Memorandum
720 Distribution Facility, a mail transfer agent. Each message is in the same
721 form as an mbox message but is bracketed before and after by lines containing
722 four Control-A (``'\001'``) characters. As with the mbox format, the
723 beginning of each message is indicated by a line whose first five characters
724 are "From ", but additional occurrences of "From " are not transformed to
725 ">From " when storing messages because the extra message separator lines
726 prevent mistaking such occurrences for the starts of subsequent messages.
Georg Brandl116aa622007-08-15 14:28:22 +0000727
Benjamin Petersone41251e2008-04-25 01:59:09 +0000728 Some :class:`Mailbox` methods implemented by :class:`MMDF` deserve special
729 remarks:
Georg Brandl116aa622007-08-15 14:28:22 +0000730
731
Benjamin Petersone41251e2008-04-25 01:59:09 +0000732 .. method:: get_file(key)
Georg Brandl116aa622007-08-15 14:28:22 +0000733
Benjamin Petersone41251e2008-04-25 01:59:09 +0000734 Using the file after calling :meth:`flush` or :meth:`close` on the
735 :class:`MMDF` instance may yield unpredictable results or raise an
736 exception.
Georg Brandl116aa622007-08-15 14:28:22 +0000737
738
Benjamin Petersone41251e2008-04-25 01:59:09 +0000739 .. method:: lock()
740 unlock()
Georg Brandl116aa622007-08-15 14:28:22 +0000741
Benjamin Petersone41251e2008-04-25 01:59:09 +0000742 Three locking mechanisms are used---dot locking and, if available, the
Georg Brandl60203b42010-10-06 10:11:56 +0000743 :c:func:`flock` and :c:func:`lockf` system calls.
Georg Brandl116aa622007-08-15 14:28:22 +0000744
745
746.. seealso::
747
748 `mmdf man page from tin <http://www.tin.org/bin/man.cgi?section=5&topic=mmdf>`_
749 A specification of MMDF format from the documentation of tin, a newsreader.
750
Georg Brandl5d941342016-02-26 19:37:12 +0100751 `MMDF <https://en.wikipedia.org/wiki/MMDF>`_
Georg Brandl116aa622007-08-15 14:28:22 +0000752 A Wikipedia article describing the Multichannel Memorandum Distribution
753 Facility.
754
755
756.. _mailbox-message-objects:
757
758:class:`Message` objects
759------------------------
760
761
Georg Brandlcd7f32b2009-06-08 09:13:45 +0000762.. class:: Message(message=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000763
R David Murrayc5fe4072012-09-28 15:09:31 -0400764 A subclass of the :mod:`email.message` module's
765 :class:`~email.message.Message`. Subclasses of :class:`mailbox.Message` add
766 mailbox-format-specific state and behavior.
Georg Brandl116aa622007-08-15 14:28:22 +0000767
768 If *message* is omitted, the new instance is created in a default, empty state.
R David Murrayc5fe4072012-09-28 15:09:31 -0400769 If *message* is an :class:`email.message.Message` instance, its contents are
Georg Brandl116aa622007-08-15 14:28:22 +0000770 copied; furthermore, any format-specific information is converted insofar as
R. David Murrayb7deff12011-01-30 06:21:28 +0000771 possible if *message* is a :class:`Message` instance. If *message* is a string,
772 a byte string,
Georg Brandl116aa622007-08-15 14:28:22 +0000773 or a file, it should contain an :rfc:`2822`\ -compliant message, which is read
R. David Murrayb7deff12011-01-30 06:21:28 +0000774 and parsed. Files should be open in binary mode, but text mode files
775 are accepted for backward compatibility.
Georg Brandl116aa622007-08-15 14:28:22 +0000776
Benjamin Petersone41251e2008-04-25 01:59:09 +0000777 The format-specific state and behaviors offered by subclasses vary, but in
778 general it is only the properties that are not specific to a particular
779 mailbox that are supported (although presumably the properties are specific
780 to a particular mailbox format). For example, file offsets for single-file
781 mailbox formats and file names for directory-based mailbox formats are not
782 retained, because they are only applicable to the original mailbox. But state
783 such as whether a message has been read by the user or marked as important is
784 retained, because it applies to the message itself.
Georg Brandl116aa622007-08-15 14:28:22 +0000785
Benjamin Petersone41251e2008-04-25 01:59:09 +0000786 There is no requirement that :class:`Message` instances be used to represent
787 messages retrieved using :class:`Mailbox` instances. In some situations, the
788 time and memory required to generate :class:`Message` representations might
Ezio Melottie130a522011-10-19 10:58:56 +0300789 not be acceptable. For such situations, :class:`Mailbox` instances also
Benjamin Petersone41251e2008-04-25 01:59:09 +0000790 offer string and file-like representations, and a custom message factory may
791 be specified when a :class:`Mailbox` instance is initialized.
Georg Brandl116aa622007-08-15 14:28:22 +0000792
793
794.. _mailbox-maildirmessage:
795
796:class:`MaildirMessage`
797^^^^^^^^^^^^^^^^^^^^^^^
798
799
Georg Brandlcd7f32b2009-06-08 09:13:45 +0000800.. class:: MaildirMessage(message=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000801
802 A message with Maildir-specific behaviors. Parameter *message* has the same
803 meaning as with the :class:`Message` constructor.
804
Benjamin Petersone41251e2008-04-25 01:59:09 +0000805 Typically, a mail user agent application moves all of the messages in the
806 :file:`new` subdirectory to the :file:`cur` subdirectory after the first time
807 the user opens and closes the mailbox, recording that the messages are old
808 whether or not they've actually been read. Each message in :file:`cur` has an
809 "info" section added to its file name to store information about its state.
810 (Some mail readers may also add an "info" section to messages in
811 :file:`new`.) The "info" section may take one of two forms: it may contain
812 "2," followed by a list of standardized flags (e.g., "2,FR") or it may
813 contain "1," followed by so-called experimental information. Standard flags
814 for Maildir messages are as follows:
Georg Brandl116aa622007-08-15 14:28:22 +0000815
Benjamin Petersone41251e2008-04-25 01:59:09 +0000816 +------+---------+--------------------------------+
817 | Flag | Meaning | Explanation |
818 +======+=========+================================+
819 | D | Draft | Under composition |
820 +------+---------+--------------------------------+
821 | F | Flagged | Marked as important |
822 +------+---------+--------------------------------+
823 | P | Passed | Forwarded, resent, or bounced |
824 +------+---------+--------------------------------+
825 | R | Replied | Replied to |
826 +------+---------+--------------------------------+
827 | S | Seen | Read |
828 +------+---------+--------------------------------+
829 | T | Trashed | Marked for subsequent deletion |
830 +------+---------+--------------------------------+
Georg Brandl116aa622007-08-15 14:28:22 +0000831
Benjamin Petersone41251e2008-04-25 01:59:09 +0000832 :class:`MaildirMessage` instances offer the following methods:
Georg Brandl116aa622007-08-15 14:28:22 +0000833
834
Benjamin Petersone41251e2008-04-25 01:59:09 +0000835 .. method:: get_subdir()
Georg Brandl116aa622007-08-15 14:28:22 +0000836
Benjamin Petersone41251e2008-04-25 01:59:09 +0000837 Return either "new" (if the message should be stored in the :file:`new`
838 subdirectory) or "cur" (if the message should be stored in the :file:`cur`
839 subdirectory).
Georg Brandl116aa622007-08-15 14:28:22 +0000840
Benjamin Petersone41251e2008-04-25 01:59:09 +0000841 .. note::
Georg Brandl116aa622007-08-15 14:28:22 +0000842
Benjamin Petersone41251e2008-04-25 01:59:09 +0000843 A message is typically moved from :file:`new` to :file:`cur` after its
844 mailbox has been accessed, whether or not the message is has been
845 read. A message ``msg`` has been read if ``"S" in msg.get_flags()`` is
846 ``True``.
Georg Brandl116aa622007-08-15 14:28:22 +0000847
848
Benjamin Petersone41251e2008-04-25 01:59:09 +0000849 .. method:: set_subdir(subdir)
Georg Brandl116aa622007-08-15 14:28:22 +0000850
Benjamin Petersone41251e2008-04-25 01:59:09 +0000851 Set the subdirectory the message should be stored in. Parameter *subdir*
852 must be either "new" or "cur".
Georg Brandl116aa622007-08-15 14:28:22 +0000853
854
Benjamin Petersone41251e2008-04-25 01:59:09 +0000855 .. method:: get_flags()
Georg Brandl116aa622007-08-15 14:28:22 +0000856
Benjamin Petersone41251e2008-04-25 01:59:09 +0000857 Return a string specifying the flags that are currently set. If the
858 message complies with the standard Maildir format, the result is the
859 concatenation in alphabetical order of zero or one occurrence of each of
860 ``'D'``, ``'F'``, ``'P'``, ``'R'``, ``'S'``, and ``'T'``. The empty string
861 is returned if no flags are set or if "info" contains experimental
862 semantics.
Georg Brandl116aa622007-08-15 14:28:22 +0000863
864
Benjamin Petersone41251e2008-04-25 01:59:09 +0000865 .. method:: set_flags(flags)
Georg Brandl116aa622007-08-15 14:28:22 +0000866
Benjamin Petersone41251e2008-04-25 01:59:09 +0000867 Set the flags specified by *flags* and unset all others.
Georg Brandl116aa622007-08-15 14:28:22 +0000868
869
Benjamin Petersone41251e2008-04-25 01:59:09 +0000870 .. method:: add_flag(flag)
Georg Brandl116aa622007-08-15 14:28:22 +0000871
Benjamin Petersone41251e2008-04-25 01:59:09 +0000872 Set the flag(s) specified by *flag* without changing other flags. To add
873 more than one flag at a time, *flag* may be a string of more than one
874 character. The current "info" is overwritten whether or not it contains
875 experimental information rather than flags.
Georg Brandl116aa622007-08-15 14:28:22 +0000876
877
Benjamin Petersone41251e2008-04-25 01:59:09 +0000878 .. method:: remove_flag(flag)
Georg Brandl116aa622007-08-15 14:28:22 +0000879
Benjamin Petersone41251e2008-04-25 01:59:09 +0000880 Unset the flag(s) specified by *flag* without changing other flags. To
881 remove more than one flag at a time, *flag* maybe a string of more than
882 one character. If "info" contains experimental information rather than
883 flags, the current "info" is not modified.
Georg Brandl116aa622007-08-15 14:28:22 +0000884
885
Benjamin Petersone41251e2008-04-25 01:59:09 +0000886 .. method:: get_date()
Georg Brandl116aa622007-08-15 14:28:22 +0000887
Benjamin Petersone41251e2008-04-25 01:59:09 +0000888 Return the delivery date of the message as a floating-point number
889 representing seconds since the epoch.
Georg Brandl116aa622007-08-15 14:28:22 +0000890
891
Benjamin Petersone41251e2008-04-25 01:59:09 +0000892 .. method:: set_date(date)
Georg Brandl116aa622007-08-15 14:28:22 +0000893
Benjamin Petersone41251e2008-04-25 01:59:09 +0000894 Set the delivery date of the message to *date*, a floating-point number
895 representing seconds since the epoch.
Georg Brandl116aa622007-08-15 14:28:22 +0000896
897
Benjamin Petersone41251e2008-04-25 01:59:09 +0000898 .. method:: get_info()
Georg Brandl116aa622007-08-15 14:28:22 +0000899
Benjamin Petersone41251e2008-04-25 01:59:09 +0000900 Return a string containing the "info" for a message. This is useful for
901 accessing and modifying "info" that is experimental (i.e., not a list of
902 flags).
Georg Brandl116aa622007-08-15 14:28:22 +0000903
904
Benjamin Petersone41251e2008-04-25 01:59:09 +0000905 .. method:: set_info(info)
Georg Brandl116aa622007-08-15 14:28:22 +0000906
Benjamin Petersone41251e2008-04-25 01:59:09 +0000907 Set "info" to *info*, which should be a string.
Georg Brandl116aa622007-08-15 14:28:22 +0000908
909When a :class:`MaildirMessage` instance is created based upon an
910:class:`mboxMessage` or :class:`MMDFMessage` instance, the :mailheader:`Status`
911and :mailheader:`X-Status` headers are omitted and the following conversions
912take place:
913
914+--------------------+----------------------------------------------+
915| Resulting state | :class:`mboxMessage` or :class:`MMDFMessage` |
916| | state |
917+====================+==============================================+
918| "cur" subdirectory | O flag |
919+--------------------+----------------------------------------------+
920| F flag | F flag |
921+--------------------+----------------------------------------------+
922| R flag | A flag |
923+--------------------+----------------------------------------------+
924| S flag | R flag |
925+--------------------+----------------------------------------------+
926| T flag | D flag |
927+--------------------+----------------------------------------------+
928
929When a :class:`MaildirMessage` instance is created based upon an
930:class:`MHMessage` instance, the following conversions take place:
931
932+-------------------------------+--------------------------+
933| Resulting state | :class:`MHMessage` state |
934+===============================+==========================+
935| "cur" subdirectory | "unseen" sequence |
936+-------------------------------+--------------------------+
937| "cur" subdirectory and S flag | no "unseen" sequence |
938+-------------------------------+--------------------------+
939| F flag | "flagged" sequence |
940+-------------------------------+--------------------------+
941| R flag | "replied" sequence |
942+-------------------------------+--------------------------+
943
944When a :class:`MaildirMessage` instance is created based upon a
945:class:`BabylMessage` instance, the following conversions take place:
946
947+-------------------------------+-------------------------------+
948| Resulting state | :class:`BabylMessage` state |
949+===============================+===============================+
950| "cur" subdirectory | "unseen" label |
951+-------------------------------+-------------------------------+
952| "cur" subdirectory and S flag | no "unseen" label |
953+-------------------------------+-------------------------------+
954| P flag | "forwarded" or "resent" label |
955+-------------------------------+-------------------------------+
956| R flag | "answered" label |
957+-------------------------------+-------------------------------+
958| T flag | "deleted" label |
959+-------------------------------+-------------------------------+
960
961
962.. _mailbox-mboxmessage:
963
964:class:`mboxMessage`
965^^^^^^^^^^^^^^^^^^^^
966
967
Georg Brandlcd7f32b2009-06-08 09:13:45 +0000968.. class:: mboxMessage(message=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000969
970 A message with mbox-specific behaviors. Parameter *message* has the same meaning
971 as with the :class:`Message` constructor.
972
Benjamin Petersone41251e2008-04-25 01:59:09 +0000973 Messages in an mbox mailbox are stored together in a single file. The
974 sender's envelope address and the time of delivery are typically stored in a
975 line beginning with "From " that is used to indicate the start of a message,
976 though there is considerable variation in the exact format of this data among
977 mbox implementations. Flags that indicate the state of the message, such as
978 whether it has been read or marked as important, are typically stored in
979 :mailheader:`Status` and :mailheader:`X-Status` headers.
Georg Brandl116aa622007-08-15 14:28:22 +0000980
Benjamin Petersone41251e2008-04-25 01:59:09 +0000981 Conventional flags for mbox messages are as follows:
Georg Brandl116aa622007-08-15 14:28:22 +0000982
Benjamin Petersone41251e2008-04-25 01:59:09 +0000983 +------+----------+--------------------------------+
984 | Flag | Meaning | Explanation |
985 +======+==========+================================+
986 | R | Read | Read |
987 +------+----------+--------------------------------+
988 | O | Old | Previously detected by MUA |
989 +------+----------+--------------------------------+
990 | D | Deleted | Marked for subsequent deletion |
991 +------+----------+--------------------------------+
992 | F | Flagged | Marked as important |
993 +------+----------+--------------------------------+
994 | A | Answered | Replied to |
995 +------+----------+--------------------------------+
Georg Brandl116aa622007-08-15 14:28:22 +0000996
Benjamin Petersone41251e2008-04-25 01:59:09 +0000997 The "R" and "O" flags are stored in the :mailheader:`Status` header, and the
998 "D", "F", and "A" flags are stored in the :mailheader:`X-Status` header. The
999 flags and headers typically appear in the order mentioned.
Georg Brandl116aa622007-08-15 14:28:22 +00001000
Benjamin Petersone41251e2008-04-25 01:59:09 +00001001 :class:`mboxMessage` instances offer the following methods:
Georg Brandl116aa622007-08-15 14:28:22 +00001002
1003
Benjamin Petersone41251e2008-04-25 01:59:09 +00001004 .. method:: get_from()
Georg Brandl116aa622007-08-15 14:28:22 +00001005
Benjamin Petersone41251e2008-04-25 01:59:09 +00001006 Return a string representing the "From " line that marks the start of the
1007 message in an mbox mailbox. The leading "From " and the trailing newline
1008 are excluded.
Georg Brandl116aa622007-08-15 14:28:22 +00001009
1010
Georg Brandlcd7f32b2009-06-08 09:13:45 +00001011 .. method:: set_from(from_, time_=None)
Georg Brandl116aa622007-08-15 14:28:22 +00001012
Benjamin Petersone41251e2008-04-25 01:59:09 +00001013 Set the "From " line to *from_*, which should be specified without a
1014 leading "From " or trailing newline. For convenience, *time_* may be
1015 specified and will be formatted appropriately and appended to *from_*. If
Serhiy Storchakabfdcd432013-10-13 23:09:14 +03001016 *time_* is specified, it should be a :class:`time.struct_time` instance, a
Benjamin Petersone41251e2008-04-25 01:59:09 +00001017 tuple suitable for passing to :meth:`time.strftime`, or ``True`` (to use
1018 :meth:`time.gmtime`).
Georg Brandl116aa622007-08-15 14:28:22 +00001019
1020
Benjamin Petersone41251e2008-04-25 01:59:09 +00001021 .. method:: get_flags()
Georg Brandl116aa622007-08-15 14:28:22 +00001022
Benjamin Petersone41251e2008-04-25 01:59:09 +00001023 Return a string specifying the flags that are currently set. If the
1024 message complies with the conventional format, the result is the
1025 concatenation in the following order of zero or one occurrence of each of
1026 ``'R'``, ``'O'``, ``'D'``, ``'F'``, and ``'A'``.
Georg Brandl116aa622007-08-15 14:28:22 +00001027
1028
Benjamin Petersone41251e2008-04-25 01:59:09 +00001029 .. method:: set_flags(flags)
Georg Brandl116aa622007-08-15 14:28:22 +00001030
Benjamin Petersone41251e2008-04-25 01:59:09 +00001031 Set the flags specified by *flags* and unset all others. Parameter *flags*
1032 should be the concatenation in any order of zero or more occurrences of
1033 each of ``'R'``, ``'O'``, ``'D'``, ``'F'``, and ``'A'``.
Georg Brandl116aa622007-08-15 14:28:22 +00001034
1035
Benjamin Petersone41251e2008-04-25 01:59:09 +00001036 .. method:: add_flag(flag)
Georg Brandl116aa622007-08-15 14:28:22 +00001037
Benjamin Petersone41251e2008-04-25 01:59:09 +00001038 Set the flag(s) specified by *flag* without changing other flags. To add
1039 more than one flag at a time, *flag* may be a string of more than one
1040 character.
Georg Brandl116aa622007-08-15 14:28:22 +00001041
1042
Benjamin Petersone41251e2008-04-25 01:59:09 +00001043 .. method:: remove_flag(flag)
Georg Brandl116aa622007-08-15 14:28:22 +00001044
Benjamin Petersone41251e2008-04-25 01:59:09 +00001045 Unset the flag(s) specified by *flag* without changing other flags. To
1046 remove more than one flag at a time, *flag* maybe a string of more than
1047 one character.
Georg Brandl116aa622007-08-15 14:28:22 +00001048
1049When an :class:`mboxMessage` instance is created based upon a
1050:class:`MaildirMessage` instance, a "From " line is generated based upon the
1051:class:`MaildirMessage` instance's delivery date, and the following conversions
1052take place:
1053
1054+-----------------+-------------------------------+
1055| Resulting state | :class:`MaildirMessage` state |
1056+=================+===============================+
1057| R flag | S flag |
1058+-----------------+-------------------------------+
1059| O flag | "cur" subdirectory |
1060+-----------------+-------------------------------+
1061| D flag | T flag |
1062+-----------------+-------------------------------+
1063| F flag | F flag |
1064+-----------------+-------------------------------+
1065| A flag | R flag |
1066+-----------------+-------------------------------+
1067
1068When an :class:`mboxMessage` instance is created based upon an
1069:class:`MHMessage` instance, the following conversions take place:
1070
1071+-------------------+--------------------------+
1072| Resulting state | :class:`MHMessage` state |
1073+===================+==========================+
1074| R flag and O flag | no "unseen" sequence |
1075+-------------------+--------------------------+
1076| O flag | "unseen" sequence |
1077+-------------------+--------------------------+
1078| F flag | "flagged" sequence |
1079+-------------------+--------------------------+
1080| A flag | "replied" sequence |
1081+-------------------+--------------------------+
1082
1083When an :class:`mboxMessage` instance is created based upon a
1084:class:`BabylMessage` instance, the following conversions take place:
1085
1086+-------------------+-----------------------------+
1087| Resulting state | :class:`BabylMessage` state |
1088+===================+=============================+
1089| R flag and O flag | no "unseen" label |
1090+-------------------+-----------------------------+
1091| O flag | "unseen" label |
1092+-------------------+-----------------------------+
1093| D flag | "deleted" label |
1094+-------------------+-----------------------------+
1095| A flag | "answered" label |
1096+-------------------+-----------------------------+
1097
1098When a :class:`Message` instance is created based upon an :class:`MMDFMessage`
1099instance, the "From " line is copied and all flags directly correspond:
1100
1101+-----------------+----------------------------+
1102| Resulting state | :class:`MMDFMessage` state |
1103+=================+============================+
1104| R flag | R flag |
1105+-----------------+----------------------------+
1106| O flag | O flag |
1107+-----------------+----------------------------+
1108| D flag | D flag |
1109+-----------------+----------------------------+
1110| F flag | F flag |
1111+-----------------+----------------------------+
1112| A flag | A flag |
1113+-----------------+----------------------------+
1114
1115
1116.. _mailbox-mhmessage:
1117
1118:class:`MHMessage`
1119^^^^^^^^^^^^^^^^^^
1120
1121
Georg Brandlcd7f32b2009-06-08 09:13:45 +00001122.. class:: MHMessage(message=None)
Georg Brandl116aa622007-08-15 14:28:22 +00001123
1124 A message with MH-specific behaviors. Parameter *message* has the same meaning
1125 as with the :class:`Message` constructor.
1126
Benjamin Petersone41251e2008-04-25 01:59:09 +00001127 MH messages do not support marks or flags in the traditional sense, but they
1128 do support sequences, which are logical groupings of arbitrary messages. Some
1129 mail reading programs (although not the standard :program:`mh` and
1130 :program:`nmh`) use sequences in much the same way flags are used with other
1131 formats, as follows:
Georg Brandl116aa622007-08-15 14:28:22 +00001132
Benjamin Petersone41251e2008-04-25 01:59:09 +00001133 +----------+------------------------------------------+
1134 | Sequence | Explanation |
1135 +==========+==========================================+
1136 | unseen | Not read, but previously detected by MUA |
1137 +----------+------------------------------------------+
1138 | replied | Replied to |
1139 +----------+------------------------------------------+
1140 | flagged | Marked as important |
1141 +----------+------------------------------------------+
Georg Brandl116aa622007-08-15 14:28:22 +00001142
Benjamin Petersone41251e2008-04-25 01:59:09 +00001143 :class:`MHMessage` instances offer the following methods:
Georg Brandl116aa622007-08-15 14:28:22 +00001144
1145
Benjamin Petersone41251e2008-04-25 01:59:09 +00001146 .. method:: get_sequences()
Georg Brandl116aa622007-08-15 14:28:22 +00001147
Benjamin Petersone41251e2008-04-25 01:59:09 +00001148 Return a list of the names of sequences that include this message.
Georg Brandl116aa622007-08-15 14:28:22 +00001149
1150
Benjamin Petersone41251e2008-04-25 01:59:09 +00001151 .. method:: set_sequences(sequences)
Georg Brandl116aa622007-08-15 14:28:22 +00001152
Benjamin Petersone41251e2008-04-25 01:59:09 +00001153 Set the list of sequences that include this message.
Georg Brandl116aa622007-08-15 14:28:22 +00001154
1155
Benjamin Petersone41251e2008-04-25 01:59:09 +00001156 .. method:: add_sequence(sequence)
Georg Brandl116aa622007-08-15 14:28:22 +00001157
Benjamin Petersone41251e2008-04-25 01:59:09 +00001158 Add *sequence* to the list of sequences that include this message.
Georg Brandl116aa622007-08-15 14:28:22 +00001159
1160
Benjamin Petersone41251e2008-04-25 01:59:09 +00001161 .. method:: remove_sequence(sequence)
Georg Brandl116aa622007-08-15 14:28:22 +00001162
Benjamin Petersone41251e2008-04-25 01:59:09 +00001163 Remove *sequence* from the list of sequences that include this message.
Georg Brandl116aa622007-08-15 14:28:22 +00001164
1165When an :class:`MHMessage` instance is created based upon a
1166:class:`MaildirMessage` instance, the following conversions take place:
1167
1168+--------------------+-------------------------------+
1169| Resulting state | :class:`MaildirMessage` state |
1170+====================+===============================+
1171| "unseen" sequence | no S flag |
1172+--------------------+-------------------------------+
1173| "replied" sequence | R flag |
1174+--------------------+-------------------------------+
1175| "flagged" sequence | F flag |
1176+--------------------+-------------------------------+
1177
1178When an :class:`MHMessage` instance is created based upon an
1179:class:`mboxMessage` or :class:`MMDFMessage` instance, the :mailheader:`Status`
1180and :mailheader:`X-Status` headers are omitted and the following conversions
1181take place:
1182
1183+--------------------+----------------------------------------------+
1184| Resulting state | :class:`mboxMessage` or :class:`MMDFMessage` |
1185| | state |
1186+====================+==============================================+
1187| "unseen" sequence | no R flag |
1188+--------------------+----------------------------------------------+
1189| "replied" sequence | A flag |
1190+--------------------+----------------------------------------------+
1191| "flagged" sequence | F flag |
1192+--------------------+----------------------------------------------+
1193
1194When an :class:`MHMessage` instance is created based upon a
1195:class:`BabylMessage` instance, the following conversions take place:
1196
1197+--------------------+-----------------------------+
1198| Resulting state | :class:`BabylMessage` state |
1199+====================+=============================+
1200| "unseen" sequence | "unseen" label |
1201+--------------------+-----------------------------+
1202| "replied" sequence | "answered" label |
1203+--------------------+-----------------------------+
1204
1205
1206.. _mailbox-babylmessage:
1207
1208:class:`BabylMessage`
1209^^^^^^^^^^^^^^^^^^^^^
1210
1211
Georg Brandlcd7f32b2009-06-08 09:13:45 +00001212.. class:: BabylMessage(message=None)
Georg Brandl116aa622007-08-15 14:28:22 +00001213
1214 A message with Babyl-specific behaviors. Parameter *message* has the same
1215 meaning as with the :class:`Message` constructor.
1216
Benjamin Petersone41251e2008-04-25 01:59:09 +00001217 Certain message labels, called :dfn:`attributes`, are defined by convention
1218 to have special meanings. The attributes are as follows:
Georg Brandl116aa622007-08-15 14:28:22 +00001219
Benjamin Petersone41251e2008-04-25 01:59:09 +00001220 +-----------+------------------------------------------+
1221 | Label | Explanation |
1222 +===========+==========================================+
1223 | unseen | Not read, but previously detected by MUA |
1224 +-----------+------------------------------------------+
1225 | deleted | Marked for subsequent deletion |
1226 +-----------+------------------------------------------+
1227 | filed | Copied to another file or mailbox |
1228 +-----------+------------------------------------------+
1229 | answered | Replied to |
1230 +-----------+------------------------------------------+
1231 | forwarded | Forwarded |
1232 +-----------+------------------------------------------+
1233 | edited | Modified by the user |
1234 +-----------+------------------------------------------+
1235 | resent | Resent |
1236 +-----------+------------------------------------------+
Georg Brandl116aa622007-08-15 14:28:22 +00001237
Benjamin Petersone41251e2008-04-25 01:59:09 +00001238 By default, Rmail displays only visible headers. The :class:`BabylMessage`
1239 class, though, uses the original headers because they are more
1240 complete. Visible headers may be accessed explicitly if desired.
Georg Brandl116aa622007-08-15 14:28:22 +00001241
Benjamin Petersone41251e2008-04-25 01:59:09 +00001242 :class:`BabylMessage` instances offer the following methods:
Georg Brandl116aa622007-08-15 14:28:22 +00001243
1244
Benjamin Petersone41251e2008-04-25 01:59:09 +00001245 .. method:: get_labels()
Georg Brandl116aa622007-08-15 14:28:22 +00001246
Benjamin Petersone41251e2008-04-25 01:59:09 +00001247 Return a list of labels on the message.
Georg Brandl116aa622007-08-15 14:28:22 +00001248
1249
Benjamin Petersone41251e2008-04-25 01:59:09 +00001250 .. method:: set_labels(labels)
Georg Brandl116aa622007-08-15 14:28:22 +00001251
Benjamin Petersone41251e2008-04-25 01:59:09 +00001252 Set the list of labels on the message to *labels*.
Georg Brandl116aa622007-08-15 14:28:22 +00001253
1254
Benjamin Petersone41251e2008-04-25 01:59:09 +00001255 .. method:: add_label(label)
Georg Brandl116aa622007-08-15 14:28:22 +00001256
Benjamin Petersone41251e2008-04-25 01:59:09 +00001257 Add *label* to the list of labels on the message.
Georg Brandl116aa622007-08-15 14:28:22 +00001258
1259
Benjamin Petersone41251e2008-04-25 01:59:09 +00001260 .. method:: remove_label(label)
Georg Brandl116aa622007-08-15 14:28:22 +00001261
Benjamin Petersone41251e2008-04-25 01:59:09 +00001262 Remove *label* from the list of labels on the message.
Georg Brandl116aa622007-08-15 14:28:22 +00001263
1264
Benjamin Petersone41251e2008-04-25 01:59:09 +00001265 .. method:: get_visible()
Georg Brandl116aa622007-08-15 14:28:22 +00001266
Benjamin Petersone41251e2008-04-25 01:59:09 +00001267 Return an :class:`Message` instance whose headers are the message's
1268 visible headers and whose body is empty.
Georg Brandl116aa622007-08-15 14:28:22 +00001269
1270
Benjamin Petersone41251e2008-04-25 01:59:09 +00001271 .. method:: set_visible(visible)
Georg Brandl116aa622007-08-15 14:28:22 +00001272
Benjamin Petersone41251e2008-04-25 01:59:09 +00001273 Set the message's visible headers to be the same as the headers in
1274 *message*. Parameter *visible* should be a :class:`Message` instance, an
R David Murray53202502012-09-28 15:19:16 -04001275 :class:`email.message.Message` instance, a string, or a file-like object
Benjamin Petersone41251e2008-04-25 01:59:09 +00001276 (which should be open in text mode).
Georg Brandl116aa622007-08-15 14:28:22 +00001277
1278
Benjamin Petersone41251e2008-04-25 01:59:09 +00001279 .. method:: update_visible()
Georg Brandl116aa622007-08-15 14:28:22 +00001280
Benjamin Petersone41251e2008-04-25 01:59:09 +00001281 When a :class:`BabylMessage` instance's original headers are modified, the
1282 visible headers are not automatically modified to correspond. This method
1283 updates the visible headers as follows: each visible header with a
1284 corresponding original header is set to the value of the original header,
1285 each visible header without a corresponding original header is removed,
1286 and any of :mailheader:`Date`, :mailheader:`From`, :mailheader:`Reply-To`,
1287 :mailheader:`To`, :mailheader:`CC`, and :mailheader:`Subject` that are
1288 present in the original headers but not the visible headers are added to
1289 the visible headers.
Georg Brandl116aa622007-08-15 14:28:22 +00001290
1291When a :class:`BabylMessage` instance is created based upon a
1292:class:`MaildirMessage` instance, the following conversions take place:
1293
1294+-------------------+-------------------------------+
1295| Resulting state | :class:`MaildirMessage` state |
1296+===================+===============================+
1297| "unseen" label | no S flag |
1298+-------------------+-------------------------------+
1299| "deleted" label | T flag |
1300+-------------------+-------------------------------+
1301| "answered" label | R flag |
1302+-------------------+-------------------------------+
1303| "forwarded" label | P flag |
1304+-------------------+-------------------------------+
1305
1306When a :class:`BabylMessage` instance is created based upon an
1307:class:`mboxMessage` or :class:`MMDFMessage` instance, the :mailheader:`Status`
1308and :mailheader:`X-Status` headers are omitted and the following conversions
1309take place:
1310
1311+------------------+----------------------------------------------+
1312| Resulting state | :class:`mboxMessage` or :class:`MMDFMessage` |
1313| | state |
1314+==================+==============================================+
1315| "unseen" label | no R flag |
1316+------------------+----------------------------------------------+
1317| "deleted" label | D flag |
1318+------------------+----------------------------------------------+
1319| "answered" label | A flag |
1320+------------------+----------------------------------------------+
1321
1322When a :class:`BabylMessage` instance is created based upon an
1323:class:`MHMessage` instance, the following conversions take place:
1324
1325+------------------+--------------------------+
1326| Resulting state | :class:`MHMessage` state |
1327+==================+==========================+
1328| "unseen" label | "unseen" sequence |
1329+------------------+--------------------------+
1330| "answered" label | "replied" sequence |
1331+------------------+--------------------------+
1332
1333
1334.. _mailbox-mmdfmessage:
1335
1336:class:`MMDFMessage`
1337^^^^^^^^^^^^^^^^^^^^
1338
1339
Georg Brandlcd7f32b2009-06-08 09:13:45 +00001340.. class:: MMDFMessage(message=None)
Georg Brandl116aa622007-08-15 14:28:22 +00001341
1342 A message with MMDF-specific behaviors. Parameter *message* has the same meaning
1343 as with the :class:`Message` constructor.
1344
Benjamin Petersone41251e2008-04-25 01:59:09 +00001345 As with message in an mbox mailbox, MMDF messages are stored with the
1346 sender's address and the delivery date in an initial line beginning with
1347 "From ". Likewise, flags that indicate the state of the message are
1348 typically stored in :mailheader:`Status` and :mailheader:`X-Status` headers.
Georg Brandl116aa622007-08-15 14:28:22 +00001349
Benjamin Petersone41251e2008-04-25 01:59:09 +00001350 Conventional flags for MMDF messages are identical to those of mbox message
1351 and are as follows:
Georg Brandl116aa622007-08-15 14:28:22 +00001352
Benjamin Petersone41251e2008-04-25 01:59:09 +00001353 +------+----------+--------------------------------+
1354 | Flag | Meaning | Explanation |
1355 +======+==========+================================+
1356 | R | Read | Read |
1357 +------+----------+--------------------------------+
1358 | O | Old | Previously detected by MUA |
1359 +------+----------+--------------------------------+
1360 | D | Deleted | Marked for subsequent deletion |
1361 +------+----------+--------------------------------+
1362 | F | Flagged | Marked as important |
1363 +------+----------+--------------------------------+
1364 | A | Answered | Replied to |
1365 +------+----------+--------------------------------+
Georg Brandl116aa622007-08-15 14:28:22 +00001366
Benjamin Petersone41251e2008-04-25 01:59:09 +00001367 The "R" and "O" flags are stored in the :mailheader:`Status` header, and the
1368 "D", "F", and "A" flags are stored in the :mailheader:`X-Status` header. The
1369 flags and headers typically appear in the order mentioned.
Georg Brandl116aa622007-08-15 14:28:22 +00001370
Benjamin Petersone41251e2008-04-25 01:59:09 +00001371 :class:`MMDFMessage` instances offer the following methods, which are
1372 identical to those offered by :class:`mboxMessage`:
Georg Brandl116aa622007-08-15 14:28:22 +00001373
1374
Benjamin Petersone41251e2008-04-25 01:59:09 +00001375 .. method:: get_from()
Georg Brandl116aa622007-08-15 14:28:22 +00001376
Benjamin Petersone41251e2008-04-25 01:59:09 +00001377 Return a string representing the "From " line that marks the start of the
1378 message in an mbox mailbox. The leading "From " and the trailing newline
1379 are excluded.
Georg Brandl116aa622007-08-15 14:28:22 +00001380
1381
Georg Brandlcd7f32b2009-06-08 09:13:45 +00001382 .. method:: set_from(from_, time_=None)
Georg Brandl116aa622007-08-15 14:28:22 +00001383
Benjamin Petersone41251e2008-04-25 01:59:09 +00001384 Set the "From " line to *from_*, which should be specified without a
1385 leading "From " or trailing newline. For convenience, *time_* may be
1386 specified and will be formatted appropriately and appended to *from_*. If
Serhiy Storchakabfdcd432013-10-13 23:09:14 +03001387 *time_* is specified, it should be a :class:`time.struct_time` instance, a
Benjamin Petersone41251e2008-04-25 01:59:09 +00001388 tuple suitable for passing to :meth:`time.strftime`, or ``True`` (to use
1389 :meth:`time.gmtime`).
Georg Brandl116aa622007-08-15 14:28:22 +00001390
1391
Benjamin Petersone41251e2008-04-25 01:59:09 +00001392 .. method:: get_flags()
Georg Brandl116aa622007-08-15 14:28:22 +00001393
Benjamin Petersone41251e2008-04-25 01:59:09 +00001394 Return a string specifying the flags that are currently set. If the
1395 message complies with the conventional format, the result is the
1396 concatenation in the following order of zero or one occurrence of each of
1397 ``'R'``, ``'O'``, ``'D'``, ``'F'``, and ``'A'``.
Georg Brandl116aa622007-08-15 14:28:22 +00001398
1399
Benjamin Petersone41251e2008-04-25 01:59:09 +00001400 .. method:: set_flags(flags)
Georg Brandl116aa622007-08-15 14:28:22 +00001401
Benjamin Petersone41251e2008-04-25 01:59:09 +00001402 Set the flags specified by *flags* and unset all others. Parameter *flags*
1403 should be the concatenation in any order of zero or more occurrences of
1404 each of ``'R'``, ``'O'``, ``'D'``, ``'F'``, and ``'A'``.
Georg Brandl116aa622007-08-15 14:28:22 +00001405
1406
Benjamin Petersone41251e2008-04-25 01:59:09 +00001407 .. method:: add_flag(flag)
Georg Brandl116aa622007-08-15 14:28:22 +00001408
Benjamin Petersone41251e2008-04-25 01:59:09 +00001409 Set the flag(s) specified by *flag* without changing other flags. To add
1410 more than one flag at a time, *flag* may be a string of more than one
1411 character.
Georg Brandl116aa622007-08-15 14:28:22 +00001412
1413
Benjamin Petersone41251e2008-04-25 01:59:09 +00001414 .. method:: remove_flag(flag)
Georg Brandl116aa622007-08-15 14:28:22 +00001415
Benjamin Petersone41251e2008-04-25 01:59:09 +00001416 Unset the flag(s) specified by *flag* without changing other flags. To
1417 remove more than one flag at a time, *flag* maybe a string of more than
1418 one character.
Georg Brandl116aa622007-08-15 14:28:22 +00001419
1420When an :class:`MMDFMessage` instance is created based upon a
1421:class:`MaildirMessage` instance, a "From " line is generated based upon the
1422:class:`MaildirMessage` instance's delivery date, and the following conversions
1423take place:
1424
1425+-----------------+-------------------------------+
1426| Resulting state | :class:`MaildirMessage` state |
1427+=================+===============================+
1428| R flag | S flag |
1429+-----------------+-------------------------------+
1430| O flag | "cur" subdirectory |
1431+-----------------+-------------------------------+
1432| D flag | T flag |
1433+-----------------+-------------------------------+
1434| F flag | F flag |
1435+-----------------+-------------------------------+
1436| A flag | R flag |
1437+-----------------+-------------------------------+
1438
1439When an :class:`MMDFMessage` instance is created based upon an
1440:class:`MHMessage` instance, the following conversions take place:
1441
1442+-------------------+--------------------------+
1443| Resulting state | :class:`MHMessage` state |
1444+===================+==========================+
1445| R flag and O flag | no "unseen" sequence |
1446+-------------------+--------------------------+
1447| O flag | "unseen" sequence |
1448+-------------------+--------------------------+
1449| F flag | "flagged" sequence |
1450+-------------------+--------------------------+
1451| A flag | "replied" sequence |
1452+-------------------+--------------------------+
1453
1454When an :class:`MMDFMessage` instance is created based upon a
1455:class:`BabylMessage` instance, the following conversions take place:
1456
1457+-------------------+-----------------------------+
1458| Resulting state | :class:`BabylMessage` state |
1459+===================+=============================+
1460| R flag and O flag | no "unseen" label |
1461+-------------------+-----------------------------+
1462| O flag | "unseen" label |
1463+-------------------+-----------------------------+
1464| D flag | "deleted" label |
1465+-------------------+-----------------------------+
1466| A flag | "answered" label |
1467+-------------------+-----------------------------+
1468
1469When an :class:`MMDFMessage` instance is created based upon an
1470:class:`mboxMessage` instance, the "From " line is copied and all flags directly
1471correspond:
1472
1473+-----------------+----------------------------+
1474| Resulting state | :class:`mboxMessage` state |
1475+=================+============================+
1476| R flag | R flag |
1477+-----------------+----------------------------+
1478| O flag | O flag |
1479+-----------------+----------------------------+
1480| D flag | D flag |
1481+-----------------+----------------------------+
1482| F flag | F flag |
1483+-----------------+----------------------------+
1484| A flag | A flag |
1485+-----------------+----------------------------+
1486
1487
1488Exceptions
1489----------
1490
1491The following exception classes are defined in the :mod:`mailbox` module:
1492
1493
Benjamin Petersone41251e2008-04-25 01:59:09 +00001494.. exception:: Error()
Georg Brandl116aa622007-08-15 14:28:22 +00001495
1496 The based class for all other module-specific exceptions.
1497
1498
Benjamin Petersone41251e2008-04-25 01:59:09 +00001499.. exception:: NoSuchMailboxError()
Georg Brandl116aa622007-08-15 14:28:22 +00001500
1501 Raised when a mailbox is expected but is not found, such as when instantiating a
1502 :class:`Mailbox` subclass with a path that does not exist (and with the *create*
1503 parameter set to ``False``), or when opening a folder that does not exist.
1504
1505
Georg Brandl734e2682008-08-12 08:18:18 +00001506.. exception:: NotEmptyError()
Georg Brandl116aa622007-08-15 14:28:22 +00001507
1508 Raised when a mailbox is not empty but is expected to be, such as when deleting
1509 a folder that contains messages.
1510
1511
Benjamin Petersone41251e2008-04-25 01:59:09 +00001512.. exception:: ExternalClashError()
Georg Brandl116aa622007-08-15 14:28:22 +00001513
1514 Raised when some mailbox-related condition beyond the control of the program
1515 causes it to be unable to proceed, such as when failing to acquire a lock that
1516 another program already holds a lock, or when a uniquely-generated file name
1517 already exists.
1518
1519
Benjamin Petersone41251e2008-04-25 01:59:09 +00001520.. exception:: FormatError()
Georg Brandl116aa622007-08-15 14:28:22 +00001521
1522 Raised when the data in a file cannot be parsed, such as when an :class:`MH`
1523 instance attempts to read a corrupted :file:`.mh_sequences` file.
1524
1525
Georg Brandl116aa622007-08-15 14:28:22 +00001526.. _mailbox-examples:
1527
1528Examples
1529--------
1530
1531A simple example of printing the subjects of all messages in a mailbox that seem
1532interesting::
1533
1534 import mailbox
1535 for message in mailbox.mbox('~/mbox'):
1536 subject = message['subject'] # Could possibly be None.
1537 if subject and 'python' in subject.lower():
Georg Brandl6911e3c2007-09-04 07:15:32 +00001538 print(subject)
Georg Brandl116aa622007-08-15 14:28:22 +00001539
1540To copy all mail from a Babyl mailbox to an MH mailbox, converting all of the
1541format-specific information that can be converted::
1542
1543 import mailbox
1544 destination = mailbox.MH('~/Mail')
1545 destination.lock()
1546 for message in mailbox.Babyl('~/RMAIL'):
Christian Heimesdd15f6c2008-03-16 00:07:10 +00001547 destination.add(mailbox.MHMessage(message))
Georg Brandl116aa622007-08-15 14:28:22 +00001548 destination.flush()
1549 destination.unlock()
1550
1551This example sorts mail from several mailing lists into different mailboxes,
1552being careful to avoid mail corruption due to concurrent modification by other
1553programs, mail loss due to interruption of the program, or premature termination
1554due to malformed messages in the mailbox::
1555
1556 import mailbox
Ezio Melotti956040a2013-12-14 12:42:29 +02001557 import email.errors
Georg Brandl116aa622007-08-15 14:28:22 +00001558
1559 list_names = ('python-list', 'python-dev', 'python-bugs')
1560
Georg Brandlf6945182008-02-01 11:56:49 +00001561 boxes = {name: mailbox.mbox('~/email/%s' % name) for name in list_names}
Georg Brandl116aa622007-08-15 14:28:22 +00001562 inbox = mailbox.Maildir('~/Maildir', factory=None)
1563
1564 for key in inbox.iterkeys():
1565 try:
1566 message = inbox[key]
Ezio Melotti956040a2013-12-14 12:42:29 +02001567 except email.errors.MessageParseError:
Georg Brandl116aa622007-08-15 14:28:22 +00001568 continue # The message is malformed. Just leave it.
1569
1570 for name in list_names:
1571 list_id = message['list-id']
1572 if list_id and name in list_id:
1573 # Get mailbox to use
1574 box = boxes[name]
1575
1576 # Write copy to disk before removing original.
1577 # If there's a crash, you might duplicate a message, but
1578 # that's better than losing a message completely.
1579 box.lock()
1580 box.add(message)
Georg Brandl48310cd2009-01-03 21:18:54 +00001581 box.flush()
Georg Brandl116aa622007-08-15 14:28:22 +00001582 box.unlock()
1583
1584 # Remove original message
1585 inbox.lock()
1586 inbox.discard(key)
1587 inbox.flush()
1588 inbox.unlock()
1589 break # Found destination, so stop looking.
1590
1591 for box in boxes.itervalues():
1592 box.close()
1593