# `email` — 전자 메일과 MIME 처리 패키지

소스 코드: Lib/email/__init__.py

`email` 패키지는 전자 메일 메시지를 관리하기 위한 라이브러리입니다. 특히 SMTP (RFC 2821), NNTP 또는 다른 서버로 전자 메일 메시지를 보내도록 설계되지 않았습니다; 그런 것들은 `smtplib`와 `nntplib` 같은 모듈의 기능입니다. `email` 패키지는 RFC 5233와 RFC 6532뿐만 아니라, RFC 2045, RFC 2046, RFC 2047, RFC 2183 및 RFC 2231와 같은 MIME 관련 RFC를 지원하여 가능한 최대로 RFC를 준수하려고 시도합니다.

email 패키지의 전체 구조는 세 가지 주요 구성 요소와 다른 구성 요소의 동작을 제어하는 네 번째 구성 요소로 나눌 수 있습니다.

패키지의 중심 구성 요소는 전자 메일 메시지를 나타내는 “객체 모델”입니다. 응용 프로그램은 주로 `message` 서브 모듈에 정의된 객체 모델 인터페이스를 통해 패키지와 상호 작용합니다. 응용 프로그램은 이 API를 사용하여 기존 전자 메일에 대해 질문을 하거나, 새 전자 메일을 작성하거나, 같은 객체 모델 인터페이스를 사용하는 전자 메일 하위 구성 요소를 추가하거나 제거할 수 있습니다. 즉, 전자 메일 메시지와 MIME 하위 구성 요소의 특성에 따라, 전자 메일 객체 모델은 모두 `EmailMessage` API를 제공하는 객체의 트리 구조입니다.

패키지의 다른 두 가지 주요 구성 요소는 `parser`와 `generator`입니다. 구문 분석기(parser)는 직렬화된 전자 메일 메시지(바이트 스트림)를 가져와 `EmailMessage` 객체의 트리로 변환합니다. 생성기(generator)는 `EmailMessage`를 받아서 직렬화된 바이트 스트림으로 다시 변환합니다. (구문 분석기와 생성기는 텍스트 문자의 스트림도 처리하지만, 이 사용법은 유효하지 않은 메시지로 끝나기 쉬우므로 사용하지 않는 것이 좋습니다.)

제어 구성 요소는 `policy` 모듈입니다. 모든 `EmailMessage`, 모든 `generator` 및 모든 `parser`에는 그것의 동작을 제어하는 연관된 `policy` 객체가 있습니다. 일반적으로 응용 프로그램은 `EmailMessage`가 만들어질 때 정책을 지정하기만 하면 되는데, `EmailMessage`를 직접 인스턴스로 만들어서 새 전자 메일을 만들거나, `parser`를 사용하여 입력 스트림을 구문 분석할 때입니다. 그러나 메시지가 `generator`를 사용하여 직렬화될 때 정책을 변경할 수 있습니다. 이것은, 예를 들어, 범용 전자 메일 메시지를 디스크에서 구분 분석하지만, 전자 메일 서버로 보낼 때 표준 SMTP 설정을 사용하여 직렬화할 수 있도록 합니다.

email 패키지는 응용 프로그램으로부터 각종 관리적인 RFC의 세부 사항을 숨기기 위해 최선을 다합니다. 개념적으로 응용 프로그램은 전자 메일 메시지를 유니코드 텍스트와 바이너리 첨부 파일의 구조화 된 트리로 처리할 수 있어야 하며, 직렬화될 때 이것들이 어떻게 표시되는지 걱정할 필요가 없어야 합니다. 하지만, 실제로는, MIME 메시지와 그 구조, 특히 MIME “콘텐츠 형식(content type)”의 이름과 특성, 그리고 다중 부분 문서를 식별하는 방법을 관리하는 규칙 중 적어도 일부를 신경 쓸 필요가 종종 있습니다. 대부분, 이 지식은 더욱 복잡한 응용 프로그램에만 필요하며, 그럴 때도 그 구조가 어떻게 표현되는지에 대한 세부 사항이 아닌, 문제가 되는 고수준 구조에 관한 것이어야 합니다. MIME 콘텐츠 유형은 최신 인터넷 소프트웨어(전자 메일뿐만 아니라)에서 널리 사용되므로, 많은 프로그래머에게 익숙한 개념입니다.

다음 절에서는 `email` 패키지의 기능에 관해 설명합니다. 응용 프로그램에서 사용할 기본 인터페이스인 `message` 객체 모델부터 시작하여, `parser`와 `generator` 구성 요소를 다룹니다. 그런 다음 `policy` 제어를 다뤄서, 라이브러리의 주요 구성 요소를 마무리합니다.

다음 세 절에서는 패키지에서 발생할 수 있는 예외와 `parser`가 감지할 수 있는 결함(RFC를 준수하지 않는)에 관해 설명합니다. 그런 다음 `headerregistry`와 `contentmanager` 하위 구성 요소를 다룹니다. 이것들은 각각 헤더와 페이로드를 보다 자세하게 조작할 수 있는 도구를 제공합니다. 이 두 구성 요소는 모두 단순하지 않은 메시지를 소비하고 생성하는 것과 관련된 기능을 포함하지만, 고급 응용 프로그램이 관심을 가질 확장 API를 설명하기도 합니다.

그다음은 이전 절에서 다룬 API의 기본 부분들을 사용하는 일련의 예제입니다.

앞의 내용은 email 패키지의 최신(유니코드 친화적인) API를 나타냅니다. `Message` 클래스로 시작하는 나머지 절에서는 전자 메일 메시지가 표현되는 방법에 대한 세부 사항을 훨씬 직접 다루는 레거시 `compat32` API를 다룹니다. `compat32` API는 응용 프로그램으로부터 RFC 세부 사항을 숨기지 않습니다만, 그 수준에서 작동해야 하는 응용 프로그램에는 유용한 도구가 될 수 있습니다. 이 설명서는 과거 호환성을 위해 여전히 `compat32` API를 사용하는 응용 프로그램과도 관련이 있습니다.

버전 3.6에서 변경: 새로운 `EmailMessage`/`EmailPolicy` API를 홍보하기 위해 설명서가 재구성되고 다시 작성되었습니다.

`email` 패키지 설명서의 목차:

- `email.message`: Representing an email message
- `email.parser`: Parsing email messages
  - FeedParser API
  - Parser API
  - Additional notes
- `email.generator`: Generating MIME documents
- `email.policy`: Policy Objects
- `email.errors`: 예외와 결함 클래스
- `email.headerregistry`: Custom Header Objects
- `email.contentmanager`: MIME 콘텐츠 관리
  - 콘텐츠 관리자 인스턴스
- `email`: 예제

레거시 API:

- `email.message.Message`: Representing an email message using the `compat32` API
- `email.mime`: Creating email and MIME objects from scratch
- `email.header`: Internationalized headers
- `email.charset`: Representing character sets
- `email.encoders`: Encoders
- `email.utils`: 기타 유틸리티
- `email.iterators`: 이터레이터

더 보기

모듈 `smtplib`

  SMTP (Simple Mail Transport Protocol) 클라이언트

모듈 `poplib`

  POP (Post Office Protocol) 클라이언트

모듈 `imaplib`

  IMAP (Internet Message Access Protocol) 클라이언트

모듈 `nntplib`

  NNTP (Net News Transport Protocol) 클라이언트

모듈 `mailbox`

  다양한 표준 형식을 사용하여 디스크에 메시지 모음을 만들고, 읽고, 관리하는 도구.

모듈 `smtpd`

  SMTP 서버 프레임워크 (주로 테스트에 유용합니다)