# 18.6. `mimetools` --- MIME メッセージを解析するためのツール

バージョン 2.3 で非推奨: `email` パッケージを `mimetools` モジュールより優先して使うべきです。このモジュールは、下位互換性維持のためにのみ存在しています。Python 3.x では削除されています。

このモジュールは、 `rfc822` モジュールの `Message` クラスのサブクラスと、マルチパート MIME や符合化メッセージの操作に役に立つ多くのユーティリティ関数を定義しています。

このモジュールでは以下の内容を定義しています:

class `mimetools.``Message`(fp[, seekable])

  `Message` クラスの新しいインスタンスを返します。これは、 `rfc822.Message` クラスのサブクラスで、いくつかの追加のメソッドがあります(以下を参照のこと)。 seekable 引数は、 `rfc822.Message` のものと同じ意味を持ちます。

`mimetools.``choose_boundary`()

  パートの境界として使うことができる見込みが高いユニークな文字列を返します。その文字列は、 `'hostipaddr.uid.pid.timestamp.random'` の形をしています。

`mimetools.``decode`(input, output, encoding)

  オープンしたファイルオブジェクト input から、許される MIME encoding を使って符号化されたデータを読んで、オープンされたファイルオブジェクト output に復号化されたデータを書きます。 encoding に許される値は、 `'base64'`, `'quoted-printable'`, `'uuencode'`, `'x-uuencode'`, `'uue'`, `'x-uue'`, `'7bit'`, および `'8bit'` です。 `'7bit'` あるいは `'8bit'` で符号化されたメッセージを復号化しても何も効果がありません。入力が出力に単純にコピーされるだけです。

`mimetools.``encode`(input, output, encoding)

  オープンしたファイルオブジェクト input からデータを読んで、それを許される MIME encoding を使って符号化して、オープンしたファイルオブジェクト output に書きます。 encoding に許される値は、 `decode()` のものと同じです。

`mimetools.``copyliteral`(input, output)

  オープンしたファイル input から行を EOF まで読んで、それらをオープンしたファイル output に書きます。

`mimetools.``copybinary`(input, output)

  オープンしたファイル input からブロックを EOF まで読んで、それらをオープンしたファイル output に書きます。ブロックの大きさは現在 8192 に固定されています。

参考

`email` モジュール

  包括的な e-mail 処理パッケージです。 `mimetools` に取って代わります。

`rfc822` モジュール

  `mimetools.Message` のベースクラスを提供しています。

`multifile` モジュール

  MIME データのような、別個のパーツを含むファイルの読み込みをサポート。

http://faqs.cs.uu.nl/na-dir/mail/mime-faq/.html

  MIME でよく訊ねられる質問と回答。MIMEの概要に関しては、この文書の Part 1 の質問 1.1 への回答参照。

## 18.6.1. Message オブジェクトの追加メソッド

`Message` クラスは、 `rfc822.Message` メソッドに加えて、以下のメソッドを定義しています:

`Message.``getplist`()

  Content-Type ヘッダのパラメータリストを返します。これは文字列のリストです。 `key=value` の形のパラメータに対しては、 key は小文字に変換されますが、 value は変換されません。たとえば、もしメッセージに、ヘッダ `Content-type: text/html; spam=1; Spam=2; Spam` が含まれていれば、 `getplist()` は、Python リスト `['spam=1', 'spam=2', 'Spam']` を返すでしょう。

`Message.``getparam`(name)

  与えられた name の( `name=value` の形に対して `getplist()` が返す) 第 1 パラメータの value を返します。もし value が、'`<`...`>`' あるいは '`"`...`"`' のように引用符で囲まれていれば、これらは除去されます。

`Message.``getencoding`()

  Content-Transfer-Encoding メッセージヘッダで指定された符号化方式を返します。もしそのようなヘッダが存在しなければ、 `'7bit'` を返します。符号化方式文字列は小文字に変換されます。

`Message.``gettype`()

  Content-Type ヘッダで指定された (`type/subtype` の形での) メッセージタイプを返します。もしそのようなヘッダが存在しなければ、 `'text/plain'` を返します。タイプ文字列は小文字に変換されます。

`Message.``getmaintype`()

  Content-Type ヘッダで指定されたメインタイプを返します。もしそのようなヘッダが存在しなければ、 `'text'` を返します。メインタイプ文字列は小文字に変換されます。

`Message.``getsubtype`()

  Content-Type ヘッダで指定されたサブタイプを返します。もしそのようなヘッダが存在しなければ、 `'plain'` を返します。サブタイプ文字列は小文字に変換されます。