mailbox
— Manipulate mailboxes in various formats¶
소스 코드: 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 fromMailbox
and your code should instantiate a particular subclass.The
Mailbox
interface is dictionary-like, with small keys corresponding to messages. Keys are issued by theMailbox
instance with which they will be used and are only meaningful to thatMailbox
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 methodadd()
and removed using adel
statement or the set-like methodsremove()
anddiscard()
.Mailbox
interface semantics differ from dictionary semantics in some noteworthy ways. Each time a message is requested, a new representation (typically aMessage
instance) is generated based upon the current state of the mailbox. Similarly, when a message is added to aMailbox
instance, the provided message representation’s contents are copied. In neither case is a reference to the message representation kept by theMailbox
instance.The default
Mailbox
iterator iterates over message representations, not keys as the defaultdictionary
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 aKeyError
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 asmbox
for concurrent writing. If you’re modifying a mailbox, you must lock it by calling thelock()
andunlock()
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에 해당하는 메시지의 형식별 정보가 변경되지 않습니다.
- keys()¶
The same as
iterkeys()
, except that alist
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 theMailbox
instance was initialized.참고
__iter__()
의 동작은 키를 이터레이트 하는 딕셔너리의 동작과 다릅니다.
- values()¶
The same as
itervalues()
, except that alist
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 theMailbox
instance was initialized.
- items()¶
The same as
iteritems()
, except that alist
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 aKeyError
exception is raised if the method was called as__getitem__()
. The message is represented as an instance of the appropriate format-specificMessage
subclass unless a custom message factory was specified when theMailbox
instance was initialized.
- get_message(key)¶
key에 해당하는 메시지의 표현을 적절한 형식별
Message
서브 클래스의 인스턴스로 반환하거나, 그러한 메시지가 없으면KeyError
예외를 발생시킵니다.
- get_bytes(key)¶
key에 해당하는 메시지의 바이트 표현을 반환하거나, 그러한 메시지가 없으면
KeyError
예외를 발생시킵니다.Added in version 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 theMailbox
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-specificMessage
subclass unless a custom message factory was specified when theMailbox
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 aKeyError
exception will be raised, so in general it is incorrect for arg to be aMailbox
instance.참고
딕셔너리와 달리 키워드 인자는 지원되지 않습니다.
- flush()¶
Write any pending changes to the filesystem. For some
Mailbox
subclasses, changes are always written immediately andflush()
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 byMaildir
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.
버전 3.13에서 변경:
Maildir
now ignores files with a leading dot.Maildir
instances have all of the methods ofMailbox
in addition to the following:- list_folders()¶
모든 폴더의 이름 리스트를 반환합니다.
- get_folder(folder)¶
Return a
Maildir
instance representing the folder whose name is folder. ANoSuchMailboxError
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 명세는 메일을 읽는 프로그램이 이 작업을 가끔 수행해야 한다고 말합니다.
- get_flags(key)¶
Return as a string the flags that are set on the message corresponding to key. This is the same as
get_message(key).get_flags()
but much faster, because it does not open the message file. Use this method when iterating over the keys to determine which messages are interesting to get.If you do have a
MaildirMessage
object, use itsget_flags()
method instead, because changes made by the message’sset_flags()
,add_flag()
andremove_flag()
methods are not reflected here until the mailbox’s__setitem__()
method is called.Added in version 3.13.
- set_flags(key, flags)¶
On the message corresponding to key, set the flags specified by flags and unset all others. Calling
some_mailbox.set_flags(key, flags)
is similar toone_message = some_mailbox.get_message(key) one_message.set_flags(flags) some_mailbox[key] = one_message
but faster, because it does not open the message file.
If you do have a
MaildirMessage
object, use itsset_flags()
method instead, because changes made with this mailbox method will not be visible to the message object’s method,get_flags()
.Added in version 3.13.
- add_flag(key, flag)¶
On the message corresponding to key, set the flags 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.
Considerations for using this method versus the message object’s
add_flag()
method are similar to those forset_flags()
; see the discussion there.Added in version 3.13.
- remove_flag(key, flag)¶
On the message corresponding to key, unset the flags specified by flag without changing other flags. To remove more than one flag at a time, flag may be a string of more than one character.
Considerations for using this method versus the message object’s
remove_flag()
method are similar to those forset_flags()
; see the discussion there.Added in version 3.13.
- get_info(key)¶
Return a string containing the info for the message corresponding to key. This is the same as
get_message(key).get_info()
but much faster, because it does not open the message file. Use this method when iterating over the keys to determine which messages are interesting to get.If you do have a
MaildirMessage
object, use itsget_info()
method instead, because changes made by the message’sset_info()
method are not reflected here until the mailbox’s__setitem__()
method is called.Added in version 3.13.
- set_info(key, info)¶
Set the info of the message corresponding to key to info. Calling
some_mailbox.set_info(key, flags)
is similar toone_message = some_mailbox.get_message(key) one_message.set_info(info) some_mailbox[key] = one_message
but faster, because it does not open the message file.
If you do have a
MaildirMessage
object, use itsset_info()
method instead, because changes made with this mailbox method will not be visible to the message object’s method,get_info()
.Added in version 3.13.
Some
Mailbox
methods implemented byMaildir
deserve special remarks:- add(message)¶
- __setitem__(key, message)¶
- update(arg)¶
경고
이 메서드들은 현재 프로세스 ID를 기반으로 고유한 파일 이름을 생성합니다. 다중 스레드를 사용할 때, 이러한 메서드를 사용하여 같은 사서함을 동시에 조작하지 않도록 스레드를 조정하지 않으면 감지되지 않은 이름 충돌이 발생하여 사서함이 손상될 수 있습니다.
- flush()¶
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 bymbox
deserve special remarks:
더 보기
- 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 thecontext
or.mh_profile
files that are used by mh to store its state and configuration.MH
instances have all of the methods ofMailbox
in addition to the following:버전 3.13에서 변경: Supported folders that don’t contain a
.mh_sequences
file.- list_folders()¶
모든 폴더의 이름 리스트를 반환합니다.
- get_folder(folder)¶
Return an
MH
instance representing the folder whose name is folder. ANoSuchMailboxError
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 byMH
deserve special remarks:- remove(key)¶
- __delitem__(key)¶
- discard(key)¶
이 메서드들은 메시지를 즉시 삭제합니다. 이름 앞에 쉼표를 추가하여 메시지를 삭제하도록 표시하는 MH 규칙은 사용되지 않습니다.
- lock()¶
- unlock()¶
Three locking mechanisms are used—dot locking and, if available, the
flock()
andlockf()
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 사서함에 대한 모든 변경 사항이 즉시 적용되므로, 이 메서드는 아무 작업도 수행하지 않습니다.
더 보기
- 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 ofMailbox
in addition to the following:- get_labels()¶
사서함에 사용된 모든 사용자 정의 레이블의 이름 리스트를 반환합니다.
참고
Babyl 옵션 섹션의 레이블 목록을 참조하지 않고 사서함에 있는 레이블을 확인하기 위해 실제 메시지를 검사하지만, 사서함이 수정될 때마다 Babyl 섹션이 갱신됩니다.
Some
Mailbox
methods implemented byBabyl
deserve special remarks:- get_file(key)¶
Babyl 사서함에서, 메시지 헤더는 메시지 본문과 연속적으로 저장되지 않습니다. 파일류 표현을 생성하기 위해, 헤더와 본문이 파일과 동일한 API를 가진
io.BytesIO
인스턴스에 함께 복사됩니다. 결과적으로, 파일류 객체는 하부 사서함과는 진짜로 독립적이지만 문자열 표현보다 메모리를 절약하지 않습니다.
더 보기
- 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 byMMDF
deserve special remarks:
더 보기
- tin의 mmdf 매뉴얼 페이지
뉴스 리더인 tin의 설명서에 있는 MMDF 형식의 명세.
- MMDF
Multichannel Memorandum Distribution Facility를 설명하는 위키피디아 기사.
Message
objects¶
- class mailbox.Message(message=None)¶
A subclass of the
email.message
module’sMessage
. Subclasses ofmailbox.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 aMessage
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 usingMailbox
instances. In some situations, the time and memory required to generateMessage
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 aMailbox
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
하위 디렉터리에 저장되어야 하면)를 반환합니다.참고
A message is typically moved from
new
tocur
after its mailbox has been accessed, whether or not the message has been read. A messagemsg
has been read if"S" in msg.get_flags()
isTrue
.
- 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:
결과 상태 |
|
---|---|
“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:
결과 상태 |
|
---|---|
“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:
결과 상태 |
|
---|---|
“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 totime.strftime()
, orTrue
(to usetime.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:
결과 상태 |
|
---|---|
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:
결과 상태 |
|
---|---|
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:
결과 상태 |
|
---|---|
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:
결과 상태 |
|
---|---|
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:
결과 상태 |
|
---|---|
“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:
결과 상태 |
|
---|---|
“unseen” 시퀀스 |
R 플래그 없음 |
“replied” 시퀀스 |
A 플래그 |
“flagged” 시퀀스 |
F 플래그 |
When an MHMessage
instance is created based upon a
BabylMessage
instance, the following conversions take place:
결과 상태 |
|
---|---|
“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()¶
Return a
Message
instance whose headers are the message’s visible headers and whose body is empty.
- 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:
결과 상태 |
|
---|---|
“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:
결과 상태 |
|
---|---|
“unseen” 레이블 |
R 플래그 없음 |
“deleted” 레이블 |
D 플래그 |
“answered” 레이블 |
A 플래그 |
When a BabylMessage
instance is created based upon an
MHMessage
instance, the following conversions take place:
결과 상태 |
|
---|---|
“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 bymboxMessage
:- 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 totime.strftime()
, orTrue
(to usetime.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:
결과 상태 |
|
---|---|
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:
결과 상태 |
|
---|---|
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:
결과 상태 |
|
---|---|
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:
결과 상태 |
|
---|---|
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.
예¶
사서함에 있는 모든 흥미롭게 보이는 메시지의 제목을 인쇄하는 간단한 예:
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()