## 11 パッケージの履歴

`email` パッケージ バージョン 1 は、Python 2.2.1 リリースの ときまでバンドルされていました。バージョン 2 は Python 2.3 リリース用に 開発され、Python 2.2.2 にバックポートされたものです。 また、これは distutils ベースの独立したパッケージとしても配布されており、 Python 2.1 以降で使用することができます。

`email` バージョン 3.0 は Python 2.4 とともにリリースされました。 また、これは distutils ベースの独立したパッケージとしても配布されており、 Python 2.3 以降で使用することができます。

`email` バージョン 3 と バージョン 2 との違いは以下のようなものです:

- `FeedParser` クラスが新しく導入され、`Parser` クラスは `FeedParser` を使って実装されるようになりました。このパーザは non-strict なものであり、解析はベストエフォート方式でおこなわれ 解析中に例外を発生させることはありません。解析中に発見された問題は そのメッセージの defect (障害) 属性に保存されます。

- バージョン 2 で `DeprecationWarning` を発生していた API は すべて撤去されました。以下のものが含まれています: `MIMEText` コンストラクタに渡す引数 _encoder、`Message.add_payload()` メソッド、 `Utils.dump_address_pair()` 関数、そして `Utils.decode()` と `Utils.encode()` です。

- 新しく以下の関数が `DeprecationWarning` を発生するようになりました: `Generator.__call__()`, `Message.get_type()`, `Message.get_main_type()`, `Message.get_subtype()`, そして `Parser` クラスに対する strict 引数です。これらは email 3.1 では 撤去される予定です。

- Python 2.3 以前はサポートされなくなりました。

`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()` が 追加されました。