conversion チャネルを使うと、MTA を通じて配信されるメッセージで指定する本文部分ごとの変換を任意に行うことができます。(本文部分とメッセージは異なる。メッセージには複数の本文部分が含まれることがある。たとえば添付ファイルにも本文部分がある。また、本文部分は MIME ヘッダーによって指定および描写される。) 変換処理は、サイトが提供した任意のプログラムやコマンド手順で行うことができます。処理内容には、テキストや画像形式の変換、ウィルススキャン、言語変換などがあります。MTA で通信するさまざまなメッセージ形式を変換することができ、特定の処理やプログラムをメッセージの本文部分に指定することができます。
この章を利用するには、チャネルの概念を理解している必要があります (「チャネル」を参照)。conversion チャネルを使ったウイルススキャンの補足情報は、Messaging Server マニュアルの Web サイトの下部にある、現在のバージョンの Messaging Server のテクニカルノート (http://docs.sun.com/db/coll/S1_MsgTechNotes) を参照してください。
変換チャネルの実行には、A) 処理するメッセージ通信を選択し、B) 処理するメッセージの不一致の状態を特定する、という 2 つの手順があります。これらの手順については、あとで詳細に説明します。
デフォルトの変換チャネルは MTA 設定ファイル内 (imta.cnf) に自動的に作成されます。このチャネルはそのままの状態で使用することができます。変更する必要はありません。
この節には、次の項があります。
変換チャネルは MIME (Multipurpose Internet Mail Extension) ヘッダー行を幅広く利用します。このため、メッセージ構築と MIME ヘッダーフィールドに関する知識が必要です。MIME の詳細については、RFC 1806、2045 〜 2049、2183 を参照してください。ここでは、MIME について簡単に説明します。
メッセージは基本的にヘッダーと本文で構成されています。ヘッダーはメッセージの最初にあり、日付、件名、差出人、受取人など、一定の制御情報を含んでいます。ヘッダーの後ろに空白行が入り、その後ろはすべて本文です。MIME では、複数の本文部分を持つさらに複雑なメッセージを作成する方法を指定します。本文部分を入れ子にすることもできます。このようなメッセージは複数部分メッセージと呼ばれ、すでに説明したように、メッセージの本文部分ごとに変換チャネルで変換されます。
MIME 仕様では、本文部分のヘッダー行が定義されています。ヘッダー行には、MIME-Version、Content-type、Content-Transfer-Encoding、Content-ID、および Content-disposition があります。変換チャネルでよく使用されるヘッダーは Content-type と Content-disposition です。次に MIME ヘッダー行の例を示します。
Content-type: APPLICATION/wordperfect5.1;name=Poem.wpc Content-transfer-encoding: BASE64 Content-disposition: attachment; filename=Poem.wpc Content-description: "Project documentation Draft1 wordperfect format" |
MIME ヘッダー行は、一般の MIME 以外のヘッダー行 (To:、Subject:、From: など) とは異なります。基本的に、変換チャネルの場合、MIME ヘッダー行は Content- という文字列で始まっています。
MIME Content-Type ヘッダーは本文部分の内容を表します。Content-Type ヘッダー形式と実際の例を次に示します。
Content-type: type/ subtype; parameter1=value; parameter2=value...
type は本文部分の内容の種類を表します。種類には、Text、Multipart、Message、Application、Image、 Audio、Video などがあります。
subtype は コンテンツタイプをさらに詳しくしたものです。Content-type にはそれぞれ独自のサブタイプがあります。たとえば、次のようなものがあります。text/plain 、application/octet-stream、image/jpeg。MIME メールの Content Subtype は IANA (Internet Assigned Numbers Authority) で割り当てられ、一覧表示されています。割り当て一覧は、http://www.iana.org/assignments/media-types で参照することができます。
parameter は Content-type/subtype の組み合わせに固有のものです。たとえば、charset および name パラメータは次のようになります。
Content-type: text/plain; charset=us-ascii Content-type: application/msword; name=temp.doc |
charset パラメータでは、テキスト形式メッセージの文字セットを指定します。name パラメータでは、データをファイルに書き込む場合に使用するファイル名を指定します。
Content-Type 値、subtypes、およびパラメータ名では大文字と小文字が区別されます。
MIME Content-disposition ヘッダーで本文部分のプレゼンテーション情報がわかります。通常、添付ファイルに追加され、添付ファイルの本文部分を表示するのか (inline)、コピーするファイル名として表示するのか (attachment) を指定します。Content-disposition ヘッダーの形式は次のとおりです。
Content-disposition: disposition_type; parameter1=value;parameter2=value...
disposition_type は通常 inline (本文部分を表示) または attachment (保存ファイルとして表示) です。attachment には通常パラメータ filename があり、ここでファイル保存で推奨される名前を指定します。
Content-disposition ヘッダーの詳細については、RFC 2183 を参照してください。
MTA チャネルとは異なり、通常、変換チャネルはアドレスや MTA 書き換えルールでは指定されていません。代わりに、メッセージは CONVERSIONS マッピングテーブル (imta_tailor ファイルの IMTA_MAPPING_FILE パラメータで指定される) を使って変換チャネルに送られます。テーブルへのエントリには次のような形式があります。
IN-CHAN=source-channel ;OUT-CHAN=destination-channel;CONVERT Yes/No
MTA はそれぞれのメッセージを処理する際、CONVERSIONS マッピングテーブルがあれば使用します。source-channel がメッセージを発信するチャネルで、destination-channel がメッセージの宛先となるチャネルであるとすれば、CONVERT に続くアクションが実行されます (Yes を選択すると、MTA はメッセージを destination-channel から変換チャネルに変換。一致するものがなければ、メッセージは通常の宛先チャネルのキューに入る)。
user@conversion. localhostname または user@conversion という形式のアドレスは、CONVERSIONS マッピングテーブルにかかわらず、変換チャネルを通してルーティングされます。
次の例では、発信元も宛先もインターネットである非内部メッセージをすべて変換チャネルにルーティングします。
CONVERSIONS IN-CHAN=tcp_local;OUT-CHAN=*;CONVERT Yes IN-CHAN=*;OUT-CHAN=tcp_local;CONVERT Yes
最初の行は tcp_local チャネルから受信するメッセージを処理します。次の行は tcp_local チャネルに送信するメッセージを処理します。tcp_local チャネルはインターネットで送受信するメッセージをすべて処理します。デフォルトでは変換チャネルを経由しないので、ほかのメッセージが変換チャネルを通ることはありません。
これは基本テーブルです。複数のインターネット送信用 tcp_* チャネルを使う場合や、複数のインターネット受信用 tcp_* チャネルを使う場合など、カスタマイズされた設定のサイトでは不十分な場合もあります。
メッセージは変換チャネルに送信されると、本文部分ごとに処理されます。処理は MTA conversions ファイルによって制御されます。このファイルはimta_tailor ファイルの IMTA_CONVERSION_FILE オプションで指定します (デフォルト: msg_svr_base/conversions)。conversions ファイルを構成するエントリはそれぞれ別の行に記述され、1) どの形式の本文部分を 2) どのように処理するかを制御します。
各エントリは 1 つまたは複数の行で構成され、各行には 1 つまたは複数の name=value パラメータ句が含まれています。パラメータ句の値は MIME ルールに一致しています。最終行以外のすべての行は、セミコロン (;) で終了する必要があります。このファイルでは、一行に入力できる文字数が 252 バイトに制限されています。円記号 (\) を継続文字として使用すれば、1 つの論理行を複数の行に分割することができます。エントリは、セミコロンで終了していない行や空白行が 1 行以上挿入されているところで終了します。
conversion ファイルエントリの簡単な例を次に示します。
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–1 の conversion ファイルで、3 つの指定パラメータに続く 2 つのパラメータ out-type=application および out-subtype=msword は、置換 MIME ヘッダー行を「処理済み」の本文部分に添付するように指定します。out-type=application および out-subtype=msword は、送信メッセージの MIME Content-type/subtype が application/msword となるように指定します。
in-type と out-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-type と Content-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」というテキストを追加するように変換チャネルに指示していることを表します。
178029946 は msg_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 部分がない場合は、メッセージヘッダーにアクセスします。ヘッダーの情報はサイト提供のプログラムに役立つことがあります。
ORIGINAL-HEADER-FILE=1 を含むエントリが選択されると、封入する MESSAGE/RFC822 部分の元のヘッダー行はすべて ORIGINAL_HEADERS 環境変数で表したファイルに書き込まれます。OVERRIDE-HEADER-FILE=1 であれば、変換チャネルは ORIGINAL_HEADERS 環境変数で表したファイルの内容を読み取り、封入する部分のヘッダーとして使用します。
out-parameter-* 値は、任意に名前を設定したマッピングテーブルに保存したり、検索したりすることができます。この機能は、クライアントが送信する添付ファイル名を変更する場合に便利です。クライアントが送信する場合は、添付ファイルの種類 (postscript 、msword、text など) にかかわらず、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-NAMES で subtype と一致するものを検索します。一致するものがあれば、name パラメータは X-ATT-NAMES マッピングテーブルで指定された新しい値を受け取ります。つまりパラメータの形式が msword であれば、name パラメータは temp.DOC になります。
この節では、変換チャネルのオプションを使ってメッセージのバウンス、削除、保留を行う方法を説明します。基本手順は次のとおりです。
該当する変換ファイルエントリに OVERRIDE-OPTION-FILE=1 を設定します。変換チャネルで OUTPUT_OPTIONS ファイルの出力オプションを読み取ります。
変換スクリプトを使い、特定のメッセージ本文部分に必要なアクションを決定します。
スクリプトで、OUTPUT_OPTIONS ファイルに STATUS=directive_code オプションを記述しアクションに対する指示を指定します。
すべての指示のリストは msg_svr_base/include/deprecated/pmdf_err.h を参照してください。次に、変換チャネルでよく使用される指示を示します。
表 13–5 変換チャネルで一般的に使用される特別な指示
名前 |
16 進数値 |
10 進数値 |
---|---|---|
PMDF__FORCEHOLD |
0x0A9C86AA |
178030250 |
PMDF__FORCERETURN |
0x0A9C857A |
178029946 |
PMDF__FORCEDELETE |
0x0A9C8662 |
178030178 |
これらの指示の機能について、例を用いて説明します。
変換チャネルを使ってメッセージをバウンスさせるには、該当する conversions ファイルエントリに OVERRIDE-OPTION-FILE=1 を設定し、変換スクリプトに次の行を追加します。
echo "STATUS=178029946" >> $OUTPUT_OPTIONS
バウンスさせるメッセージに短いテキスト文字列を追加する場合は、変換スクリプトに次の行を追加します。
echo OUTPUT_DIAGNOSTIC=text-string >> $OUTPUT_OPTIONS
次にテキスト文字列の例を示します。「お使いのマシンから送信されたメッセージにはウィルスが含まれていましたが、削除されました。電子メールの添付ファイルを実行する場合は注意してください。」
メッセージ部分は、含まれている内容によって条件付きで削除すると便利な場合があります。これは出力オプションで実行できます。逆に、DELETE=1 変換パラメータ句を使うとメッセージ部分が無条件に削除されます。
出力オプションを使ってメッセージ部分を削除するには、該当する変換ファイルエントリに OVERRIDE-OPTION-FILE=1 を設定し、変換スクリプトに次の行を追加します。
echo "STATUS=178030178" >> $OUTPUT_OPTIONS
メッセージは、含まれている内容によって条件付きで保留にすると便利な場合があります。出力オプションを使ってメッセージ部分を削除するには、該当する変換ファイルエントリに OVERRIDE-OPTION-FILE=1 を設定し、変換スクリプトに次の行を追加します。
echo "STATUS=178030250" >> $OUTPUT_OPTIONS
これにより、変換チャネルキューに .HELD ファイルとしてメッセージを保留にするように、変換チャネルに指定します。
ここで例に示す CONVERSIONS マッピングと変換ルールのセットを使うと、架空のチャネル tcp_docuprint に送られた GIF、JPEG、BITMAP ファイルが自動的に PostScript に変換されます。変換の際には架空の /usr/bin/ps-converter.sh が使用されることもあります。この例には、WordPerfect 5.1 ファイルを Microsoft Word ファイルに変換するルールも含まれています。
CONVERSIONS IN-CHAN=*;OUT-CHAN=tcp_docuprint;CONVERT Yes |
out-chan=ims-ms; in-type=application; in-subtype=wordperfect5.1; out-type=application; out-subtype=msword; out-mode=block; command="/bin/doc-convert -in=wp -out=msw ’INPUT_FILE’ ’OUTPUT_FILE’" out-chan=tcp_docuprint; in-type=image; in-subtype=gif; out-type=application; out-subtype=postscript; out-mode=text; command="/bin/ps-convert -in=gif -out=ps ’INPUT_FILE’ ’OUTPUT_FILE’" out-chan=tcp_docuprint; in-type=image; in-subtype=jpeg; out-type=application; out-subtype=postscript; out-mode=text; command="/bin/ps-convert -in=jpeg -out=ps ’INPUT_FILE’ ’OUTPUT_FILE’" out-chan=tcp_docuprint; in-type=image; in-subtype=bitmap; out-type=application; out-subtype=postscript; out-mode=text; command="/bin/ps-convert -in=bmp -out=ps ’INPUT_FILE’ ’OUTPUT_FILE’" |
変換パラメータを次に示します。
表 13–6 変換パラメータ
パラメータ |
説明 |
---|---|
指定用パラメータ (変換する前にメッセージを照合するパラメータを指定) |
|
OUT-CHAN,OUT-CHANNEL |
変換用に照合するチャネルを出力します (ワイルドカード使用可)。このエントリで指定した変換は、メッセージが指定したチャネルに送信される場合にのみ実行されます。 |
IN-CHAN,IN-CHANNEL |
変換用に照合するチャネルを入力します (ワイルドカード使用可)。このエントリで指定した変換は、メッセージが指定したチャネルから送信される場合にのみ実行されます。 |
IN-TYPE |
変換用に照合する MIME タイプを入力します (ワイルドカード使用可)。このエントリで指定した変換は、このフィールドが本文部分の MIME タイプに一致した場合にのみ実行されます。 |
IN-SUBTYPE |
変換用に照合する MIME サブタイプを入力します (ワイルドカード使用可)。このエントリで指定した変換は、このフィールドが本文部分の MIME サブタイプに一致した場合にのみ実行されます。 |
IN-PARAMETER-NAME-n |
変換用に照合する MIME Content-Type パラメータ名を入力します。n = 0, 1, 2, ... です。このパラメータを IN-PARAMETER-VALUE-n とともに使用すると、名前と値からパラメータを特定できます。 |
IN-PARAMETER-VALUE-n |
対応する IN-PARAMETER-NAME の MIME Content-Type パラメータ値を入力して変換用に照合します。このエントリで指定した変換は、このフィールドが本文部分の Content-Type パラメータリストの対応するパラメータに一致した場合にのみ実行されます。ワイルドカードを使用できます。 |
IN-PARAMETER-DEFAULT-n |
パラメータがない場合に、MIME Content-Type パラメータのデフォルト値を入力します。本文部分に IN-PARAMETER-VALUE- n が指定されていない場合に、このパラメータのテストのデフォルト値として使用されます。 |
IN-DISPOSITION |
変換用に照合する MIME Content-Disposition を入力します。 |
IN-DPARAMETER-NAME-n |
変換用に照合する MIME Content-Disposition パラメータ名を入力します。n = 0, 1, 2, ... です。このパラメータを IN-DPARAMETER-VALUE-n とともに使用すると、名前と値からパラメータを特定できます。 |
IN-DPARAMETER-VALUE-n |
対応する IN-DPARAMETER-NAME の MIME Content-Disposition パラメータ値を入力して変換用に照合します。このエントリで指定した変換は、このフィールドが本文部分の Content-Disposition: パラメータリストの対応するパラメータに一致した場合にのみ実行されます。ワイルドカードを使用できます。 |
IN-DPARAMETER-DEFAULT-n |
パラメータがない場合に、MIME Content-Disposition パラメータのデフォルト値を入力します。本文部分に IN-DPARAMETER-VALUE- n が指定されていない場合に、このパラメータのテストのデフォルト値として使用されます。 |
IN-DESCRIPTION |
変換用に照合する MIME Content-Description を入力します。 |
IN-SUBJECT |
封入する MESSAGE/RFC822 部分から Subject (件名) を入力します。 |
TAG |
メーリングリスト CONVERSION_TAG パラメータで設定されているタグを入力します。 |
出力パラメータ (本文部分の変換後の出力設定を指定) |
|
OUT-TYPE |
MIME タイプが入力タイプと異なる場合に、MIME タイプを出力します。 |
OUT-SUBTYPE |
MIME サブタイプが入力サブタイプと異なる場合に、MIME サブタイプを出力します。 |
OUT-PARAMETER-NAME-n |
MIME Content-Type パラメータ名を出力します。n = 0, 1, 2, ... です。 |
OUT-PARAMETER-VALUE-n |
OUT-PARAMETER-NAME-n に対応する MIME Content-Type パラメータの値を出力します。 |
PARAMETER-COPY-n |
本文入力部分の Content-Type パラメータリストから本文出力部分の Content-Type: パラメータリストにコピーする Content-Type パラメータのリストです。n = 0, 1, 2... です。IN-PARAMETER-NAME-n 句で一致した MIME パラメータ名と同じパラメータ名を使用してコピーします。 |
OUT-DISPOSITION |
MIME Content-Description が入力 MIME Content-Disposition と異なる場合に、MIME Content-Disposition を出力します。 |
OUT-DPARAMETER-NAME-n |
MIME Content-Disposition パラメータ名を出力します。n = 0, 1, 2... です。 |
OUT-DPARAMETER-VALUE-n |
OUT-DPARAMETER-NAME-n に対応する MIME Content-Disposition パラメータの値を出力します。 |
DPARAMETER-COPY-n |
本文入力部分の Content-Disposition: パラメータリストから本文出力部分の Content-Disposition: パラメータリストにコピーする Content-Disposition: パラメータのリストです。n = 0, 1, 2... です。IN-PARAMETER-NAME-n 句で一致したMIME パラメータ名をコピーする引数とします。引数にはワイルドカードを使用できます。特に、* という引数を使用すると、元の Content-Disposition: パラメータはすべてコピーされます。 |
OUT-DESCRIPTION |
MIME Content-Description が入力 MIME Content-Description と異なる場合に、MIME Content-Description を出力します。 |
OUT-MODE |
変換ファイルを読み取って保存するモードです。BLOCK (バイナリ形式および実行型形式) と TEXT があります。 |
OUT-ENCODING |
メッセージが再組み立てされるときに、変換ファイルに適用するエンコードです。 |
アクションパラメータ (メッセージ部分のアクションを指定) |
|
COMMAND |
変換を実行するためのコマンドで、このパラメータは必須です。変換を実行するためのコマンドで、このパラメータは必須です。コマンドが指定されていない場合、このエントリは無視されます。パスの指定には、「\」ではなく「/」を使用します。例: command="D:/tmp/mybat.bat" |
DELETE |
0 または 1 に設定します。このフラグが設定されている場合は、メッセージ部分が削除されます。(メッセージにこの部分しかない場合は、1 つの空白のテキスト部分に置き換えられる。) |
RELABEL |
RELABEL=1 では、Output パラメータで指定した MIME ラベルに変更されます。Relabel=0 では何も変更されません。通常、ラベルの変更は間違ったラベルが付いている部分に対して行います (例: Content-type: application/octet-stream から Content-type: application/msword)。これによってユーザーは、その部分をファイルに保存してプログラムで開かなくても、「ダブルクリック」で開くことができます。 |
SERVICE-COMMAND |
SERVICE-COMMAND=command は、MIME メッセージ全体 (MIME ヘッダーと内容本文部分) で動作するサイト提供の手順を実行します。また、ほかの CHARSET-CONVERSION 操作や変換チャネルの操作とは異なり、サービスコマンドは独自で MIME 逆アセンブリ、デコード、再エンコード、および再アセンブリを行います。このフラグが付いていると、変換チャネルの処理中にエントリが無視されます。その代わり、SERVICE-COMMAND エントリは文字セット変換の処理中に実行されます。パスの指定には、「\」ではなく「/」を使用します。例: command="D:/tmp/mybat.bat" |
情報引き渡しパラメータ (サイト提供プログラムと情報のやりとりを行う) |
|
DPARAMETER-SYMBOL-n |
Content-disposition パラメータ値が存在する場合に保存される環境変数。n = 0, 1, 2, ... です。各 DPARAMETER-SYMBOL-n は、Content-Disposition: パラメータリストから順番に (たとえば n=0 は最初のパラメータ、n=2 は 2 番目のパラメータ) 抽出され、指定した環境変数に使用してサイト提供のプログラムを実行します。 |
PARAMETER-SYMBOL-n |
Content-Type パラメータ値が存在する場合に保存される環境変数。n = 0, 1, 2, ... です。各 PARAMETER-SYMBOL-n は、Content-Type: パラメータリストから順番に (たとえば n=0 は最初のパラメータ、n=2 は 2 番目のパラメータ) 抽出され、同じ名前の環境変数に使用してサイト提供のプログラムを実行します。IN-PARAMETER-NAME-n 句で一致した MIME パラメータ名を変換する変数名を引数とします。 |
MESSAGE-HEADER-FILE |
環境変数 MESSAGE_HEADERS で指定したファイルに対してメッセージの元のヘッダーをすべてまたは一部書き込みます。書き込まない場合もあります。1 に設定すると、すぐに本文部分を封入する元のヘッダーは環境変数 MESSAGE_HEADERS で指定したファイルに書き込まれます。2 に設定すると、メッセージの元のヘッダー全体 (最初と最後のメッセージヘッダー) がファイルに書き込まれます。 |
ORIGINAL-HEADER-FILE |
0 または 1 に設定します。1 に設定した場合は、封入する MESSAGE/RFC822 部分の元のヘッダー (本文部分ではない) が環境変数 ORIGINAL_HEADERS で表されるファイルに書き込まれます。 |
OVERRIDE-HEADER-FILE |
0 または 1 に設定します。1 に設定した場合は、MIME ヘッダー行は変換チャネルによって環境変数 OUTPUT_HEADERS から読み取られ、封入する MIME 部分の元のヘッダー行を無視します。 |
OVERRIDE-OPTION-FILE |
OVERRIDE-OPTION-FILE=1 の場合、変換チャネルは OUTPUT_OPTIONS 環境変数のオプションを読み取ります。 |
PART-NUMBER |
ドット文字を伴った整数で、a. b. c... のように表示されます。MIME 本文部分の番号を示します。 |
アラビア語文字セットを自動的に検出するために、新しい auto_ef プログラムが追加されました。
変換チャネルから auto_ef プログラムを呼び出して、アラビア語文字セットのテキストメッセージのうち、ラベルのないメッセージまたは不正なラベルのメッセージのほとんどを自動的に検出し、それらにラベルを付けることができます。ラベルのないメッセージまたは間違ったラベルが付いているメッセージは、通常はアラビア語の Yahoo または Hotmail から送信されたものです。
文字セットのラベルが正しく付いていないメッセージは、多くのメールクライアントで正しく表示されません。
auto_ef プログラムは、メッセージに MIME Content-type ヘッダーが含まれている場合には、text/plain コンテンツタイプのメッセージのみを検査して処理します。メッセージに MIME Content-type ヘッダーが含まれていない場合、auto_ef は強制的に text/plain コンテンツタイプを追加します。
このプログラムを有効にするには、次の操作を行う必要があります。
msg_svr_base/config ディレクトリのマッピングファイルを編集して、選択したソースチャネルと宛先チャネルの変換チャネルを有効にします。インターネットからローカルユーザーに着信するすべてのメールの変換チャネルを有効にするには、次のようなセクションをマッピングファイルに追加します。
CONVERSIONS IN-CHAN=tcp*;OUT-CHAN=ims-ms;CONVERT YES
IN チャネルと OUT チャネルは、設定によって異なります。リレー MTA に配備する場合は、これらのチャネルを設定に合わせて変更する必要があります。たとえば、次のように指定します。
IN-CHAN=tcp*;OUT-CHAN=tcp*;CONVERT YES
すべてのチャネルについて有効にする場合は、次のように指定します。
IN-CHAN=*;OUT-CHAN=*;CONVERT YES
次の内容を含む変換ファイルを作成します。Messaging Server の現在のバージョンのユーザーが所有し、読み取り権限を持つ msg_svr_base/config ディレクトリに作成してください。
! in-channel=*; out-channel=*; in-type=text; in-subtype=*; parameter-copy-0=*; dparameter-copy-0=*; original-header-file=1; override-header-file=1; command="msg_svr_base /lib/arabicdetect.sh" !
次のコマンドを使用して MTA 設定をコンパイルします。
msg_svr_base/sbin/imsimta cnbuild
次のコマンドを使用して再起動します。
msg_svr_base/sbin/imsimta restart