## 12 `mimelib` との違い

`email` パッケージはもともと `mimelib` と 呼ばれる個別のライブラリからつくられたものです。その後変更が加えられ、 メソッド名がより一貫したものになり、いくつかのメソッドやモジュールが 加えられたりはずされたりしました。いくつかのメソッドでは、 その意味も変更されています。しかしほとんどの部分において、 `mimelib` パッケージで使うことのできた機能は、ときどきその方法が変わってはいるものの `email` パッケージでも使用可能です。 `mimelib` パッケージと `email` パッケージの間の 下位互換性はあまり優先はされませんでした。

以下では `mimelib` パッケージと `email` パッケージにおける 違いを簡単に説明し、それに沿ってアプリケーションを移植するさいの 指針を述べています。

おそらく 2つのパッケージのもっとも明らかな違いは、 パッケージ名が `email` に変更されたことでしょう。 さらにトップレベルのパッケージが以下のように変更されました:

- `messageFromString()` は `message_from_string()` に名前が変更されました。

- `messageFromFile()` は `message_from_file()` に名前が変更されました。

`Message` クラスでは、以下のような違いがあります:

- `asString()` メソッドは `as_string()` に名前が変更されました。

- `ismultipart()` メソッドは `is_multipart()` に名前が変更されました。

- `get_payload()` メソッドはオプション引数として decode をとるようになりました。

- `getall()` メソッドは `get_all()` に名前が変更されました。

- `addheader()` メソッドは `add_header()` に名前が変更されました。

- `gettype()` メソッドは `get_type()` に名前が変更されました。

- `getmaintype()` メソッドは `get_main_type()` に名前が変更されました。

- `getsubtype()` メソッドは `get_subtype()` に名前が変更されました。

- `getparams()` メソッドは `get_params()` に名前が変更されました。 また、従来の `getparams()` は文字列のリストを返していましたが、 `get_params()` は 2-タプルのリストを返すようになっています。 これはそのパラメータのキーと値の組が、"`=`" 記号によって分離されたものです。

- `getparam()` メソッドは `get_param()`.

- `getcharsets()` メソッドは `get_charsets()` に名前が変更されました。

- `getfilename()` メソッドは `get_filename()` に名前が変更されました。

- `getboundary()` メソッドは `get_boundary()` に名前が変更されました。

- `setboundary()` メソッドは `set_boundary()` に名前が変更されました。

- `getdecodedpayload()` メソッドは廃止されました。 これと同様の機能は `get_payload()` メソッドの decode フラグに 1 を渡すことで実現できます。

- `getpayloadastext()` メソッドは廃止されました。 これと同様の機能は `email.Generator` モジュールの `DecodedGenerator` クラスによって提供されます。

- `getbodyastext()` メソッドは廃止されました。 これと同様の機能は `email.iterators` モジュールにある `typed_subpart_iterator()` を使ってイテレータを作ることにより 実現できます。

`Parser` クラスは、その public なインターフェイスは変わっていませんが、 これはより一層かしこくなって message/delivery-status 形式のメッセージを 認識するようになりました。これは配送状態通知 22において、各ヘッダブロックを表す独立した `Message` パートを含む ひとつの `Message` インスタンスとして表現されます。

`Generator` クラスは、その public なインターフェイスは変わっていませんが、 `email.generator` モジュールに新しいクラスが加わりました。 `DecodedGenerator` と呼ばれるこのクラスは 以前 `Message.getpayloadastext()` メソッドで使われていた 機能のほとんどを提供します。

また、以下のモジュールおよびクラスが変更されています:

- `MIMEBase` クラスのコンストラクタ引数 _major と _minor は、それぞれ _maintype と _subtype に変更されています。

- `Image` クラスおよびモジュールは `MIMEImage` に 名前が変更されました。_minor 引数も _subtype に 名前が変更されています。

- `Text` クラスおよびモジュールは `MIMEText` に 名前が変更されました。_minor 引数も _subtype に 名前が変更されています。

- `MessageRFC822` クラスおよびモジュールは `MIMEMessage` に 名前が変更されました。注意: 従来バージョンの `mimelib` では、 このクラスおよびモジュールは `RFC822` という名前でしたが、 これは大文字小文字を区別しないファイルシステムでは Python の標準ライブラリモジュール `rfc822` と 名前がかち合ってしまっていました。

  また、`MIMEMessage` クラスはいまや message main type をもつあらゆる種類の MIME メッセージを 表現できるようになりました。これはオプション引数として、 MIME subtype を指定する _subtype 引数をとることができる ようになっています。デフォルトでは、_subtype は rfc822 に なります。

`mimelib` では、`address` および `date` モジュールで いくつかのユーティリティ関数が提供されていました。 これらの関数はすべて `email.utils` モジュールの中に 移されています。

`MsgReader` クラスおよびモジュールは廃止されました。 これにもっとも近い機能は `email.iterators` モジュール中の `body_line_iterator()` 関数によって提供されています。

#### Footnotes

... 認識するようになりました。これは配送状態通知 22
  配送状態通知 (Delivery Status Notifications, DSN) は RFC 1894 によって定義されています。