"mailbox" --- 다양한 형식의 사서함 조작하기
*******************************************

**소스 코드:** Lib/mailbox.py

======================================================================

This module defines two classes, "Mailbox" and "Message", for
accessing and manipulating on-disk mailboxes and the messages they
contain. "Mailbox" offers a dictionary-like mapping from keys to
messages. "Message" extends the "email.message" module's "Message"
class with format-specific state and behavior. Supported mailbox
formats are Maildir, mbox, MH, Babyl, and MMDF.

더 보기:

  모듈 "email"
     메시지를 표현하고 조작합니다.


"Mailbox" objects
=================

class mailbox.Mailbox

   검사하고 수정할 수 있는 사서함.

   The "Mailbox" class defines an interface and is not intended to be
   instantiated.  Instead, format-specific subclasses should inherit
   from "Mailbox" and your code should instantiate a particular
   subclass.

   The "Mailbox" interface is dictionary-like, with small keys
   corresponding to messages. Keys are issued by the "Mailbox"
   instance with which they will be used and are only meaningful to
   that "Mailbox" instance. A key continues to identify a message even
   if the corresponding message is modified, such as by replacing it
   with another message.

   Messages may be added to a "Mailbox" instance using the set-like
   method "add()" and removed using a "del" statement or the set-like
   methods "remove()" and "discard()".

   "Mailbox" interface semantics differ from dictionary semantics in
   some noteworthy ways. Each time a message is requested, a new
   representation (typically a "Message" instance) is generated based
   upon the current state of the mailbox. Similarly, when a message is
   added to a "Mailbox" instance, the provided message
   representation's contents are copied. In neither case is a
   reference to the message representation kept by the "Mailbox"
   instance.

   The default "Mailbox" *iterator* iterates over message
   representations, not keys as the default "dictionary" iterator
   does. Moreover, modification of a mailbox during iteration is safe
   and well-defined. Messages added to the mailbox after an iterator
   is created will not be seen by the iterator. Messages removed from
   the mailbox before the iterator yields them will be silently
   skipped, though using a key from an iterator may result in a
   "KeyError" exception if the corresponding message is subsequently
   removed.

   경고:

     Be very cautious when modifying mailboxes that might be
     simultaneously changed by some other process.  The safest mailbox
     format to use for such tasks is "Maildir"; try to avoid using
     single-file formats such as "mbox" for concurrent writing.  If
     you're modifying a mailbox, you *must* lock it by calling the
     "lock()" and "unlock()" methods *before* reading any messages in
     the file or making any changes by adding or deleting a message.
     Failing to lock the mailbox runs the risk of losing messages or
     corrupting the entire mailbox.

   "Mailbox" instances have the following methods:

   add(message)

      사서함에 *message*를 추가하고 할당된 키를 반환합니다.

      매개 변수 *message*는 "Message" 인스턴스,
      "email.message.Message" 인스턴스, 문자열, 바이트 문자열 또는 파
      일류 객체(바이너리 모드로 열어야 합니다)일 수 있습니다.
      *message*가 적절한 형식별 "Message" 서브 클래스의 인스턴스이면 (
      예를 들어, 이것이 "mbox" 인스턴스일 때 "mboxMessage" 인스턴스이
      면), 형식별 정보가 사용됩니다. 그렇지 않으면, 형식별 정보에 대한
      적절한 기본값이 사용됩니다.

      버전 3.2에서 변경: 바이너리 입력에 대한 지원이 추가되었습니다.

   remove(key)
   __delitem__(key)
   discard(key)

      사서함에서 *key*에 해당하는 메시지를 삭제합니다.

      그러한 메시지가 없으면, 메서드가 "remove()"나 "__delitem__()"으
      로 호출되면 "KeyError" 예외가 발생하지만, "discard()"로 호출되면
      예외가 발생하지 않습니다. 하부 사서함 형식이 다른 프로세스에 의
      한 동시 수정을 지원하면 "discard()"의 동작을 선호할 수 있습니다.

   __setitem__(key, message)

      *key*에 해당하는 메시지를 *message*로 바꿉니다. *key*에 해당하는
      메시지가 없으면 "KeyError" 예외를 발생시킵니다.

      "add()"와 마찬가지로, *message* 매개 변수는 "Message" 인스턴스,
      "email.message.Message" 인스턴스, 문자열, 바이트 문자열 또는 파
      일류 객체(바이너리 모드로 열어야 합니다)일 수 있습니다.
      *message*가 적절한 형식별 "Message" 서브 클래스의 인스턴스이면 (
      예를 들어, 이것이 "mbox" 인스턴스일 때 "mboxMessage" 인스턴스이
      면), 형식별 정보가 사용됩니다. 그렇지 않으면, 현재 *key*에 해당
      하는 메시지의 형식별 정보가 변경되지 않습니다.

   iterkeys()

      Return an *iterator* over all keys

   keys()

      The same as "iterkeys()", except that a "list" is returned
      rather than an *iterator*

   itervalues()
   __iter__()

      Return an *iterator* over representations of all messages. The
      messages are represented as instances of the appropriate format-
      specific "Message" subclass unless a custom message factory was
      specified when the "Mailbox" instance was initialized.

      참고:

        "__iter__()"의 동작은 키를 이터레이트 하는 딕셔너리의 동작과
        다릅니다.

   values()

      The same as "itervalues()", except that a "list" is returned
      rather than an *iterator*

   iteritems()

      Return an *iterator* over (*key*, *message*) pairs, where *key*
      is a key and *message* is a message representation. The messages
      are represented as instances of the appropriate format-specific
      "Message" subclass unless a custom message factory was specified
      when the "Mailbox" instance was initialized.

   items()

      The same as "iteritems()", except that a "list" of pairs is
      returned rather than an *iterator* of pairs.

   get(key, default=None)
   __getitem__(key)

      Return a representation of the message corresponding to *key*.
      If no such message exists, *default* is returned if the method
      was called as "get()" and a "KeyError" exception is raised if
      the method was called as "__getitem__()". The message is
      represented as an instance of the appropriate format-specific
      "Message" subclass unless a custom message factory was specified
      when the "Mailbox" instance was initialized.

   get_message(key)

      *key*에 해당하는 메시지의 표현을 적절한 형식별 "Message" 서브 클
      래스의 인스턴스로 반환하거나, 그러한 메시지가 없으면 "KeyError"
      예외를 발생시킵니다.

   get_bytes(key)

      *key*에 해당하는 메시지의 바이트 표현을 반환하거나, 그러한 메시
      지가 없으면 "KeyError" 예외를 발생시킵니다.

      버전 3.2에 추가.

   get_string(key)

      *key*에 해당하는 메시지의 문자열 표현을 반환하거나 그러한 메시지
      가 없으면 "KeyError" 예외를 발생시킵니다. 메시지는
      "email.message.Message"를 통해 처리되어 7비트(7bit clean) 표현으
      로 변환됩니다.

   get_file(key)

      Return a *file-like* representation of the message corresponding
      to *key*, or raise a "KeyError" exception if no such message
      exists.  The file-like object behaves as if open in binary mode.
      This file should be closed once it is no longer needed.

      버전 3.2에서 변경: The file object really is a *binary file*;
      previously it was incorrectly returned in text mode.  Also, the
      *file-like object* now supports the *context manager* protocol:
      you can use a "with" statement to automatically close it.

      참고:

        Unlike other representations of messages, *file-like*
        representations are not necessarily independent of the
        "Mailbox" instance that created them or of the underlying
        mailbox.  More specific documentation is provided by each
        subclass.

   __contains__(key)

      *key*가 메시지에 해당하면 "True"를 반환하고, 그렇지 않으면
      "False"를 반환합니다.

   __len__()

      사서함에 있는 메시지 수를 반환합니다.

   clear()

      사서함에서 모든 메시지를 삭제합니다.

   pop(key, default=None)

      Return a representation of the message corresponding to *key*
      and delete the message. If no such message exists, return
      *default*. The message is represented as an instance of the
      appropriate format-specific "Message" subclass unless a custom
      message factory was specified when the "Mailbox" instance was
      initialized.

   popitem()

      Return an arbitrary (*key*, *message*) pair, where *key* is a
      key and *message* is a message representation, and delete the
      corresponding message. If the mailbox is empty, raise a
      "KeyError" exception. The message is represented as an instance
      of the appropriate format-specific "Message" subclass unless a
      custom message factory was specified when the "Mailbox" instance
      was initialized.

   update(arg)

      Parameter *arg* should be a *key*-to-*message* mapping or an
      iterable of (*key*, *message*) pairs. Updates the mailbox so
      that, for each given *key* and *message*, the message
      corresponding to *key* is set to *message* as if by using
      "__setitem__()". As with "__setitem__()", each *key* must
      already correspond to a message in the mailbox or else a
      "KeyError" exception will be raised, so in general it is
      incorrect for *arg* to be a "Mailbox" instance.

      참고:

        딕셔너리와 달리 키워드 인자는 지원되지 않습니다.

   flush()

      Write any pending changes to the filesystem. For some "Mailbox"
      subclasses, changes are always written immediately and "flush()"
      does nothing, but you should still make a habit of calling this
      method.

   lock()

      다른 프로세스가 수정하지 않아야 한다는 것을 알 수 있도록 사서함
      에 대한 배타적 권고 잠금(exclusive advisory lock)을 획득합니다.
      잠금을 사용할 수 없으면 "ExternalClashError" 가 발생합니다. 사용
      되는 특정 잠금 메커니즘은 사서함 형식에 따라 다릅니다. 내용을 수
      정하기 전에 사서함을 *항상* 잠가야 합니다.

   unlock()

      사서함의 잠금을 해제합니다 (있다면).

   close()

      Flush the mailbox, unlock it if necessary, and close any open
      files. For some "Mailbox" subclasses, this method does nothing.


"Maildir" objects
-----------------

class mailbox.Maildir(dirname, factory=None, create=True)

   Maildir 형식의 사서함에 대한 "Mailbox"의 서브 클래스. 매개 변수
   *factory*는 파일류 메시지 표현(바이너리 모드에서 열린 것처럼 동작합
   니다)을 받아들이고 사용자 정의 표현을 반환하는 콜러블 객체입니다.
   *factory*가 "None"이면, "MaildirMessage" 가 기본 메시지 표현으로 사
   용됩니다. *create*가 "True"이면, 사서함이 없으면 만들어집니다.

   *create*가 "True"이고 *dirname* 경로가 존재하면, 디렉터리 레이아웃
   을 확인하지 않고 기존 maildir로 처리됩니다.

   역사적인 이유로 *path*가 아니라 *dirname*이라고 이름 붙였습니다.

   Maildir은 qmail 메일 전송 에이전트를 위해 고안된 디렉터리 기반 사서
   함 형식이며 현재 다른 프로그램에서 널리 지원됩니다. Maildir 사서함
   의 메시지는 공통 디렉터리 구조 내에서 별도의 파일에 저장됩니다. 이
   설계를 사용하면 데이터 손상 없이 여러 관련 없는 프로그램에서
   Maildir 사서함에 액세스하고 수정할 수 있어서 파일 잠금이 필요하지
   않습니다.

   Maildir 사서함에는 세 개의 하위 디렉터리가 있습니다, 이름하여
   "tmp", "new" 및 "cur". 메시지는 일시적으로 "tmp" 하위 디렉터리에 만
   들어진 다음 "new" 하위 디렉터리로 이동하여 전달을 완료합니다. 메일
   사용자 에이전트는 이후에 메시지를 "cur" 하위 디렉터리로 이동하고 파
   일 이름에 추가된 특수 "info" 섹션에 메시지 상태에 대한 정보를 저장
   할 수 있습니다.

   Folders of the style introduced by the Courier mail transfer agent
   are also supported. Any subdirectory of the main mailbox is
   considered a folder if "'.'" is the first character in its name.
   Folder names are represented by "Maildir" without the leading
   "'.'". Each folder is itself a Maildir mailbox but should not
   contain other folders. Instead, a logical nesting is indicated
   using "'.'" to delimit levels, e.g., "Archived.2005.07".

   colon

      Maildir 명세에서는 특정 메시지 파일 이름에 콜론("':'")을 사용하
      도록 요구합니다. 그러나 일부 운영 체제에서는 파일 이름에 이 문자
      를 허용하지 않습니다. 이러한 운영 체제에서 Maildir과 유사한 형식
      을 사용하려면, 대신 사용할 다른 문자를 지정해야 합니다. 느낌표
      ("'!'")는 인기 있는 선택입니다. 예를 들면:

         import mailbox
         mailbox.Maildir.colon = '!'

      The "colon" attribute may also be set on a per-instance basis.

   "Maildir" instances have all of the methods of "Mailbox" in
   addition to the following:

   list_folders()

      모든 폴더의 이름 리스트를 반환합니다.

   get_folder(folder)

      Return a "Maildir" instance representing the folder whose name
      is *folder*. A "NoSuchMailboxError" exception is raised if the
      folder does not exist.

   add_folder(folder)

      Create a folder whose name is *folder* and return a "Maildir"
      instance representing it.

   remove_folder(folder)

      이름이 *folder*인 폴더를 삭제합니다. 폴더에 메시지가 포함되었으
      면, "NotEmptyError" 예외가 발생하고 폴더가 삭제되지 않습니다.

   clean()

      지난 36시간 동안 액세스하지 않은 사서함에서 임시 파일을 삭제합니
      다. Maildir 명세는 메일을 읽는 프로그램이 이 작업을 가끔 수행해
      야 한다고 말합니다.

   Some "Mailbox" methods implemented by "Maildir" deserve special
   remarks:

   add(message)
   __setitem__(key, message)
   update(arg)

      경고:

        이 메서드들은 현재 프로세스 ID를 기반으로 고유한 파일 이름을
        생성합니다. 다중 스레드를 사용할 때, 이러한 메서드를 사용하여
        같은 사서함을 동시에 조작하지 않도록 스레드를 조정하지 않으면
        감지되지 않은 이름 충돌이 발생하여 사서함이 손상될 수 있습니다
        .

   flush()

      Maildir 사서함에 대한 모든 변경 사항은 즉시 적용되므로, 이 메서
      드는 아무 작업도 수행하지 않습니다.

   lock()
   unlock()

      Maildir 사서함은 잠금을 지원(또는 필요로)하지 않아서, 이 메서드
      들은 아무 작업도 수행하지 않습니다.

   close()

      "Maildir" instances do not keep any open files and the
      underlying mailboxes do not support locking, so this method does
      nothing.

   get_file(key)

      호스트 플랫폼에 따라, 반환된 파일이 열려있는 동안 하부 메시지를
      수정하거나 제거하지 못할 수 있습니다.

더 보기:

  maildir man page from Courier
     형식의 명세. 지원 폴더에 대한 공통 확장을 설명합니다.

  Using maildir format
     발명가의 Maildir에 대한 노트. 개정된 이름 생성 체계와 "info" 의미
     론에 대한 세부 정보를 포함합니다.


"mbox" objects
--------------

class mailbox.mbox(path, factory=None, create=True)

   mbox 형식의 사서함에 대한 "Mailbox"의 서브 클래스. 매개 변수
   *factory*는 파일류 메시지 표현(바이너리 모드에서 열린 것처럼 동작합
   니다)을 받아들이고 사용자 정의 표현을 반환하는 콜러블 객체입니다.
   *factory*가 "None"이면, "mboxMessage"가 기본 메시지 표현으로 사용됩
   니다. *create*가 "True"이면, 사서함이 없으면 만들어집니다.

   mbox 형식은 유닉스 시스템에서 메일을 저장하기 위한 고전적인 형식입
   니다. mbox 사서함의 모든 메시지는 처음 5개의 문자가 "From "인 줄로
   표시되는 각 메시지의 시작 부분과 함께 단일 파일에 저장됩니다.

   Several variations of the mbox format exist to address perceived
   shortcomings in the original. In the interest of compatibility,
   "mbox" implements the original format, which is sometimes referred
   to as *mboxo*. This means that the *Content-Length* header, if
   present, is ignored and that any occurrences of "From " at the
   beginning of a line in a message body are transformed to ">From "
   when storing the message, although occurrences of ">From " are not
   transformed to "From " when reading the message.

   Some "Mailbox" methods implemented by "mbox" deserve special
   remarks:

   get_file(key)

      Using the file after calling "flush()" or "close()" on the
      "mbox" instance may yield unpredictable results or raise an
      exception.

   lock()
   unlock()

      Three locking mechanisms are used---dot locking and, if
      available, the "flock()" and "lockf()" system calls.

더 보기:

  tin의 mbox 매뉴얼 페이지
     형식의 명세, 잠금에 대한 세부 정보가 있습니다.

  유닉스에서 Netscape Mail 구성하기: 왜 Content-Length 형식이 나쁜가
     변형이 아닌 원래 mbox 형식을 사용하는 것에 대한 논의.

  "mbox"는 서로 호환되지 않는 여러 사서함 형식의 집합입니다
     mbox 변형의 역사.


"MH" objects
------------

class mailbox.MH(path, factory=None, create=True)

   MH 형식의 사서함에 대한 "Mailbox"의 서브 클래스. 매개 변수
   *factory*는 파일류 메시지 표현(바이너리 모드에서 열린 것처럼 동작합
   니다)을 받아들이고 사용자 정의 표현을 반환하는 콜러블 객체입니다.
   *factory*가 "None"이면, "MHMessage"가 기본 메시지 표현으로 사용됩니
   다. *create*가 "True"이면, 사서함이 없으면 만들어집니다.

   MH는 메일 사용자 에이전트인 MH 메시지 처리 시스템(MH Message
   Handling System)을 위해 개발된 디렉터리 기반 사서함 형식입니다. MH
   사서함의 각 메시지는 각자의 파일에 있습니다. MH 사서함에는 메시지
   외에 다른 MH 사서함(*폴더(folders)*라고 합니다)이 포함될 수 있습니
   다. 폴더는 무제한 중첩될 수 있습니다. MH 사서함은 또한 메시지를 서
   브 폴더로 이동하지 않고 논리적으로 그룹화하는 데 사용되는 명명된 목
   록인 *시퀀스(sequences)*를 지원합니다. 시퀀스는 각 폴더의
   ".mh_sequences"라는 파일에 정의됩니다.

   The "MH" class manipulates MH mailboxes, but it does not attempt to
   emulate all of **mh**'s behaviors. In particular, it does not
   modify and is not affected by the "context" or ".mh_profile" files
   that are used by **mh** to store its state and configuration.

   "MH" instances have all of the methods of "Mailbox" in addition to
   the following:

   list_folders()

      모든 폴더의 이름 리스트를 반환합니다.

   get_folder(folder)

      Return an "MH" instance representing the folder whose name is
      *folder*. A "NoSuchMailboxError" exception is raised if the
      folder does not exist.

   add_folder(folder)

      Create a folder whose name is *folder* and return an "MH"
      instance representing it.

   remove_folder(folder)

      이름이 *folder*인 폴더를 삭제합니다. 폴더에 메시지가 포함되었으
      면, "NotEmptyError" 예외가 발생하고 폴더가 삭제되지 않습니다.

   get_sequences()

      키 리스트에 매핑된 시퀀스 이름의 딕셔너리를 반환합니다. 시퀀스가
      없으면, 빈 딕셔너리가 반환됩니다.

   set_sequences(sequences)

      "get_sequences()"에서 반환하는 것과 같이, 키 리스트에 매핑된 이
      름의 딕셔너리인, *sequences*를 기반으로 사서함에 존재하는 시퀀스
      를 다시 정의합니다.

   pack()

      번호 매기기의 간격을 없애기 위해 필요에 따라 사서함의 메시지 이
      름을 변경합니다. 시퀀스 리스트의 항목이 그에 따라 갱신됩니다.

      참고:

        이미 발급된 키는 이 작업에 의해 무효가 되며 이후에 사용해서는
        안 됩니다.

   Some "Mailbox" methods implemented by "MH" deserve special remarks:

   remove(key)
   __delitem__(key)
   discard(key)

      이 메서드들은 메시지를 즉시 삭제합니다. 이름 앞에 쉼표를 추가하
      여 메시지를 삭제하도록 표시하는 MH 규칙은 사용되지 않습니다.

   lock()
   unlock()

      Three locking mechanisms are used---dot locking and, if
      available, the "flock()" and "lockf()" system calls. For MH
      mailboxes, locking the mailbox means locking the ".mh_sequences"
      file and, only for the duration of any operations that affect
      them, locking individual message files.

   get_file(key)

      호스트 플랫폼에 따라, 반환된 파일이 열려있는 동안 하부 메시지를
      제거하지 못할 수도 있습니다.

   flush()

      MH 사서함에 대한 모든 변경 사항이 즉시 적용되므로, 이 메서드는
      아무 작업도 수행하지 않습니다.

   close()

      "MH" instances do not keep any open files, so this method is
      equivalent to "unlock()".

더 보기:

  nmh - Message Handling System
     **nmh**의 홈페이지, 원래 **mh**의 갱신된 버전.

  MH & nmh: 사용자와 프로그래머를 위한 이메일
     **mh**와 **nmh**에 대한 GPL 라이선스 책, 사서함 형식에 대한 정보
     가 있습니다.


"Babyl" objects
---------------

class mailbox.Babyl(path, factory=None, create=True)

   Babyl 형식의 사서함에 대한 "Mailbox"의 서브 클래스. 매개 변수
   *factory*는 파일류 메시지 표현(바이너리 모드에서 열린 것처럼 동작합
   니다)을 받아들이고 사용자 정의 표현을 반환하는 콜러블 객체입니다.
   *factory*가 "None"이면, "BabylMessage"가 기본 메시지 표현으로 사용
   됩니다. *create*가 "True"이면, 사서함이 없으면 만들어집니다.

   Babyl은 Emacs에 포함된 Rmail 메일 사용자 에이전트에서 사용하는 단일
   파일 사서함 형식입니다. 메시지의 시작 부분은 Control-
   Underscore("'\037'")와 Control-L("'\014'") 두 문자가 포함된 줄로 표
   시됩니다. 메시지의 끝은 다음 메시지의 시작이나, 마지막 메시지의 경
   우 Control-Underscore("'\037'") 문자가 포함된 줄로 표시됩니다.

   Babyl 사서함의 메시지는 두 집합의 헤더가 있습니다, 원래 헤더와 소위
   가시적(visible) 헤더가 있습니다. 가시적 헤더는 일반적으로 더 매력적
   으로 다시 포맷되거나 요약된 원래 헤더의 부분 집합입니다. Babyl 사서
   함의 각 메시지에는 *레이블(labels)* 리스트, 또는 메시지에 대한 추가
   정보를 기록하는 짧은 문자열이 있으며, 사서함에 있는 모든 사용자 정
   의 레이블 목록은 Babyl 옵션 섹션에 보관됩니다.

   "Babyl" instances have all of the methods of "Mailbox" in addition
   to the following:

   get_labels()

      사서함에 사용된 모든 사용자 정의 레이블의 이름 리스트를 반환합니
      다.

      참고:

        Babyl 옵션 섹션의 레이블 목록을 참조하지 않고 사서함에 있는 레
        이블을 확인하기 위해 실제 메시지를 검사하지만, 사서함이 수정될
        때마다 Babyl 섹션이 갱신됩니다.

   Some "Mailbox" methods implemented by "Babyl" deserve special
   remarks:

   get_file(key)

      Babyl 사서함에서, 메시지 헤더는 메시지 본문과 연속적으로 저장되
      지 않습니다. 파일류 표현을 생성하기 위해, 헤더와 본문이 파일과
      동일한 API를 가진 "io.BytesIO" 인스턴스에 함께 복사됩니다. 결과
      적으로, 파일류 객체는 하부 사서함과는 진짜로 독립적이지만 문자열
      표현보다 메모리를 절약하지 않습니다.

   lock()
   unlock()

      Three locking mechanisms are used---dot locking and, if
      available, the "flock()" and "lockf()" system calls.

더 보기:

  Format of Version 5 Babyl Files
     Babyl 형식의 명세.

  Rmail로 메일 읽기
     Rmail 매뉴얼, Babyl 의미론에 대한 정보가 있습니다.


"MMDF" objects
--------------

class mailbox.MMDF(path, factory=None, create=True)

   MMDF 형식의 사서함에 대한 "Mailbox"의 서브 클래스. 매개 변수
   *factory*는 파일류 메시지 표현(바이너리 모드에서 열린 것처럼 동작합
   니다)을 받아들이고 사용자 정의 표현을 반환하는 콜러블 객체입니다.
   *factory*가 "None"이면, "MMDFMessage"가 기본 메시지 표현으로 사용됩
   니다. *create*가 "True"이면, 사서함이 없으면 만들어집니다.

   MMDF는 메일 전송 에이전트인 Multichannel Memorandum Distribution
   Facility를 위해 개발된 단일 파일 사서함 형식입니다. 각 메시지는
   mbox 메시지와 같은 형식이지만 4개의 Control-A ("'\001'") 문자를 포
   함하는 줄로 앞뒤로 둘러쌉니다. mbox 형식과 마찬가지로, 각 메시지의
   시작 부분은 처음 5개의 문자가 "From "인 줄로 표시되지만, 메시지를
   저장할 때 추가로 등장하는 "From "을 ">From "으로 변환하지 않습니다,
   메시지를 구분하는 추가적인 줄로 인해 후속 메시지의 시작으로 착각할
   우려가 없기 때문입니다.

   Some "Mailbox" methods implemented by "MMDF" deserve special
   remarks:

   get_file(key)

      Using the file after calling "flush()" or "close()" on the
      "MMDF" instance may yield unpredictable results or raise an
      exception.

   lock()
   unlock()

      Three locking mechanisms are used---dot locking and, if
      available, the "flock()" and "lockf()" system calls.

더 보기:

  tin의 mmdf 매뉴얼 페이지
     뉴스 리더인 tin의 설명서에 있는 MMDF 형식의 명세.

  MMDF
     Multichannel Memorandum Distribution Facility를 설명하는 위키피디
     아 기사.


"Message" objects
=================

class mailbox.Message(message=None)

   A subclass of the "email.message" module's "Message". Subclasses of
   "mailbox.Message" add mailbox-format-specific state and behavior.

   If *message* is omitted, the new instance is created in a default,
   empty state. If *message* is an "email.message.Message" instance,
   its contents are copied; furthermore, any format-specific
   information is converted insofar as possible if *message* is a
   "Message" instance. If *message* is a string, a byte string, or a
   file, it should contain an **RFC 2822**-compliant message, which is
   read and parsed.  Files should be open in binary mode, but text
   mode files are accepted for backward compatibility.

   서브 클래스에서 제공하는 형식별 상태와 동작은 다양하지만, 일반적으
   로 지원되는 특정 사서함에만 고유하지는 않은 속성입니다 (아마도 속성
   은 특정 사서함 형식에 고유합니다). 예를 들어, 단일 파일 사서함 형식
   에 대한 파일 오프셋과 디렉터리 기반 사서함 형식에 대한 파일 이름은
   유지되지 않는데, 원래 사서함에만 적용되기 때문입니다. 그러나 사용자
   가 메시지를 읽었는지나 중요하다고 표시되었는지와 같은 상태는 메시지
   자체에 적용되므로 유지됩니다.

   There is no requirement that "Message" instances be used to
   represent messages retrieved using "Mailbox" instances. In some
   situations, the time and memory required to generate "Message"
   representations might not be acceptable. For such situations,
   "Mailbox" instances also offer string and file-like
   representations, and a custom message factory may be specified when
   a "Mailbox" instance is initialized.


"MaildirMessage" objects
------------------------

class mailbox.MaildirMessage(message=None)

   Maildir 특정 동작을 갖는 메시지. 매개 변수 *message*는 "Message" 생
   성자와 같은 의미입니다.

   일반적으로, 메일 사용자 에이전트 응용 프로그램은 사용자가 사서함을
   처음 열고 닫은 후 "new" 하위 디렉터리의 모든 메시지를 "cur" 하위 디
   렉터리로 이동하여, 메시지가 실제로 읽혔는지에 관계없이 오래되었음을
   기록합니다. "cur"의 각 메시지에는 상태에 대한 정보를 저장하기 위해
   파일 이름에 추가된 "info" 섹션이 있습니다. (일부 메일 리더는 "new"
   의 메시지에 "info" 섹션을 추가할 수도 있습니다.) "info" 섹션은 두
   가지 형식 중 하나를 취할 수 있습니다: "2,"와 그 뒤로 표준화된 플래
   그 목록이 오거나 (예를 들어, "2,FR"), "1,"과 그 뒤로 소위 실험적 정
   보를 포함할 수 있습니다. Maildir 메시지의 표준 플래그는 다음과 같습
   니다:

   +--------+-----------+----------------------------------+
   | 플래그 | 의미      | 설명                             |
   |========|===========|==================================|
   | D      | 초안      | 작성 중                          |
   +--------+-----------+----------------------------------+
   | F      | 깃발 표시 | 중요하다고 표시됨                |
   +--------+-----------+----------------------------------+
   | P      | 전달됨    | 전달, 재전송 또는 반송됨         |
   +--------+-----------+----------------------------------+
   | R      | 답장함    | 답장함                           |
   +--------+-----------+----------------------------------+
   | S      | 보았음    | 읽었음                           |
   +--------+-----------+----------------------------------+
   | T      | 휴지통    | 후에 삭제하기 위해 표시함        |
   +--------+-----------+----------------------------------+

   "MaildirMessage" instances offer the following methods:

   get_subdir()

      "new"(메시지가 "new" 하위 디렉터리에 저장되어야 하면)나 "cur"(메
      시지가 "cur" 하위 디렉터리에 저장되어야 하면)를 반환합니다.

      참고:

        메시지를 읽었는지에 관계없이, 일반적으로 사서함에 액세스한 후
        메시지는 "new"에서 "cur"로 이동됩니다. ""S" in
        msg.get_flags()"가 "True"이면 메시지 "msg"를 읽은 것입니다.

   set_subdir(subdir)

      메시지를 저장할 하위 디렉터리를 설정합니다. 매개 변수 *subdir*은
      "new"나 "cur"여야 합니다.

   get_flags()

      현재 설정된 플래그를 지정하는 문자열을 반환합니다. 메시지가 표준
      Maildir 형식을 준수하면, 결과는 "'D'", "'F'", "'P'", "'R'",
      "'S'" 및 "'T'"의 각 항목이  알파벳 순서로 0이나 1개 등장하는 이
      어붙이기입니다. 플래그가 설정되지 않았거나 "info"에 실험적 의미
      가 포함되어 있으면 빈 문자열이 반환됩니다.

   set_flags(flags)

      *flags*로 지정된 플래그를 설정하고 다른 모든 플래그를 설정 해제
      합니다.

   add_flag(flag)

      다른 플래그를 변경하지 않고 *flag*로 지정된 플래그를 설정합니다.
      한 번에 둘 이상의 플래그를 추가하기 위해, *flag*가 둘 이상의 문
      자로 구성된 문자열일 수 있습니다. 플래그 대신 실험적 정보를 포함
      하는지와 관계없이 현재 "info"를 덮어씁니다.

   remove_flag(flag)

      다른 플래그를 변경하지 않고 *flag*에 의해 지정된 플래그를 설정
      해제합니다. 한 번에 둘 이상의 플래그를 제거하기 위해, *flag*는
      둘 이상의 문자로 구성된 문자열일 수 있습니다. "info"에 플래그 대
      신 실험적 정보가 포함되어 있으면, 현재 "info"가 수정되지 않습니
      다.

   get_date()

      메시지의 배달 날짜를 에포크(Epoch) 이후 초를 나타내는 부동 소수
      점 숫자로 반환합니다.

   set_date(date)

      메시지의 배달 날짜를 *date*로 설정합니다. 이는 에포크(Epoch) 이
      후 초를 나타내는 부동 소수점 숫자입니다.

   get_info()

      메시지에 대한 "info"를 포함하는 문자열을 반환합니다. 이것은 실험
      적인 (즉, 플래그 목록이 아닌) "info"를 액세스하고 수정하는 데 유
      용합니다.

   set_info(info)

      "info"를 문자열이어야 하는 *info*로 설정합니다.

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:

+----------------------+------------------------------------------------+
| 결과 상태            | "mboxMessage"나 "MMDFMessage" 상태             |
|======================|================================================|
| "cur" 하위 디렉터리  | O 플래그                                       |
+----------------------+------------------------------------------------+
| F 플래그             | F 플래그                                       |
+----------------------+------------------------------------------------+
| R 플래그             | A 플래그                                       |
+----------------------+------------------------------------------------+
| S 플래그             | R 플래그                                       |
+----------------------+------------------------------------------------+
| T 플래그             | D 플래그                                       |
+----------------------+------------------------------------------------+

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

+---------------------------------+----------------------------+
| 결과 상태                       | "MHMessage" 상태           |
|=================================|============================|
| "cur" 하위 디렉터리             | "unseen" 시퀀스            |
+---------------------------------+----------------------------+
| "cur" 하위 디렉터리와 S 플래그  | "unseen" 시퀀스 없음       |
+---------------------------------+----------------------------+
| F 플래그                        | "flagged" 시퀀스           |
+---------------------------------+----------------------------+
| R 플래그                        | "replied" 시퀀스           |
+---------------------------------+----------------------------+

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

+---------------------------------+---------------------------------+
| 결과 상태                       | "BabylMessage" 상태             |
|=================================|=================================|
| "cur" 하위 디렉터리             | "unseen" 레이블                 |
+---------------------------------+---------------------------------+
| "cur" 하위 디렉터리와 S 플래그  | "unseen" 레이블 없음            |
+---------------------------------+---------------------------------+
| P 플래그                        | "forwarded"나 "resent" 레이블   |
+---------------------------------+---------------------------------+
| R 플래그                        | "answered" 레이블               |
+---------------------------------+---------------------------------+
| T 플래그                        | "deleted" 레이블                |
+---------------------------------+---------------------------------+


"mboxMessage" objects
---------------------

class mailbox.mboxMessage(message=None)

   mbox 특정 동작을 갖는 메시지. 매개 변수 *message*는 "Message" 생성
   자와 같은 의미입니다.

   mbox 사서함의 메시지는 단일 파일에 함께 저장됩니다. 보낸 사람의 봉
   투 주소(envelope address)와 배달 시간은 일반적으로 메시지의 시작을
   나타내는 데 사용되는 "From "으로 시작하는 줄에 저장되지만, mbox 구
   현 간에 이 데이터의 정확한 형식에는 상당한 차이가 있습니다. 읽었는
   지나 중요하다고 표시되었는지와 같은 메시지 상태를 나타내는 플래그는
   일반적으로 *Status*와 *X-Status* 헤더에 저장됩니다.

   mbox 메시지의 전통적인 플래그는 다음과 같습니다:

   +--------+------------+----------------------------------+
   | 플래그 | 의미       | 설명                             |
   |========|============|==================================|
   | R      | 읽었음     | 읽었음                           |
   +--------+------------+----------------------------------+
   | O      | 오래되었음 | 전에 MUA에서 감지됨              |
   +--------+------------+----------------------------------+
   | D      | 삭제됨     | 후에 삭제하기 위해 표시함        |
   +--------+------------+----------------------------------+
   | F      | 깃발 표시  | 중요하다고 표시됨                |
   +--------+------------+----------------------------------+
   | A      | 답변함     | 답장함                           |
   +--------+------------+----------------------------------+

   "R"과 "O" 플래그는 *Status* 헤더에 저장되고, "D", "F" 및 "A" 플래그
   는 *X-Status* 헤더에 저장됩니다. 플래그와 헤더는 일반적으로 언급된
   순서대로 나타납니다.

   "mboxMessage" instances offer the following methods:

   get_from()

      mbox 사서함에서 메시지의 시작을 표시하는 "From " 줄을 나타내는
      문자열을 반환합니다. 선행 "From "과 후행 줄넘김은 제외됩니다.

   set_from(from_, time_=None)

      Set the "From " line to *from_*, which should be specified
      without a leading "From " or trailing newline. For convenience,
      *time_* may be specified and will be formatted appropriately and
      appended to *from_*. If *time_* is specified, it should be a
      "time.struct_time" instance, a tuple suitable for passing to
      "time.strftime()", or "True" (to use "time.gmtime()").

   get_flags()

      현재 설정된 플래그를 지정하는 문자열을 반환합니다. 메시지가 전통
      적인 형식을 준수하면, 결과는 "'R'", "'O'", "'D'", "'F'" 및 "'A'"
      각각이 이 순서로 0이나 1회 등장하도록 이어붙인 것입니다.

   set_flags(flags)

      *flags*에서 지정한 플래그를 설정하고 다른 모든 플래그를 설정 해
      제합니다. 매개 변수 *flags*는 "'R'", "'O'", "'D'", "'F'" 및
      "'A'" 각각이 0개 이상 등장하도록 임의의 순서로 이어붙인 것이어야
      합니다.

   add_flag(flag)

      다른 플래그를 변경하지 않고 *flag*로 지정된 플래그를 설정합니다.
      한 번에 둘 이상의 플래그를 추가하기 위해, *flag*가 둘 이상의 문
      자로 구성된 문자열일 수 있습니다.

   remove_flag(flag)

      다른 플래그를 변경하지 않고 *flag*에 의해 지정된 플래그를 설정
      해제합니다. 한 번에 둘 이상의 플래그를 제거하기 위해, *flag*는
      둘 이상의 문자로 구성된 문자열일 수 있습니다.

When an "mboxMessage" instance is created based upon a
"MaildirMessage" instance, a "From " line is generated based upon the
"MaildirMessage" instance's delivery date, and the following
conversions take place:

+-------------------+---------------------------------+
| 결과 상태         | "MaildirMessage" 상태           |
|===================|=================================|
| R 플래그          | S 플래그                        |
+-------------------+---------------------------------+
| O 플래그          | "cur" 하위 디렉터리             |
+-------------------+---------------------------------+
| D 플래그          | T 플래그                        |
+-------------------+---------------------------------+
| F 플래그          | F 플래그                        |
+-------------------+---------------------------------+
| A 플래그          | R 플래그                        |
+-------------------+---------------------------------+

When an "mboxMessage" instance is created based upon an "MHMessage"
instance, the following conversions take place:

+---------------------+----------------------------+
| 결과 상태           | "MHMessage" 상태           |
|=====================|============================|
| R 플래그와 O 플래그 | "unseen" 시퀀스 없음       |
+---------------------+----------------------------+
| O 플래그            | "unseen" 시퀀스            |
+---------------------+----------------------------+
| F 플래그            | "flagged" 시퀀스           |
+---------------------+----------------------------+
| A 플래그            | "replied" 시퀀스           |
+---------------------+----------------------------+

When an "mboxMessage" instance is created based upon a "BabylMessage"
instance, the following conversions take place:

+---------------------+-------------------------------+
| 결과 상태           | "BabylMessage" 상태           |
|=====================|===============================|
| R 플래그와 O 플래그 | "unseen" 레이블 없음          |
+---------------------+-------------------------------+
| O 플래그            | "unseen" 레이블               |
+---------------------+-------------------------------+
| D 플래그            | "deleted" 레이블              |
+---------------------+-------------------------------+
| A 플래그            | "answered" 레이블             |
+---------------------+-------------------------------+

When a "mboxMessage" instance is created based upon an "MMDFMessage"
instance, the "From " line is copied and all flags directly
correspond:

+-------------------+------------------------------+
| 결과 상태         | "MMDFMessage" 상태           |
|===================|==============================|
| R 플래그          | R 플래그                     |
+-------------------+------------------------------+
| O 플래그          | O 플래그                     |
+-------------------+------------------------------+
| D 플래그          | D 플래그                     |
+-------------------+------------------------------+
| F 플래그          | F 플래그                     |
+-------------------+------------------------------+
| A 플래그          | A 플래그                     |
+-------------------+------------------------------+


"MHMessage" objects
-------------------

class mailbox.MHMessage(message=None)

   MH 특정 동작을 갖는 메시지. 매개 변수 *message*는 "Message" 생성자
   와 같은 의미입니다.

   MH 메시지는 전통적인 의미에서 마크나 플래그를 지원하지 않지만, 임의
   메시지의 논리적 그룹인 시퀀스를 지원합니다. 일부 메일 읽기 프로그램
   (표준 **mh**와 **nmh**는 아니지만)은 다음과 같이 다른 형식에서 플래
   그를 사용하는 것과 거의 같은 방식으로 시퀀스를 사용합니다:

   +------------+--------------------------------------------+
   | 시퀀스     | 설명                                       |
   |============|============================================|
   | unseen     | 읽지 않았지만, 이전에 MUA에서 감지했습니다 |
   |            | .                                          |
   +------------+--------------------------------------------+
   | replied    | 답장함                                     |
   +------------+--------------------------------------------+
   | flagged    | 중요하다고 표시됨                          |
   +------------+--------------------------------------------+

   "MHMessage" instances offer the following methods:

   get_sequences()

      이 메시지를 포함하는 시퀀스의 이름 리스트를 반환합니다.

   set_sequences(sequences)

      이 메시지를 포함하는 시퀀스의 리스트를 설정합니다.

   add_sequence(sequence)

      이 메시지를 포함하는 시퀀스의 리스트에 *sequence*를 추가합니다.

   remove_sequence(sequence)

      이 메시지를 포함하는 시퀀스의 리스트에서 *sequence*를 제거합니다
      .

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

+----------------------+---------------------------------+
| 결과 상태            | "MaildirMessage" 상태           |
|======================|=================================|
| "unseen" 시퀀스      | S 플래그 없음                   |
+----------------------+---------------------------------+
| "replied" 시퀀스     | R 플래그                        |
+----------------------+---------------------------------+
| "flagged" 시퀀스     | F 플래그                        |
+----------------------+---------------------------------+

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

+----------------------+------------------------------------------------+
| 결과 상태            | "mboxMessage"나 "MMDFMessage" 상태             |
|======================|================================================|
| "unseen" 시퀀스      | R 플래그 없음                                  |
+----------------------+------------------------------------------------+
| "replied" 시퀀스     | A 플래그                                       |
+----------------------+------------------------------------------------+
| "flagged" 시퀀스     | F 플래그                                       |
+----------------------+------------------------------------------------+

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

+----------------------+-------------------------------+
| 결과 상태            | "BabylMessage" 상태           |
|======================|===============================|
| "unseen" 시퀀스      | "unseen" 레이블               |
+----------------------+-------------------------------+
| "replied" 시퀀스     | "answered" 레이블             |
+----------------------+-------------------------------+


"BabylMessage" objects
----------------------

class mailbox.BabylMessage(message=None)

   Babyl 특정 동작을 갖는 메시지. 매개 변수 *message*는 "Message" 생성
   자와 같은 의미입니다.

   *어트리뷰트(attributes)*라고 부르는 특정 메시지 레이블은 관례에 따
   라 특별한 의미를 갖도록 정의됩니다. 어트리뷰트는 다음과 같습니다:

   +-------------+--------------------------------------------+
   | 레이블      | 설명                                       |
   |=============|============================================|
   | unseen      | 읽지 않았지만, 이전에 MUA에서 감지했습니다 |
   |             | .                                          |
   +-------------+--------------------------------------------+
   | deleted     | 후에 삭제하기 위해 표시함                  |
   +-------------+--------------------------------------------+
   | filed       | 다른 파일이나 사서함에 복사됨              |
   +-------------+--------------------------------------------+
   | answered    | 답장함                                     |
   +-------------+--------------------------------------------+
   | forwarded   | 전달됨                                     |
   +-------------+--------------------------------------------+
   | edited      | 사용자가 수정했음                          |
   +-------------+--------------------------------------------+
   | resent      | 다시 보냈음                                |
   +-------------+--------------------------------------------+

   By default, Rmail displays only visible headers. The "BabylMessage"
   class, though, uses the original headers because they are more
   complete. Visible headers may be accessed explicitly if desired.

   "BabylMessage" instances offer the following methods:

   get_labels()

      메시지의 레이블 리스트를 반환합니다.

   set_labels(labels)

      메시지의 레이블 리스트를 *labels*로 설정합니다.

   add_label(label)

      메시지의 레이블 리스트에 *label*을 추가합니다.

   remove_label(label)

      메시지의 레이블 리스트에서 *label*을 제거합니다.

   get_visible()

      헤더가 메시지의 가시적 헤더이고 본문이 비어있는 "Message" 인스턴
      스를 반환합니다.

   set_visible(visible)

      메시지의 가시적 헤더를 *message*의 헤더와 같게 설정합니다. 매개
      변수 *visible*은 "Message" 인스턴스, "email.message.Message" 인
      스턴스, 문자열 또는 파일류 객체(텍스트 모드로 열어야 합니다)여야
      합니다.

   update_visible()

      When a "BabylMessage" instance's original headers are modified,
      the visible headers are not automatically modified to
      correspond. This method updates the visible headers as follows:
      each visible header with a corresponding original header is set
      to the value of the original header, each visible header without
      a corresponding original header is removed, and any of *Date*,
      *From*, *Reply-To*, *To*, *CC*, and *Subject* that are present
      in the original headers but not the visible headers are added to
      the visible headers.

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

+---------------------+---------------------------------+
| 결과 상태           | "MaildirMessage" 상태           |
|=====================|=================================|
| "unseen" 레이블     | S 플래그 없음                   |
+---------------------+---------------------------------+
| "deleted" 레이블    | T 플래그                        |
+---------------------+---------------------------------+
| "answered" 레이블   | R 플래그                        |
+---------------------+---------------------------------+
| "forwarded" 레이블  | P 플래그                        |
+---------------------+---------------------------------+

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

+--------------------+------------------------------------------------+
| 결과 상태          | "mboxMessage"나 "MMDFMessage" 상태             |
|====================|================================================|
| "unseen" 레이블    | R 플래그 없음                                  |
+--------------------+------------------------------------------------+
| "deleted" 레이블   | D 플래그                                       |
+--------------------+------------------------------------------------+
| "answered" 레이블  | A 플래그                                       |
+--------------------+------------------------------------------------+

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

+--------------------+----------------------------+
| 결과 상태          | "MHMessage" 상태           |
|====================|============================|
| "unseen" 레이블    | "unseen" 시퀀스            |
+--------------------+----------------------------+
| "answered" 레이블  | "replied" 시퀀스           |
+--------------------+----------------------------+


"MMDFMessage" objects
---------------------

class mailbox.MMDFMessage(message=None)

   MMDF 특정 동작을 갖는 메시지. 매개 변수 *message*는 "Message" 생성
   자와 같은 의미입니다.

   mbox 사서함의 메시지와 마찬가지로, MMDF 메시지는 보낸 사람의 주소와
   배달 날짜가 "From "으로 시작하는 첫 줄에 저장됩니다. 마찬가지로, 메
   시지의 상태를 나타내는 플래그는 일반적으로 *Status*와 *X-Status* 헤
   더에 저장됩니다.

   MMDF 메시지의 전통적인 플래그는 mbox 메시지의 플래그와 동일하며 다
   음과 같습니다:

   +--------+------------+----------------------------------+
   | 플래그 | 의미       | 설명                             |
   |========|============|==================================|
   | R      | 읽었음     | 읽었음                           |
   +--------+------------+----------------------------------+
   | O      | 오래되었음 | 전에 MUA에서 감지됨              |
   +--------+------------+----------------------------------+
   | D      | 삭제됨     | 후에 삭제하기 위해 표시함        |
   +--------+------------+----------------------------------+
   | F      | 깃발 표시  | 중요하다고 표시됨                |
   +--------+------------+----------------------------------+
   | A      | 답변함     | 답장함                           |
   +--------+------------+----------------------------------+

   "R"과 "O" 플래그는 *Status* 헤더에 저장되고, "D", "F" 및 "A" 플래그
   는 *X-Status* 헤더에 저장됩니다. 플래그와 헤더는 일반적으로 언급된
   순서대로 나타납니다.

   "MMDFMessage" instances offer the following methods, which are
   identical to those offered by "mboxMessage":

   get_from()

      mbox 사서함에서 메시지의 시작을 표시하는 "From " 줄을 나타내는
      문자열을 반환합니다. 선행 "From "과 후행 줄넘김은 제외됩니다.

   set_from(from_, time_=None)

      Set the "From " line to *from_*, which should be specified
      without a leading "From " or trailing newline. For convenience,
      *time_* may be specified and will be formatted appropriately and
      appended to *from_*. If *time_* is specified, it should be a
      "time.struct_time" instance, a tuple suitable for passing to
      "time.strftime()", or "True" (to use "time.gmtime()").

   get_flags()

      현재 설정된 플래그를 지정하는 문자열을 반환합니다. 메시지가 전통
      적인 형식을 준수하면, 결과는 "'R'", "'O'", "'D'", "'F'" 및 "'A'"
      각각이 이 순서로 0이나 1회 등장하도록 이어붙인 것입니다.

   set_flags(flags)

      *flags*에서 지정한 플래그를 설정하고 다른 모든 플래그를 설정 해
      제합니다. 매개 변수 *flags*는 "'R'", "'O'", "'D'", "'F'" 및
      "'A'" 각각이 0개 이상 등장하도록 임의의 순서로 이어붙인 것이어야
      합니다.

   add_flag(flag)

      다른 플래그를 변경하지 않고 *flag*로 지정된 플래그를 설정합니다.
      한 번에 둘 이상의 플래그를 추가하기 위해, *flag*가 둘 이상의 문
      자로 구성된 문자열일 수 있습니다.

   remove_flag(flag)

      다른 플래그를 변경하지 않고 *flag*에 의해 지정된 플래그를 설정
      해제합니다. 한 번에 둘 이상의 플래그를 제거하기 위해, *flag*는
      둘 이상의 문자로 구성된 문자열일 수 있습니다.

When an "MMDFMessage" instance is created based upon a
"MaildirMessage" instance, a "From " line is generated based upon the
"MaildirMessage" instance's delivery date, and the following
conversions take place:

+-------------------+---------------------------------+
| 결과 상태         | "MaildirMessage" 상태           |
|===================|=================================|
| R 플래그          | S 플래그                        |
+-------------------+---------------------------------+
| O 플래그          | "cur" 하위 디렉터리             |
+-------------------+---------------------------------+
| D 플래그          | T 플래그                        |
+-------------------+---------------------------------+
| F 플래그          | F 플래그                        |
+-------------------+---------------------------------+
| A 플래그          | R 플래그                        |
+-------------------+---------------------------------+

When an "MMDFMessage" instance is created based upon an "MHMessage"
instance, the following conversions take place:

+---------------------+----------------------------+
| 결과 상태           | "MHMessage" 상태           |
|=====================|============================|
| R 플래그와 O 플래그 | "unseen" 시퀀스 없음       |
+---------------------+----------------------------+
| O 플래그            | "unseen" 시퀀스            |
+---------------------+----------------------------+
| F 플래그            | "flagged" 시퀀스           |
+---------------------+----------------------------+
| A 플래그            | "replied" 시퀀스           |
+---------------------+----------------------------+

When an "MMDFMessage" instance is created based upon a "BabylMessage"
instance, the following conversions take place:

+---------------------+-------------------------------+
| 결과 상태           | "BabylMessage" 상태           |
|=====================|===============================|
| R 플래그와 O 플래그 | "unseen" 레이블 없음          |
+---------------------+-------------------------------+
| O 플래그            | "unseen" 레이블               |
+---------------------+-------------------------------+
| D 플래그            | "deleted" 레이블              |
+---------------------+-------------------------------+
| A 플래그            | "answered" 레이블             |
+---------------------+-------------------------------+

When an "MMDFMessage" instance is created based upon an "mboxMessage"
instance, the "From " line is copied and all flags directly
correspond:

+-------------------+------------------------------+
| 결과 상태         | "mboxMessage" 상태           |
|===================|==============================|
| R 플래그          | R 플래그                     |
+-------------------+------------------------------+
| O 플래그          | O 플래그                     |
+-------------------+------------------------------+
| D 플래그          | D 플래그                     |
+-------------------+------------------------------+
| F 플래그          | F 플래그                     |
+-------------------+------------------------------+
| A 플래그          | A 플래그                     |
+-------------------+------------------------------+


예외
====

The following exception classes are defined in the "mailbox" module:

exception mailbox.Error

   기타 모든 다른 모듈 특정 예외에 대한 베이스 클래스.

exception mailbox.NoSuchMailboxError

   사서함이 기대되지만 찾을 수 없을 때 발생합니다, 가령 존재하지 않는
   경로로 (그리고 "False"로 설정된 *create* 매개 변수를 사용하여)
   "Mailbox" 서브 클래스를 인스턴스 화하거나, 존재하지 않는 폴더를 열
   때.

exception mailbox.NotEmptyError

   사서함이 비어 있지 않지만 비어있을 것으로 기대될 때 발생합니다, 가
   령 메시지가 포함된 폴더를 삭제할 때.

exception mailbox.ExternalClashError

   Raised when some mailbox-related condition beyond the control of
   the program causes it to be unable to proceed, such as when failing
   to acquire a lock that another program already holds a lock, or
   when a uniquely generated file name already exists.

exception mailbox.FormatError

   파일의 데이터를 구문 분석할 수 없을 때 발생합니다, 가령 "MH" 인스턴
   스가 손상된 ".mh_sequences" 파일을 읽으려고 할 때.


예
==

사서함에 있는 모든 흥미롭게 보이는 메시지의 제목을 인쇄하는 간단한 예:

   import mailbox
   for message in mailbox.mbox('~/mbox'):
       subject = message['subject']       # Could possibly be None.
       if subject and 'python' in subject.lower():
           print(subject)

변환할 수 있는 모든 형식별 정보를 변환하면서, Babyl 사서함에서 MH 사서
함으로 모든 메일을 복사하려면:

   import mailbox
   destination = mailbox.MH('~/Mail')
   destination.lock()
   for message in mailbox.Babyl('~/RMAIL'):
       destination.add(mailbox.MHMessage(message))
   destination.flush()
   destination.unlock()

이 예에서는 여러 메일링 리스트로부터의 메일을 다른 사서함으로 정렬하여
넣고, 다른 프로그램에 의한 동시 수정으로 인한 메일 손상, 프로그램 중단
으로 인한 메일 손실 또는 사서함에 있는 잘못된 메시지로 인한 조기 종료
를 방지하도록 주의합니다:

   import mailbox
   import email.errors

   list_names = ('python-list', 'python-dev', 'python-bugs')

   boxes = {name: mailbox.mbox('~/email/%s' % name) for name in list_names}
   inbox = mailbox.Maildir('~/Maildir', factory=None)

   for key in inbox.iterkeys():
       try:
           message = inbox[key]
       except email.errors.MessageParseError:
           continue                # The message is malformed. Just leave it.

       for name in list_names:
           list_id = message['list-id']
           if list_id and name in list_id:
               # Get mailbox to use
               box = boxes[name]

               # Write copy to disk before removing original.
               # If there's a crash, you might duplicate a message, but
               # that's better than losing a message completely.
               box.lock()
               box.add(message)
               box.flush()
               box.unlock()

               # Remove original message
               inbox.lock()
               inbox.discard(key)
               inbox.flush()
               inbox.unlock()
               break               # Found destination, so stop looking.

   for box in boxes.itervalues():
       box.close()
