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를 추가하고 할당된 키를 반환합니다.

매개 변수 messageMessage 인스턴스, 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는 파일류 메시지 표현(바이너리 모드에서 열린 것처럼 동작합니다)을 받아들이고 사용자 정의 표현을 반환하는 콜러블 객체입니다. factoryNone이면, MaildirMessage 가 기본 메시지 표현으로 사용됩니다. createTrue이면, 사서함이 없으면 만들어집니다.

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

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

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

Maildir 사서함에는 세 개의 하위 디렉터리가 있습니다, 이름하여 tmp, newcur. 메시지는 일시적으로 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는 파일류 메시지 표현(바이너리 모드에서 열린 것처럼 동작합니다)을 받아들이고 사용자 정의 표현을 반환하는 콜러블 객체입니다. factoryNone이면, mboxMessage가 기본 메시지 표현으로 사용됩니다. createTrue이면, 사서함이 없으면 만들어집니다.

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는 파일류 메시지 표현(바이너리 모드에서 열린 것처럼 동작합니다)을 받아들이고 사용자 정의 표현을 반환하는 콜러블 객체입니다. factoryNone이면, MHMessage가 기본 메시지 표현으로 사용됩니다. createTrue이면, 사서함이 없으면 만들어집니다.

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: 사용자와 프로그래머를 위한 이메일

mhnmh에 대한 GPL 라이선스 책, 사서함 형식에 대한 정보가 있습니다.

Babyl objects

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

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

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는 파일류 메시지 표현(바이너리 모드에서 열린 것처럼 동작합니다)을 받아들이고 사용자 정의 표현을 반환하는 콜러블 객체입니다. factoryNone이면, MMDFMessage가 기본 메시지 표현으로 사용됩니다. createTrue이면, 사서함이 없으면 만들어집니다.

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 특정 동작을 갖는 메시지. 매개 변수 messageMessage 생성자와 같은 의미입니다.

일반적으로, 메일 사용자 에이전트 응용 프로그램은 사용자가 사서함을 처음 열고 닫은 후 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:

결과 상태

mboxMessageMMDFMessage 상태

“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 특정 동작을 갖는 메시지. 매개 변수 messageMessage 생성자와 같은 의미입니다.

mbox 사서함의 메시지는 단일 파일에 함께 저장됩니다. 보낸 사람의 봉투 주소(envelope address)와 배달 시간은 일반적으로 메시지의 시작을 나타내는 데 사용되는 “From “으로 시작하는 줄에 저장되지만, mbox 구현 간에 이 데이터의 정확한 형식에는 상당한 차이가 있습니다. 읽었는지나 중요하다고 표시되었는지와 같은 메시지 상태를 나타내는 플래그는 일반적으로 StatusX-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 특정 동작을 갖는 메시지. 매개 변수 messageMessage 생성자와 같은 의미입니다.

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

시퀀스

설명

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:

결과 상태

mboxMessageMMDFMessage 상태

“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 특정 동작을 갖는 메시지. 매개 변수 messageMessage 생성자와 같은 의미입니다.

어트리뷰트(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의 헤더와 같게 설정합니다. 매개 변수 visibleMessage 인스턴스, 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:

결과 상태

mboxMessageMMDFMessage 상태

“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 특정 동작을 갖는 메시지. 매개 변수 messageMessage 생성자와 같은 의미입니다.

mbox 사서함의 메시지와 마찬가지로, MMDF 메시지는 보낸 사람의 주소와 배달 날짜가 “From “으로 시작하는 첫 줄에 저장됩니다. 마찬가지로, 메시지의 상태를 나타내는 플래그는 일반적으로 StatusX-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()