# 12.2 `email` -- 電子メールと MIME 処理のためのパッケージ

バージョン2.2 以降で新規追加された 仕様です。

`email` パッケージは電子メールのメッセージを管理するライブラリです。 これには MIME やそれ以外の RFC 2822ベースのメッセージ文書もふくまれます。 このパッケージはいくつかの古い標準パッケージ、`rfc822`、 `mimetools`、`multifile` などにふくまれていた 機能のほとんどを持ち、くわえて標準ではなかった `mimecntl` などの 機能もふくんでいます。このパッケージは、とくに電子メールのメッセージを SMTP (RFC 2821) サーバに送信するために作られているというわけでは ありません。それは `smtplib` モジュールの機能です。 `email` パッケージは RFC 2822 に加えて、RFC 2045-RFC 2047 および RFC 2231 など MIME 関連の RFC をサポートしており、できるかぎり RFC に準拠することをめざしています。

`email` パッケージの一番の特徴は、電子メールの内部表現である オブジェクトモデル と、電子メールメッセージの解析および生成とを 分離していることです。`email` パッケージを使うアプリケーションは 基本的にはオブジェクトを処理することができます。メッセージに子オブジェクトを 追加したり、メッセージから子オブジェクトを削除したり、内容を完全に 並べかえたり、といったことができます。フラットなテキスト文書から オブジェクトモデルへの変換、またそこからフラットな文書へと戻す変換は それぞれ別々の解析器 (パーサ) と生成器 (ジェネレータ) が担当しています。 また、一般的な MIME オブジェクトタイプのいくつかについては手軽な サブクラスが存在しており、メッセージフィールド値を抽出したり解析したり、 RFC 準拠の日付を生成したりなどのよくおこわれるタスクについては いくつかの雑用ユーティリティもついています。

以下の節では `email` パッケージの機能を説明します。 説明の順序は多くのアプリケーションで一般的な使用順序にもとづいています。 まず、電子メールメッセージをファイルあるいはその他のソースから フラットなテキスト文書として読み込み、つぎにそのテキストを解析して 電子メールのオブジェクト構造を作成し、その構造を操作して、 最後にフラットなテキストに戻す、という順序になっています。

このオブジェクト構造は、まったくのゼロから作りだしたものであっても いっこうにかまいません。この場合も上と似たような作業順序になるでしょう。

またここには `email` パッケージが提供するすべての クラスおよびモジュールに関する説明と、`email` パッケージを 使っていくうえで遭遇するかもしれない例外クラス、いくつかの補助ユーティリティ、 そして少々のサンプルも含まれています。古い `mimelib` や前バージョンの `email` パッケージののユーザのために、現行バージョンとの違いと 移植についての節も設けてあります。

参考資料:

`smtplib`モジュール:
  SMTP プロトコル クライアント.