###
7.3.2.1 `MaildirMessage`

class `MaildirMessage`( | [message])

  A message with Maildir-specific behaviors. Parameter message has the same meaning as with the `Message` constructor.

Typically, a mail user agent application moves all of the messages in the new subdirectory to the cur subdirectory after the first time the user opens and closes the mailbox, recording that the messages are old whether or not they've actually been read. Each message in cur has an "info" section added to its file name to store information about its state. (Some mail readers may also add an "info" section to messages in new.) The "info" section may take one of two forms: it may contain "2," followed by a list of standardized flags (e.g., "2,FR") or it may contain "1," followed by so-called experimental information. Standard flags for Maildir messages are as follows:

Flag | Meaning | Explanation
--- | --- | ---
D | Draft | Under composition
F | Flagged | Marked as important
P | Passed | Forwarded, resent, or bounced
R | Replied | Replied to
S | Seen | Read
T | Trashed | Marked for subsequent deletion

`MaildirMessage` instances offer the following methods:

`get_subdir`( | )

  Return either "new" (if the message should be stored in the new subdirectory) or "cur" (if the message should be stored in the cur subdirectory). Note: A message is typically moved from new to cur after its mailbox has been accessed, whether or not the message is has been read. A message `msg` has been read if `"S" not in msg.get_flags()` is `True`.

`set_subdir`( | subdir)

  Set the subdirectory the message should be stored in. Parameter subdir must be either "new" or "cur".

`get_flags`( | )

  Return a string specifying the flags that are currently set. If the message complies with the standard Maildir format, the result is the concatenation in alphabetical order of zero or one occurrence of each of "`D`", "`F`", "`P`", "`R`", "`S`", and "`T`". The empty string is returned if no flags are set or if "info" contains experimental semantics.

`set_flags`( | flags)

  Set the flags specified by flags and unset all others.

`add_flag`( | flag)

  Set the flag(s) specified by flag without changing other flags. To add more than one flag at a time, flag may be a string of more than one character. The current "info" is overwritten whether or not it contains experimental information rather than flags.

`remove_flag`( | flag)

  Unset the flag(s) specified by flag without changing other flags. To remove more than one flag at a time, flag maybe a string of more than one character. If "info" contains experimental information rather than flags, the current "info" is not modified.

`get_date`( | )

  Return the delivery date of the message as a floating-point number representing seconds since the epoch.

`set_date`( | date)

  Set the delivery date of the message to date, a floating-point number representing seconds since the epoch.

`get_info`( | )

  Return a string containing the "info" for a message. This is useful for accessing and modifying "info" that is experimental (i.e., not a list of flags).

`set_info`( | info)

  Set "info" to info, which should be a string.

When a `MaildirMessage` instance is created based upon an `mboxMessage` or `MMDFMessage` instance, the Status: and X-Status: headers are omitted and the following conversions take place:

Resulting state | `mboxMessage` or `MMDFMessage` state
--- | ---
"cur" subdirectory | O flag
F flag | F flag
R flag | A flag
S flag | R flag
T flag | D flag

When a `MaildirMessage` instance is created based upon an `MHMessage` instance, the following conversions take place:

Resulting state | `MHMessage` state
--- | ---
"cur" subdirectory | "unseen" sequence
"cur" subdirectory and S flag | no "unseen" sequence
F flag | "flagged" sequence
R flag | "replied" sequence

When a `MaildirMessage` instance is created based upon a `BabylMessage` instance, the following conversions take place:

Resulting state | `BabylMessage` state
--- | ---
"cur" subdirectory | "unseen" label
"cur" subdirectory and S flag | no "unseen" label
P flag | "forwarded" or "resent" label
R flag | "answered" label
T flag | "deleted" label