Sun Java System Messaging Server 6 2005Q4 管理ガイド

変換処理を制御するには

メッセージは変換チャネルに送信されると、本文部分ごとに処理されます。処理は MTA conversions ファイルによって制御されます。このファイルはimta_tailor ファイルの IMTA_CONVERSION_FILE オプションで指定します (デフォルト: msg_svr_base/conversions)。conversions ファイルを構成するエントリはそれぞれ別の行に記述され、1) どの形式の本文部分を 2) どのように処理するかを制御します。

各エントリは 1 つまたは複数の行で構成され、各行には 1 つまたは複数の name=value パラメータ句が含まれています。パラメータ句の値は MIME ルールに一致しています。最終行以外のすべての行は、セミコロン (;) で終了する必要があります。このファイルでは、一行に入力できる文字数が 252 バイトに制限されています。円記号 (\) を継続文字として使用すれば、1 つの論理行を複数の行に分割することができます。エントリは、セミコロンで終了していない行や空白行が 1 行以上挿入されているところで終了します。

conversion ファイルエントリの簡単な例を次に示します。


例 13–1 conversions ファイルエントリ


out-chan=ims-ms; in-type=application; in-subtype=wordperfect5.1;
  out-type=application; out-subtype=msword; out-mode=block;
  command="/usr/bin/convert -in=wordp -out=msword 'INPUT_FILE' 'OUTPUT_FILE’"

out-chan=ims-ms; in-type=application; in-subtype=wordperfect5.1 は、本文部分を表します。つまり変換される部分の種類を指定しています。各部分のヘッダーが読み取られ、Content-Type: とその他のヘッダー情報が抽出されます。次に conversion ファイルのエントリが最初から最後まで順番にスキャンされます。その際、in-* パラメータや OUT-CHAN パラメータがあればチェックされます。すべてのパラメータが処理中の本文部分に対応する情報と一致すれば、command= delete= 句で指定した変換が実行され、out-* パラメータが設定されます。

一致するものがなければ、その本文部分は次の conversions ファイルエントリと照合されます。本文部分がすべてスキャンされ処理されると、一致するものがあった場合は、メッセージは次のチャネルに送られます。一致するものがなければ、何も処理されないまま、メッセージは次のチャネルに送られます。

out-chan=ims-ms は、ims-ms チャネル宛のメッセージ部分だけを変換するように指定します。in-type=application および in-subtype=wordperfect5.1 により、メッセージ部分の MIME Content-type ヘッダーは application/wordperfect5.1 に指定されます。

メッセージ部分に in-* パラメータを追加すると詳細に指定することができます。(表 13–6 を参照。)このエントリは、次のような MIME ヘッダー行を持つメッセージ部分の変換アクションをトリガします。


Content-type: APPLICATION/wordperfect5.1;name=Draft1.wpc
Content-transfer-encoding: BASE64
Content-disposition: attachment; filename=Draft1.wpc
Content-description: "Project documentation Draft1 wordperfect format"

例 13–1conversion ファイルで、3 つの指定パラメータに続く 2 つのパラメータ out-type=application および out-subtype=msword は、置換 MIME ヘッダー行を「処理済み」の本文部分に添付するように指定します。out-type=application および out-subtype=msword は、送信メッセージの MIME Content-type/subtypeapplication/msword となるように指定します。

in-typeout-type は同じパラメータなので out-type=application は必要ありません。変換チャネルのデフォルトは送信本文部分の元の MIME ラベルであるからです。送信本文部分の MIME ラベルを追加するには、出力パラメータを指定します。

out-mode=block (例 13–1) は、サイト提供のプログラムが返すファイル形式を指定します。つまり、ファイルの保存方法と、変換チャネルが返されたファイルを読み取る方法を指定します。たとえば、html ファイルはテキストモードで保存されますが、.exe プログラムや zip ファイルはブロックまたはバイナリモードで保存されます。モードは、読み取り中のファイルが一定の保存形式にあることを表しています。

例 13–1 の最後のパラメータは、次のように、本文部分でのアクションを指定します。


command="/usr/bin/convert -in=wordp -out=msword 'INPUT_FILE’ 'OUTPUT_FILE’"

command= パラメータは、本文部分でプログラムが実行されることを指定します。/usr/bin/convert は架空のコマンド名です。-in=wordp および -out=msword は、入力テキストと出力テキストの形式を指定する架空のコマンド行引数です。INPUT_FILE および OUTPUT_FILE は、元の本文部分を持つファイルと、プログラムで変換後の本文部分を保存するファイルを指定する変換チャネル環境パラメータ(「変換チャネル環境変数の使い方」を参照) です。


注 –

エンベロープ発信元および受取人の情報は、外側のメッセージヘッダーを含むファイルが通常の変換エントリによって要求されると、x-envelope-from および x-envelope-to フィールドとして提供されるようになりました。


本文部分でコマンドを実行する代わりに、command パラメータの場所に DELETE=1 を使えばメッセージ部分を簡単に削除することができます。


注 –

conversions ファイルを変更した場合は、必ず設定をコンパイルしなおしてください (「MTA 設定をコンパイルする」を参照)。


変換チャネルの情報フロー

情報フローは次のようになります。本文部分を含むメッセージが変換チャネルに入ってきます。変換チャネルはメッセージをパースして、本文部分を 1 つずつ処理します。次に変換チャネルは本文部分が適格であるかどうかを判断します。つまり、MIME ヘッダー行を指定パラメータと比較して処理するかどうかを決定します。本文部分が適格であると判断されれば、変換処理が始まります。MIME や本文部分の情報を変換スクリプトに渡す場合は、情報引渡しパラメータで指定した環境変数 (「変換チャネル環境変数の使い方」を参照) に保存します。

この時点で、アクションパラメータで指定したアクションを本文部分に実行します。一般的には、本文部分を削除するか、スクリプトで囲んだプログラムに渡します。本文部分はスクリプトで処理されると変換チャネルに戻され、処理後のメッセージに組み込まれます。スクリプトは、変換チャネルの出力オプションを使って情報を変換チャネルに送信することもできます。この情報には、出力本文部分に追加する新しい MIME ヘッダー行、メッセージの差出人に返送するエラーテキスト、MTA にメッセージのバウンス、削除、保留などのアクション開始を指示する命令などがあります。

最後に、変換チャネルは出力パラメータで指定されたように出力本文部分のヘッダー行を置き換えます。

変換チャネル環境変数の使い方

メッセージ本文部分を処理する場合、MIME ヘッダー行情報や本文部分全体をサイト提供のプログラムとやり取りすると便利なことがあります。たとえば、あるプログラムでメッセージ本文部分以外に Content-typeContent-disposition ヘッダー行情報が必要であるとします。一般にサイト提供のプログラムに入力されているのは、主にファイルから読み取るメッセージ本文部分です。プログラムで本文部分が処理されると、変換チャネルが読み取りファイルに書き込まれます。このような情報の受け渡しは、変換チャネル環境変数を使って行われます。

環境変数は、parameter-symbol-* パラメータや定義済みの変換チャネル環境変数のセット (「変換チャネル出力オプションを使用するには」を参照) を使って、conversions ファイルで作成することができます。

次の conversions ファイルエントリと着信ヘッダーでは、サイト提供のプログラムに環境変数を使って MIME 情報を渡す方法が示されています。

conversions ファイルエントリ:


in-channel=*; in-type=application; in-subtype=*;
  parameter-symbol-0=NAME; parameter-copy-0=*;
  dparameter-symbol-0=FILENAME; dparameter-copy-0=*;
  message-header-file=2; original-header-file=1;
  override-header-file=1; override-option-file=1;
  command="/bin/viro-scan500.sh ”INPUT_FILE’ ”OUTPUT_FILE’"
 

着信ヘッダー:


Content-type: APPLICATION/msword; name=Draft1.doc
Content-transfer-encoding: BASE64
Content-disposition: attachment; filename=Draft1.doc
Content-description: "Project documentation Draft1 msword format"

in-channel=*; in-type=application; in-subtype=* は、application 形式の任意の入力チャネルから受信したメッセージ本文部分が処理されることを示します。

parameter-symbol-0=NAME は、最初の Content-type パラメータの値 (この例では Draft1.doc) が NAME という環境変数に保存されることを示します。

parameter-copy-0=* は、入力本文部分の Content-type パラメータがすべて出力本文部分にコピーされることを示します。

dparameter-symbol-0=FILENAME は、最初の Content-disposition パラメータの値 (この例では Draft1.doc) が FILENAME という環境変数に保存されることを示します。

dparameter-copy-0=* は、入力本文部分の Content-disposition パラメータがすべて出力本文部分にコピーされることを示します。

message-header-file=2 は、メッセージの元のヘッダー全体 (もっとも外側のメッセージヘッダー) が環境変数 MESSAGE_HEADERS で指定したファイルに書き込まれることを示します。

original-header-file=1 は、封入する MESSAGE/RFC822 部分の元のヘッダーが環境変数 ORIGINAL_HEADERS で指定したファイルに書き込まれることを示します。

override-header-file=1 は、MIME ヘッダーが環境変数 OUTPUT_HEADERS で指定したファイルから読み取られ、封入する MIME 部分の元の MIME ヘッダー行を無視することを示します。$OUTPUT_HEADERS は、変換実行中に作成される一時ファイルです。このファイルはサイト提供のプログラムで使用され、変換処理中に変更された MIME ヘッダー行が保存されます。本文部分が変換チャネルで再構築される際に、このファイルから MIME ヘッダー行が読み取られます。変更できるのは MIME ヘッダー行のみです。MIME 以外の一般のヘッダー行は、変換チャネルで変更できません。

override-option-file=1 は、変換チャネルが OUTPUT_OPTIONS 環境変数によって名前が付けられたファイルから変換チャネルのオプションを読み取ることを表します。「変換チャネル出力オプションを使用するには」を参照してください。

command="msg_svr_base/bin/viro-scan500.sh" は、メッセージ本文部分で実行するコマンドを示します。

表 13–3 変換チャネル環境変数

環境変数 

説明 

ATTACHMENT_NUMBER

現在の部分の添付ファイル番号です。これは、ATTACHMENT-NUMBER 変換の照合パラメータと同じ形式です。 

CONVERSION_TAG

アクティブな変換タグの現在のリストです。これは、TAG 変換の照合パラメータに対応します。 

INPUT_CHANNEL

メッセージを変換チャネルのキューに入れたチャネルです。これは、IN-CHANNEL 変換の照合パラメータに対応します。 

INPUT_ENCODING

元の本文部分に存在するエンコーディングです。 

INPUT_FILE

元の本文部分を含むファイルの名前です。サイト提供のプログラムはこのファイルを読み取ります。 

INPUT_HEADERS

本文部分の元のヘッダー行を含むファイルの名前です。サイト提供のプログラムはこのファイルを読み取ります。 

INPUT_TYPE

入力メッセージ部分の MIME Content-type です。

INPUT_SUBTYPE

入力メッセージ部分の MIME コンテンツサブタイプです。 

INPUT_DESCRIPTION

入力メッセージ部分の MIME content-description です。

INPUT_DISPOSITION

入力メッセージ部分の MIME content-disposition です。

MESSAGE_HEADERS

封入するメッセージ (本文部分だけに限らない) の元の一番外側のヘッダーまたは本文部分がすぐに封入する MESSAGE/RFC822 部分のヘッダーを含むファイル名です。サイト提供のプログラムはこのファイルを読み取ります。 

OUTPUT_CHANNEL

メッセージの送信先のチャネルです。これは、OUT-CHANNEL 変換の照合パラメータに対応します。 

OUTPUT_FILE

サイト提供のプログラムがその出力を保存するファイル名です。サイト提供のプログラムはこのファイルを作成して書き込みます。 

OUTPUT_HEADERS

サイト提供のプログラムが封入する部分の MIME ヘッダー行を保存するファイル名です。サイト提供のプログラムはこのファイルを作成して書き込みます。ファイルには、option=value 行ではなく実際の MIME ヘッダー行が含まれ、最後の行は空白行となります。また、変更できるのは MIME ヘッダー行のみです。MIME 以外の一般のヘッダー行は、変換チャネルで変更できません。

OUTPUT_OPTIONS

サイト提供のプログラムで変換チャネルオプションを読み取るファイル名です。「変換チャネル出力オプションを使用するには」を参照してください。

PART_NUMBER

現在の部分の番号です。これは、PART-NUMBER 変換の照合パラメータと同じ形式です。 

PART_SIZE

処理されている部分のバイト数です。 

メール変換タグ

メール変換タグは、特定の受取人または差出人に関連付けられている特別なタグです。メッセージの配信時には、このタグは変換チャネルプログラムから見えるので、特別な処理に使用することができます。変換タグは LDAP ディレクトリに保存されます。

メール変換タグは、次のように使用できます。管理者は、選択したユーザーに対してメール変換タグの値を harmonica に設定します。次に、管理者は、そのメールを処理する際にタグおよび harmonica の値が存在するかどうかを検出する変換チャネルを設定します。この場合、プログラムはいくつかの任意の機能を実行します。

メール変換タグは、ユーザー単位またはドメイン単位に設定できます。ドメインレベルの受取人の LDAP 属性は MailDomainConversionTag です (MTA オプション LDAP_DOMAIN_ATTR_CONVERSION_TAG によって変更可能)。ユーザーレベルの受取人の LDAP 属性は MailConversionTag です (MTA オプション LDAP_CONVERSION_TAG によって変更可能)。どちらの属性にも、それぞれの値に異なるタグを指定して複数の値を設定することができます。特定の受取人に関連付けられているタグのセットは累積されます。すなわち、ドメインレベルのタグセットとユーザーレベルのタグセットが結合されます。

差出人ベースの変換タグは、MTA オプション LDAP_SOURCE_CONVERSION_TAG および LDAP_DOMAIN_ATTR_SOURCE_CONVERSION_TAG によって設定できます。これらは、ソースアドレスに関連付けられたそれぞれの変換タグごとにユーザーおよびドメインレベルの LDAP 属性を指定します。上のどちらのオプションでも、デフォルトの属性は設定されていません。

変換チャネル出力オプションを使用するには

変換チャネル出力オプション (表 13–4) は動的な変数で、変換スクリプトから変換チャネルに情報と特定の指示を渡します。たとえば、本文部分の処理中にメッセージをバウンスさせてスクリプトから変換チャネルに指示を出し、返送メッセージに「このメッセージにはウィルスが含まれている」というエラーテキストを追加させることができます。

出力オプションは、指定した変換エントリに OVERRIDE-OPTION-FILE=1 を設定すると開始されます。次に、必要に応じて出力オプションはがスクリプトで設定され、環境変数ファイル OUTPUT_OPTIONS に保存されます。このスクリプトが本文部分の処理を終了すると、変換チャネルは OUTPUT_OPTIONS ファイルからオプションを読み取ります。

OUTPUT_OPTION 変数は、変換チャネルがオプションを読み取るファイル名です。通常、このファイルは実行時の一時ファイルとして、情報を渡すために使用されます。次に、出力オプションを使ってウィルスを送信した差出人にエラーメッセージを返すスクリプトの例を示します。


/usr/local/bin/viro_screen2k $INPUT_FILE   # run the virus screener

if [ $? -eq 1 ]; then
   echo "OUTPUT_DIAGNOSTIC=’Virus found and deleted.’" > $OUTPUT_OPTIONS
   echo "STATUS=178029946" >> $OUTPUT_OPTIONS
else
   cp $INPUT_FILE $OUTPUT_FILE # Message part is OK
fi

            

この例では、$OUTPUT_OPTIONS で定義されたファイルにシステム診断メッセージとステータスコードが追加されます。$OUTPUT_OPTIONS 一時ファイルを読み出すと、次のように表示されます。


OUTPUT_DIAGNOSTIC="Virus found and deleted."
STATUS=178029946

OUTPUT_DIAGNOSTIC='Virus found and deleted’ の行は、メッセージに「Virus found and deleted」というテキストを追加するように変換チャネルに指示していることを表します。

178029946msg_svr_base/include/deprecated/pmdf_err.h にある pmdf_err.h ファイルごとの PMDF__FORCERETURN ステータスです。このステータスコードは、差出人にメッセージをバウンスするように変換チャネルに指示しています。特定の指示の使い方については、「変換チャネル出力を使ってメッセージのバウンス、削除、保留を行うには」を参照してください。

出力オプションのリストを次に示します。

表 13–4 変換チャネル出力オプション

オプション 

説明 

OUTPUT_TYPE

出力メッセージ部分の MIME コンテンツタイプです。 

OUTPUT_SUBTYPE

出力メッセージ部分の MIME コンテンツサブタイプです。 

OUTPUT_DESCRIPTION

出力メッセージ部分の MIME コンテンツの説明です。 

OUTPUT_DIAGNOSTIC

変換チャネルによってメッセージが強制的にバウンスされる場合、差出人に送信するメッセージの一部に含まれるテキストです。 

OUTPUT_DISPOSITION

出力メッセージ部分の MIME content-disposition です。

OUTPUT_ENCODING

MIME content transfer encoding で、出力メッセージ部分で使用されます。

OUTPUT_MODE

変換チャネルが出力メッセージ部分を書き出す際に使用する MIME Mode で、受取人が出力メッセージ部分を読み取る際に使用するモードです。

STATUS

コンバータの終了ステータスです。通常は、変換チャネルの何らかの動作を開始する特殊な指示です。すべての指示のリストは msg_svr_base/include/deprecated/pmdf_err.h を参照してください。

封入する MESSAGE/RFC822 部分のヘッダー

メッセージ部分で変換を実行する場合、変換チャネルは封入する MESSAGE/RFC822 部分のヘッダーにアクセスします。封入する MESSAGE/RFC822 部分がない場合は、メッセージヘッダーにアクセスします。ヘッダーの情報はサイト提供のプログラムに役立つことがあります。

ORIGINAL-HEADER-FILE=1 を含むエントリが選択されると、封入する MESSAGE/RFC822 部分の元のヘッダー行はすべて ORIGINAL_HEADERS 環境変数で表したファイルに書き込まれます。OVERRIDE-HEADER-FILE=1 であれば、変換チャネルは ORIGINAL_HEADERS 環境変数で表したファイルの内容を読み取り、封入する部分のヘッダーとして使用します。

変換エントリからマッピングテーブルに呼び出すには

out-parameter-* 値は、任意に名前を設定したマッピングテーブルに保存したり、検索したりすることができます。この機能は、クライアントが送信する添付ファイル名を変更する場合に便利です。クライアントが送信する場合は、添付ファイルの種類 (postscript mswordtext など) にかかわらず、att.dat のような汎用名が使用されるからです。ほかのクライアント (たとえば Outlook) が拡張子を読み取ってその部分が開けるように、その部分の名前を変更する一般的な方法です。

マッピングテーブルからパラメータ値を検索する構文は次のとおりです。

”mapping-table-name:mapping-input[$Y, $N]’

$Y はパラメータ値を返します。何も見つからなかった場合や一致するものとして $N が返された場合、変換ファイルのエントリ内のパラメータは、無視されるか空白文字列として扱われます。一致するものがない場合や $N の場合は、変換エントリ自体が強制終了します。

次のようなマッピングテーブルがあるとします。


X-ATT-NAMES

   postscript       temp.PS$Y
   wordperfect5.1   temp.WPC$Y
   msword           temp.DOC$Y

このマッピングテーブルの変換エントリは次のとおりで、添付ファイルの指定ファイル名を汎用ファイル名に置換します。

out-chan=tcp_local; in-type=application; in-subtype=*; 
   in-parameter-name-0=name; in-parameter-value-0=*; 
   out-type=application; out-subtype=’INPUT-SUBTYPE’; 
   out-parameter-name-0=name; 
   out-parameter-value-0=”’X-ATT-NAMES:\\’INPUT_SUBTYPE\\''"; 
   command="cp  ”INPUT_FILE’  ”OUTPUT_FILE’"

この例で out-chan=tcp_local; in-type=application; in-subtype=* は、処理するメッセージが tcp_local チャネルからのもので、application/*content-type ヘッダーが含まれていることを示します (* は任意のサブタイプ)。

また、in-parameter-name-0=name; in-parameter-value-0=* は、メッセージにパラメータ形式として name=* が含まれていることを示します (* は任意のパラメータ値。)

out-type=application; は、メッセージ処理後の MIME Content-type パラメータが application であることを示します。

out-subtype=’INPUT-SUBTYPE’; は、本文部分処理後の MIME subtype パラメータが INPUT-SUBTYPE 環境変数であることを示しています。これは入力 subtype のオリジナル値です。次のように変更できます。

Content-type: application/xxxx; name=foo.doc

から

Content-type: application/msword; name=foo.doc

に変更する場合は、次のようにします。

out-type=application; out-subtype=msword

out-parameter-name-0=name; は、出力本文部分の最初の MIME Content-type パラメータが name= 形式であることを示します。

out-parameter-value-0=’X-ATT-NAMES:\\’INPUT_SUBTYPE\\’’; は、最初の MIME subtype パラメータ値をとり、マッピングテーブル X-ATT-NAMESsubtype と一致するものを検索します。一致するものがあれば、name パラメータは X-ATT-NAMES マッピングテーブルで指定された新しい値を受け取ります。つまりパラメータの形式が msword であれば、name パラメータは temp.DOC になります。