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'" を返します。サブタイプ文字列は
   小文字に変換されます。
