7.2 mailcap -- mailcap ファイルの操作

mailcap ファイルは、メイルリーダや Web ブラウザのような MIME 対応の アプリケーションが、異なる MIME タイプのファイルにどのように反応 するかを設定するために使われます (``mailcap'' の名前は ``mail capability'' から取られました)。 例えば、ある mailcap ファイルに "video/mpeg; xmpeg %s" のような 行が入っていたとします。ユーザが email メッセージや Web ドキュメント 上でその MIME タイプ video/mpeg に遭遇すると、 "%s" はファイル名 (通常テンポラリファイルに属するものになります) に置き換えられ、ファイルを閲覧するために xmpeg プログラムが 自動的に起動されます。

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

findmatch( caps, MIMEtype[, key[, filename[, plist]]])
2 要素のタプルを返します; 最初の要素は文字列で、実行すべき コマンド (os.system() に渡されます) が入っています。 二つめの要素は与えられた MIME タイプに対する mailcap エントリです。 一致する MIME タイプが見つからなかった場合、(None, None) が 返されます。

key は desired フィールドの値で、 実行すべき動作のタイプを表現します; ほとんどの場合、単に MIME 形式のデータ本体を見たいと思うので、標準の値は 'view' になっています。与えられた MIME 型をもつ新たなデータ本体を作成した 場合や、既存のデータ本体を置き換えたい場合には、'view' の他に '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'' フィールドを 使って、(計算機アーキテクチャや、利用しているウィンドウシステムといった) 何らかの外部条件をテストするよう指定することができます。 findmatch() はこれらの条件を自動的にチェックし、 チェックが失敗したエントリを読み飛ばします。

getcaps( )
MIME タイプを mailcap ファイルのエントリに対応付ける辞書を返します。 この辞書は findmatch() 関数に渡されるべきものです。 エントリは辞書のリストとして記憶されますが、この表現形式の 詳細について知っておく必要はないでしょう。

mailcap 情報はシステム上で見つかった全ての 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'})
ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。