## 12.2.11 (Python 2.2.1 までの) `email` v1 とのちがい

`email` パッケージ バージョン 1 は、Python 2.2.1 リリースの ときまでバンドルされていました。バージョン 2 は Python 2.3 リリース用に 開発され、Python 2.2.2 にバックポートされたものです。 またこれは distutils ベースの別個のパッケージとしても配布されています。 `email` バージョン 2 はバージョン 1 とほとんどの点で下位互換ですが、 以下のような違いがあります:

- `email.Header` モジュールおよび `email.Charset` モジュールが 追加されています。

- `Message` インスタンスの Pickle 形式が変わりました。 が、これは正式に定義されたことは一度もないので (そしてこれからも)、 この変更は互換性の欠如とはみなされていません。ですがもし お使いのアプリケーションが `Message` インスタンスを pickle あるいは unpickle しているなら、現在 `email` バージョン 2 では プライベート変数 _charset および _default_type を 含むようになったということに注意してください。

- `Message` クラス中のいくつかのメソッドは推奨されなくなったか、 あるいは呼び出し形式が変更になっています。また、多くの新しいメソッドが 追加されています。詳しくは `Message` クラスの文書を参照してください。 これらの変更は完全に下位互換になっているはずです。

- message/rfc822 形式のコンテナは、 見た目上のオブジェクト構造が変わりました。`email` バージョン 1 では この content type はスカラー形式のペイロードとして表現されていました。 つまり、コンテナメッセージの `is_multipart()` は false を返し、`get_payload()` はリストオブジェクトではなく 単一の `Message` インスタンスを直接返すようになっていたのです。

  この構造はパッケージ中のほかの部分と整合がとれていなかったため、 message/rfc822 形式のオブジェクト表現形式が 変更されました。`email` バージョン 2 では、コンテナは `is_multipart()` に `True` を返します。 また `get_payload()` はひとつの `Message` インスタンスを 要素とするリストを返すようになりました。

  注意: ここは下位互換が完全には成りたたなくなっている部分のひとつです。 けれどもあらかじめ `get_payload()` が返すタイプをチェックするように なっていれば問題にはなりません。ただ message/rfc822 形式の コンテナを `Message` インスタンスにじかに `set_payload()` しないようにさえすればよいのです。

- `Parser` コンストラクタに strict 引数が 追加され、`parse()` および `parsestr()` メソッドには headersonly 引数がつきました。strict フラグは また `email.message_from_file()` と `email.message_from_string()` にも追加されています。

- `Generator.__call__()` はもはや推奨されなくなりました。 かわりに `Generator.flatten()` を使ってください。また、 `Generator` クラスには `clone()` メソッドが追加されています。

- `email.Generator` モジュールに `DecodedGenerator` クラスが 加わりました。

- 中間的な基底クラスである `MIMENonMultipart` および `MIMEMultipart` がクラス階層の中に追加され、 ほとんどの MIME 関係の派生クラスがこれを介するようになっています。

- `MIMEText` コンストラクタの _encoder 引数は 推奨されなくなりました。いまやエンコーダは _charset 引数に もとづいて暗黙のうちに決定されます。

- `email.Utils` モジュールにおける以下の関数は 推奨されなくなりました: `dump_address_pairs()`、 `decode()`、 および `encode()`。 また、このモジュールには以下の関数が追加されています: `make_msgid()`、 `decode_rfc2231()`、 `encode_rfc2231()` そして `decode_params()`。

- Public ではない関数 `email.Iterators._structure()` が 追加されました。