11.19 標準モジュール mailcap

 

メールリーダーとWebブラウザが異なったMIME型のファイルに繰り返し実行されるように、 MIMEに対応しているアプリケーションをコンフィギュレーションするために Mailcapファイルは使われます。 (``mailcap''の名前は``mail capability''の句から派生しています。) たとえば、mailcapファイルは"video/mpeg; xmpeg %s"のように 含むことができます。 MIME型video/mpegが含まれているemailメッセージや Webドキュメントに遭遇したとき、"%s" はファイル名に置き換えられ、 (通常そのファイル名は属している一時的なファイルの名前です) xmpegプログラムは自動的にファイルを表示するために実行されます。

mailcapフォーマットはRFC 1524 ``A User Agent Configuration Mechanism For Multimedia Mail Format Information,'' に書かれています。しかしインターネットの標準ではありません。 しかしながら、mailcapファイルはほとんどのUnixシステムで対応されています。

findmatch (caps, MIMEtype [, key[, filename[, plist]]])
2つのタプルを返します。 1つめの要素は実行されるコマンド行を含む文字列です。 (それはos.system()に渡すことができます。) 2つめの要素は与えられたMIME型へのmailcapの見出し語です。 一致するMIME型がみつからないとき、 (None, None)が返されます。

key は要求されたフィールドの名前です。 それは、実行される動作の型を表します。 ほとんどの場合、MIME型データの本文をただみたいだけなので、デフォルト値は'view'です。 他には、与えられたMIME型の新しい本文を作りたいとか、本文データを変えられるように 'compose'と'edit'が可能な値です。 これらのフィールドの完全なリストはRFC 1524を参照してください。

filenameはコマンド行 "%s"の代わりをするファイル名です。 デフォルト値は'/dev/null'で、これはほとんど望まれないことなので、 通常、ファイル名を示すそれを優先します。

plistは名前のついた引数を含むリストです。デフォルト値は単純に空のリストです。 リストにあるそれぞれの見出し語は引数の名前、等号記号(=)、引数の値を 含む文字列でなければならないし、 mailcapの見出し語は%{foo}のような名前付き引数を含んでよい。 それは、引数名'foo'の値で置き換えてよい。 たとえば、コマンド行 "showpartial %{id} %{number} %{total}"が mailcapファイルにあって、plist['id=1', 'number=2', 'total=3']に 設定されているとき、結果のコマンド行は"showpartial 1 2 3"になります。

mailcapファイルに"test"フィールドはmailcapの行の適用をするかしないか決めるため、 いくつかの外部状態(たとえば、利用しているマシンアーキテクチャ、ウィンドウシステム)を 任意に調べられることを示している。 findmatch()は自動的にそのような状態を調べ、見出し語についてチェックし、 失敗したら、それに該当する部分を飛ばします。

getcaps ()
mailcapファイルの見出し語のリストへの辞書マッピングMIME型を返します。 この辞書はfindmatch()関数に渡されなくてなりません。 見出し語が辞書のリストに格納されています。 しかし、この表現の詳細を知る必要はありません。

システムにある全てのmailcapファイルから情報が引き出されます。 ユーザーのmailcapファイル"$HOME/.mailcap"に設定されているものは、 システムのmailcapファイル"/etc/mailcap", "/usr/etc/mailcap" と "/usr/local/etc/mailcap"で設定されているものを優先します。

使用例:

>>> import mailcap
>>> d=mailcap.getcaps()
>>> mailcap.findmatch(d, 'video/mpeg', filename='/tmp/tmp1223')
('xmpeg /tmp/tmp1223', {'view': 'xmpeg %s'})

guido@python.org