##
11 パッケージの履歴

このテーブルはemailパッケージのリリース履歴を表しています。 それぞれのバージョンと、それが同梱されたPythonのバージョンとの関連が示 されています。 このドキュメントでの、追加/変更されたバージョンの表記はemail パッケー ジのバージョンではなく、Pythonのバージョンです。 このテーブルはPythonの各バージョン間のemailパッケージの互換性も示して います。

email バージョン | 配布 | 互換
--- | --- | ---
`1.x` | Python 2.2.0 to Python 2.2.1 | もうサポートされません
`2.5` | Python 2.2.2+ and Python 2.3 | Python 2.1 から 2.5
`3.0` | Python 2.4 | Python 2.3 から 2.5
`4.0` | Python 2.5 | Python 2.3 から 2.5

以下は `email` バージョン4と3の間のおもな差分です。

- 全モジュールが PEP 8標準にあわせてリネームされました。 たとえば、version 3 でのモジュール `email.Message` は version 4 では `email.message` になりました。

- 新しいサブパッケージ`email.mime` が追加され、 version 3 の `email.MIME*` は、`email.mime` のサブパッケージにまと められました。 たとえば、version 3 での `email.MIMEText` は、`email.mime.text` になりました。

  Python 2.6までは version 3 の名前も有効です。

- `email.mime.application` モジュールが追加されました。これ は`MIMEApplication`クラスを含んでいます。

- version 3 で推奨されないとされた機能は削除されました。これらは `Generator.__call__()`、 `Message.get_type()`、 `Message.get_main_type()`、 `Message.get_subtype()`を含 みます。

- RFC 2331 サポートの修正が追加されました。これは `Message.get_param()`などの関数の返り値を変更します。 いくつかの環境では、3つ組のタプルで返されていた値が1つの文字列で返さ れます(とくに、全ての拡張パラメータセグメントがエンコードされていな かった場合、予測されていたlanguage やcharsetの指定がないと、返り値は 単純な文字列になります)。過去の版では % デコードが エンコードされている セグメントおよびエンコードされていないセグメントに対して行われました が、エンコードされたセグメントのみで行われるようになりました。

`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 の将来のバージョンで 撤去される予定です。

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