email — 이메일 및 MIME 처리 패키지
email — 이메일 및 MIME 처리 패키지
email 패키지는 이메일 메시지를 다루기 위한 라이브러리예요. 특히 SMTP(RFC 2821), NNTP 또는 다른 서버로 이메일 메시지를 보내도록 설계되지는 않았어요 — 그건 smtplib 같은 모듈의 몫이죠. email 패키지는 가능한 한 RFC를 준수하려고 노력하면서, RFC 5322와 RFC 6532, 그리고 MIME 관련 RFC들(RFC 2045, RFC 2046, RFC 2047, RFC 2183, RFC 2231)을 지원해요.
출처: Python 표준 라이브러리
본문
email 패키지의 전체 구조는 크게 세 가지 주요 구성 요소로 나뉘고, 다른 구성 요소들의 동작을 제어하는 네 번째 구성 요소가 더해져요.
패키지의 핵심 구성 요소는 이메일 메시지를 표현하는 "객체 모델(object model)"이에요. 애플리케이션은 주로 message 서브 모듈에 정의된 객체 모델 인터페이스를 통해 패키지와 상호작용해요. 이 API를 사용하면 기존 이메일에 대해 질의하고, 새 이메일을 구성하고, 같은 객체 모델 인터페이스를 쓰는 이메일 하위 구성 요소를 추가·제거할 수 있어요. 다시 말해, 이메일 메시지와 그 MIME 하위 구성 요소의 본질을 따라, email 객체 모델은 모두 EmailMessage API를 제공하는 객체들의 트리 구조예요.
나머지 두 주요 구성 요소는 파서(parser) 와 생성기(generator) 예요. 파서는 이메일 메시지의 직렬화된 버전(바이트 스트림)을 받아 EmailMessage 객체 트리로 변환하고, 생성기는 EmailMessage를 다시 직렬화된 바이트 스트림으로 되돌려요. (파서와 생성기는 텍스트 문자 스트림도 처리하지만, 이 사용법은 어떤 식으로든 유효하지 않은 메시지가 만들어지기 쉬워서 권장되지 않아요.)
제어 구성 요소는 정책(policy) 모듈이에요. 모든 EmailMessage, 생성기, 파서는 그 동작을 제어하는 연관된 policy 객체를 가져요. 보통 애플리케이션은 EmailMessage가 생성될 때만 정책을 지정하면 돼요 — 새 이메일을 만들려고 EmailMessage를 직접 인스턴스화하거나, 파서로 입력 스트림을 파싱하거나 할 때 말이죠. 하지만 정책은 메시지를 생성기로 직렬화할 때도 바꿀 수 있어요. 예를 들어 디스크에서 일반 이메일 메시지를 파싱한 뒤, 이메일 서버로 보낼 때는 표준 SMTP 설정으로 직렬화할 수 있는 거예요.
email 패키지는 여러 관리 RFC의 세부 사항을 애플리케이션에서 최대한 숨기려고 해요. 개념적으로 애플리케이션은 이메일 메시지를 유니코드 텍스트와 이진 첨부 파일의 구조화된 트리로 다루면 되고, 직렬화될 때 이것들이 어떻게 표현되는지 걱정하지 않아도 돼요. 하지만 실제로는 MIME 메시지와 그 구조를 지배하는 규칙, 특히 MIME "콘텐츠 타입"의 이름과 성질, 그리고 그것들이 multipart 문서를 어떻게 식별하는지를 어느 정도 알아야 하는 경우가 많아요. 대체로 이런 지식은 더 복잡한 애플리케이션에서만 필요하고, 그래도 그 구조의 표현 방식 세부까지가 아니라 상위 수준 구조만 문제될 뿐이에요. MIME 콘텐츠 타입은 (이메일뿐 아니라) 현대 인터넷 소프트웨어에서 널리 쓰이기 때문에 많은 프로그래머에게 익숙한 개념이기도 해요.
구성 요소 개요
아래 절들은 email 패키지의 기능을 설명해요. 먼저 애플리케이션이 주로 쓰게 될 메시지 객체 모델부터 시작하고, 이어서 파서와 생성기 구성 요소, 그리고 정책 제어를 다룬 뒤, 라이브러리의 주요 구성 요소에 대한 설명을 마쳐요.
다음 세 절은 패키지가 발생시킬 수 있는 예외와 파서가 검출할 수 있는 결함(RFC 비준수)을 다뤄요. 그다음 headerregistry와 contentmanager 하위 구성 요소를 다루는데, 이 둘은 각각 헤더와 페이로드를 더 세밀하게 조작하는 도구를 제공해요. 두 구성 요소 모두 사소하지 않은 메시지를 소비·생산하는 데 관련된 기능을 담고 있으면서, 고급 애플리케이션에 흥미로운 확장성 API도 문서화해요.
그다음으로 앞 절들에서 다룬 API의 핵심 부분을 사용하는 예제 모음이 이어져요.
지금까지가 email 패키지의 현대적(유니코드 친화적) API예요. Message 클래스부터 시작하는 나머지 절들은 이메일 메시지가 어떻게 표현되는지의 세부 사항을 훨씬 더 직접적으로 다루는 레거시 compat32 API를 다뤄요. compat32 API는 RFC의 세부 사항을 애플리케이션에서 숨기지 않지만, 그 수준에서 작업해야 하는 애플리케이션에는 유용한 도구가 돼요. 이 문서는 하위 호환성 때문에 여전히 compat32 API를 쓰는 애플리케이션에도 관련이 있어요.
버전 3.6에서 변경: 새 EmailMessage/EmailPolicy API를 장려하도록 문서를 재구성하고 다시 작성함.
패키지 문서 목차
email.message— 이메일 메시지 표현email.parser— 이메일 메시지 파싱 (FeedParser API, Parser API, 추가 참고 사항)email.generator— MIME 문서 생성email.policy— 정책 객체email.errors— 예외 및 결함 클래스email.headerregistry— 사용자 정의 헤더 객체email.contentmanager— MIME 콘텐츠 관리email— 예제
레거시 API:
email.message.Message— compat32 API를 사용한 이메일 메시지 표현email.mime— 처음부터 이메일 및 MIME 객체 만들기email.header— 국제화된 헤더email.charset— 문자셋 표현email.encoders— 인코더email.utils— 기타 유틸리티email.iterators— 이터레이터
더 알아보기
smtplib— SMTP(Simple Mail Transport Protocol) 클라이언트poplib— POP(Post Office Protocol) 클라이언트imaplib— IMAP(Internet Message Access Protocol) 클라이언트mailbox— 다양한 표준 형식을 사용해 디스크의 메시지 모음을 만들고, 읽고, 관리하는 도구