mailbox — 다양한 형식의 메일박스 조작

mailbox — 다양한 형식의 메일박스 조작

mailbox 모듈은 디스크의 메일박스와 그 안의 메시지에 접근·조작하기 위한 두 클래스, MailboxMessage를 정의해요. Mailbox는 키에서 메시지로의 딕셔너리 유사 매핑을 제공하고, Messageemail.message 모듈의 Message 클래스를 형식별 상태와 동작으로 확장해요. 지원되는 메일박스 형식은 Maildir, mbox, MH, Babyl, MMDF예요.

출처: Python documentation

본문

Mailbox 객체

class mailbox.Mailbox — 검사하고 수정할 수 있는 메일박스예요. Mailbox 클래스는 인터페이스를 정의하며 인스턴스화하도록 의도되지 않아요. 대신 형식별 하위 클래스가 Mailbox에서 상속하고, 코드는 특정 하위 클래스를 인스턴스화해야 해요.

Mailbox 인터페이스는 딕셔너리 유사하며, 작은 키가 메시지에 대응해요. 메시지는 add() 메서드로 추가되고 del 문이나 remove(), discard() 메서드로 제거돼요.

Mailbox 인터페이스 의미는 몇 가지 주목할 만한 방식에서 딕셔너리 의미와 달라요. 메시지가 요청될 때마다 메일박스의 현재 상태에 기반해 새 표현(보통 Message 인스턴스)이 생성돼요. 기본 Mailbox 이터레이터는 기본 dictionary 이터레이터처럼 키가 아니라 메시지 표현에 대해 순회해요.

경고: 다른 프로세스가 동시에 변경할 수 있는 메일박스를 수정할 때는 매우 주의하세요. 이런 작업에 가장 안전한 메일박스 형식은 Maildir이에요. 메일박스를 수정한다면 파일의 메시지를 읽거나 메시지를 추가·삭제하기 전에 lock()unlock() 메서드를 호출해 잠가야 해요. 잠그지 않으면 메시지 손실이나 전체 메일박스 손상의 위험이 있어요.

주요 메서드: add(message), remove(key), __delitem__(key), discard(key), __setitem__(key, message), iterkeys()/keys(), itervalues()/__iter__()/values(), iteritems()/items(), get(key, default=None)/__getitem__(key), get_message(key), get_bytes(key), get_string(key), get_file(key), __contains__(key), __len__(), clear(), pop(key, default=None), popitem(), update(arg), flush(), lock(), unlock(), close().

Maildir 객체

class mailbox.Maildir(dirname, factory=None, create=True) — Maildir 형식 메일박스용 Mailbox의 하위 클래스예요. Maildir은 qmail 메일 전송 에이전트를 위해 발명된 디렉터리 기반 메일박스 형식으로, 이제 다른 프로그램이 널리 지원해요. Maildir 메일박스의 메시지는 공통 디렉터리 구조 안의 별도 파일에 저장돼요. 이 설계 덕분에 Maildir 메일박스는 데이터 손상 없이 여러 무관한 프로그램이 접근·수정할 수 있어 파일 잠금이 불필요해요.

Maildir 메일박스는 tmp, new, cur의 세 하위 디렉터리를 포함해요. colon 속성은 Maildir 사양이 특정 메시지 파일 이름에 콜론(':') 사용을 요구하지만 일부 운영 체제가 이 문자를 허용하지 않기 때문에 대체 문자를 지정하는 데 사용돼요.

추가 메서드: list_folders(), get_folder(folder), add_folder(folder), remove_folder(folder), clean(), get_flags(key), set_flags(key, flags), add_flag(key, flag), remove_flag(key, flag), get_info(key), set_info(key, info).

mbox 객체

class mailbox.mbox(path, factory=None, create=True) — mbox 형식 메일박스용 Mailbox의 하위 클래스예요. mbox 형식은 Unix 시스템에서 메일을 저장하는 전형적인 형식이에요. mbox 메일박스의 모든 메시지는 단일 파일에 저장되며 각 메시지의 시작은 처음 다섯 문자가 “From “인 줄로 표시돼요. 호환성을 위해 mbox는 원본 형식(mboxo라고도 함)을 구현해요.

get_bytes(key, from_=False), get_file(key, from_=False), get_string(key, from_=False)는 다른 클래스와 비교해 추가 파라미터(from_)를 가져요. lock()/unlock()은 점 잠금과 flock(), lockf() 시스템 호출의 세 가지 잠금 메커니즘을 사용해요.

MH 객체

class mailbox.MH(path, factory=None, create=True) — MH 형식 메일박스용 Mailbox의 하위 클래스예요. MH는 MH 메시지 처리 시스템을 위해 발명된 디렉터리 기반 메일박스 형식이에요. 각 메시지는 자체 파일에 있으며, MH 메일박스는 메시지 외에 다른 MH 메일박스(폴더라고 함)를 포함할 수 있어요. MH 메일박스는 또한 메시지를 하위 폴더로 옮기지 않고 논리적으로 그룹화하는 데 사용되는 시퀀스(sequence)를 지원해요.

추가 메서드: list_folders(), get_folder(folder), add_folder(folder), remove_folder(folder), get_sequences(), set_sequences(sequences), pack().

Babyl 객체

class mailbox.Babyl(path, factory=None, create=True) — Babyl 형식 메일박스용 Mailbox의 하위 클래스예요. Babyl은 Emacs에 포함된 Rmail 메일 사용자 에이전트가 사용하는 단일 파일 메일박스 형식이에요. get_labels()은 메일박스에서 사용된 모든 사용자 정의 레이블 이름 리스트를 반환해요.

MMDF 객체

class mailbox.MMDF(path, factory=None, create=True) — MMDF 형식 메일박스용 Mailbox의 하위 클래스예요. MMDF는 메일 전송 에이전트인 Multichannel Memorandum Distribution Facility를 위해 발명된 단일 파일 메일박스 형식이에요. 각 메시지는 mbox 메시지와 같은 형태지만 네 개의 Control-A('\001') 문자를 포함하는 줄로 앞뒤를 묶어요.

Message 객체

class mailbox.Message(message=None)email.message 모듈의 Message의 하위 클래스예요. mailbox.Message의 하위 클래스는 메일박스 형식별 상태와 동작을 추가해요. Message 인스턴스는 Mailbox 인스턴스로 검색된 메시지를 나타내는 데 사용할 필요가 없어요.

MaildirMessage 객체

class mailbox.MaildirMessage(message=None) — Maildir 특정 동작을 가진 메시지예요. 각 cur 메시지는 상태 정보를 저장하기 위해 파일 이름에 추가된 “info” 섹션을 가져요. 표준 Maildir 플래그는 D(Draft), F(Flagged), P(Passed), R(Replied), S(Seen), T(Trashed)예요. 메서드: get_subdir(), set_subdir(subdir), get_flags(), set_flags(flags), add_flag(flag), remove_flag(flag), get_date(), set_date(date), get_info(), set_info(info).

mboxMessage 객체

class mailbox.mboxMessage(message=None) — mbox 특정 동작을 가진 메시지예요. 메시지 상태를 나타내는 기존 플래그는 R(Read), O(Old), D(Deleted), F(Flagged), A(Answered)예요. 메서드: get_from(), set_from(from_, time_=None), get_flags(), set_flags(flags), add_flag(flag), remove_flag(flag).

MHMessage 객체

class mailbox.MHMessage(message=None) — MH 특정 동작을 가진 메시지예요. MH 메시지는 전통적인 의미의 마크나 플래그를 지원하지 않지만, 임의 메시지의 논리적 그룹인 시퀀스를 지원해요. 메서드: get_sequences(), set_sequences(sequences), add_sequence(sequence), remove_sequence(sequence).

BabylMessage 객체

class mailbox.BabylMessage(message=None) — Babyl 특정 동작을 가진 메시지예요. 특정 메시지 레이블(속성)은 특별한 의미를 갖도록 관례에 따라 정의돼요. 메서드: get_labels(), set_labels(labels), add_label(label), remove_label(label), get_visible(), set_visible(visible), update_visible().

MMDFMessage 객체

class mailbox.MMDFMessage(message=None) — MMDF 특정 동작을 가진 메시지예요. mboxMessage가 제공하는 것과 동일한 메서드를 제공해요.

예외

  • exception mailbox.Error — 다른 모든 모듈 지정 예외의 기본 클래스.
  • exception mailbox.NoSuchMailboxError — 메일박스가 기대되지만 발견되지 않을 때 발생.
  • exception mailbox.NotEmptyError — 메일박스가 비어 있지 않지만 비어 있어야 할 때 발생.
  • exception mailbox.ExternalClashError — 프로그램 통제 밖의 메일박스 관련 조건으로 진행할 수 없을 때 발생.
  • exception mailbox.FormatError — 파일의 데이터를 파싱할 수 없을 때 발생.

예시

메일박스에서 흥미로워 보이는 모든 메시지의 제목을 출력하는 간단한 예시:

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

참고

  • 모듈 email — 메시지를 표현하고 조작.

더 알아보기 (Learn more)