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

第 13 章 定義済みチャネルを使用する

チャネルによっては Messaging Server をインストールした時点ですでに定義されているものもあります (表 13–1 を参照)。この章では、MTA の定義済みチャネルの使い方を説明します。

この章を読む前に、第 10 章「MTA サービスと設定について」をお読みください。imta.cnf ファイルの書き換えルールを設定する方法については、第 11 章「書き換えルールの設定」を参照してください。

この章には、次の節があります。

defaults チャネルについては、「チャネルのデフォルトを設定する」を参照してください。

定義済みチャネル

次の表に、一部の定義済みチャネルの一覧を示します。

表 13–1 定義済みチャネル

チャネル 

定義 

defaults

各種チャネルにデフォルトのキーワードを指定するために使用します。「チャネルのデフォルトを設定する」を参照してください。

l

UNIX 専用。ルーティングの決定および UNIX メールツールを使用したメール送信に使用します。 

ims-ms

メールをローカルストアに配信します。 

native

UNIX 専用。/var/mail にメールを配信します。(Messaging Server では、/var/mail アクセスはサポートされない。ユーザーが /var/mail ストアのメールにアクセスするには、UNIX ツールを使う必要がある。)

pipe

サイト提供のプログラムやスクリプトを介してメールを配信するために使用します。この pipe チャネルによって実行されるコマンドは、管理者が imsimta プログラムのインタフェースを通じて管理します。 

reprocessprocess

遅延メッセージのオフライン処理に使用されるチャネル。通常、reprocess チャネルはソースまたは宛先チャネルとして公にされません。process チャネルは、ほかの MTA チャネルと同様、公にされます。

defragment

断片化された MIME メッセージの修復方法を提供します。 

conversion

MTA を通じて配信されるメッセージを本文部分ごとに変換します。 

bitbucket

破棄するメッセージに使用します。 

inactive/deleted

ディレクトリ内でのステータスが非アクティブまたは削除済みになっているユーザーへのメッセージの処理に使用します。通常、受信したメッセージをバウンスし、カスタムバウンスメッセージを差出人に送り返します。 

hold

ユーザーへのメッセージを保留します。ユーザーがあるメールサーバーから別のサーバーに移行された場合などに使用します。 

sms

SMS ゲートウェイへの片方向電子メールをサポートします。 


tcp_local
tcp_intranet
tcp_auth
tcp_submit
tcp_tas

TCP/IP の上位プロトコルとして SMTP を実装します。マルチスレッド TCP SMTP チャネルには、ディスパッチャ制御下のマルチスレッド SMTP サーバーが含まれます。送信された SMTP メールは、必要に応じてジョブコントローラの制御下で動作し、チャネルプログラム tcp_smtp_client によって処理されます。 

tcp_local はリモート SMTP ホストからのメールを受信します。メッセージを送信する場合は、スマートホスト/ファイアウォール設定が使われているかどうかによって、直接リモート SMTP ホストに送るか、またはスマートホスト/ファイアウォールシステムに送ります。

tcp_intranet はイントラネット内のメールを送受信します。

tcp_auth は、tcp_local のスイッチチャネルとして使用されます。認証されたユーザーは、リレーブロックの制約を回避するため tcp_auth チャネルに移されます。

tcp_submit は、送信されたメッセージ (通常の場合はユーザーエージェントからのメッセージ) を予約されている送信ポート 587 で受け入れます (RFC 2476 を参照)。

tcp_tas は Unified Messaging を使用するサイト用の特殊なチャネルです。

Pipe チャネルを使用してメッセージをプログラムに配信するには

メールをメールボックスで着信する代わりにプログラムに転送することができます。たとえば、着信メールをメールソートプログラムに転送することができます。pipe チャネルはサイト提供のユーザーごとのプログラムを使用してメッセージを配信します。

プログラムへの配信を行うには、まず pipe チャネルで呼び出すことができるプログラムを登録する必要があります。登録は imsimta program ユーティリティーを使って行います。このユーティリティーにより、pipe チャネルで呼び出すことができるように登録する各コマンドに一意の名前が設定されます。これによってエンドユーザーが mailprogramdeliveryinfo LDAP 属性の値としてメソッド名を指定できるようになります。

たとえば、UNIX の myprocmail コマンドをユーザーが呼び出せるプログラムとして追加するには、次の例に示すように、imsimta program ユーティリティーを使用してこのコマンドを登録します。この例では、-d username という引数を使用して procmail プログラムをユーザーとして実行する myprocmail プログラムが登録されます。

imsimta program -a -m myprocmail -p procmail -g "-d %s" -e user

programs ディレクトリ msg_svr_base/data/site-programs に実行ファイルが存在することを確認してください。また、実行権限が「others」に設定されていることも確認してください。

ユーザーがプログラムにアクセスするためには、そのユーザーの LDAP エントリに次の属性および値が含まれている必要があります。

maildeliveryoption: program 
mailprogramdeliveryinfo: myprocmail

imsimta program ユーティリティーの詳細については、『Sun Java System Messaging Server 6 2005Q4 Administration Reference』を参照してください。

その他の配信プログラムを使用する場合は、次の終了コードおよびコマンド行の引数に関する条件を満たしていることを確認してください。

終了コード条件: pipe チャネルが呼び出す配信プログラムは、チャネルがメッセージをキューから出すか、あとで処理するために配信するか、または返送するかを判断できるように、適切なエラーコードを返さなくてはなりません。

サブプロセスが終了コード 0 (EX_OK) で終了した場合は、メッセージが適切に配信されたと認識され、MTA のキューから削除されます。終了コード 71、74、75、または 79 (EX_OSERREX_IOERREX_TEMPFAIL、または EX_DB) で終了した場合は、一時的なエラーが発生したとみなされ、メッセージの配信は延期されます。その他のコードが返されると、メッセージは配信不能として差出人に返送されます。終了コードは、システムヘッダーファイル sysexits.h 内で定義されています。

コマンド行の引数: 可変引数 (%s) を含め、配信プログラムが使用できる引数の数に上限はありません。可変引数は、ユーザーが実行するプログラムの場合はユーザー名を、ポストマスター「inetmail」が実行するプログラムの場合はユーザー名 + ドメイン名を示します。たとえば、次のコマンド行は procmail プログラムを使用してメールを受取人に配信します。

/usr/lib/procmail -d %s

ネイティブ (/var/mail) チャネルを設定するには

オプションファイルは、ローカルチャネルのさまざまな特徴を制御するために使用されます。このローカルチャネルのオプションファイルは MTA の設定ディレクトリに保存し、native_option という名前を付けなければなりません (例、msg_svr_base/config/native_option)。

オプションファイルは複数の行で構成されています。各行にはそれぞれ 1 つのオプション設定が含まれています。オプション設定は、次の形式で記述されています。

option=value

value は、オプションの要件に基づき、文字列または整数のいずれかとなります。

表 13–2 ローカルチャネルのオプション

オプション 

説明 

FORCE_CONTENT_LENGTH

(0 または 1。UNIX のみ) 

FORCE_CONTENT_LENGTH=1 の場合、MTA により Content-length: ヘッダー行が、ローカルチャネルに配信されるメッセージに追加され、「From」が行の最初にある場合、チャネルで「>From」構文が使用されなくなります。これによって、ローカルの UNIX メールが Sun のより新しいメールツールとの互換性を持つようになりますが、ほかの UNIX メールツールとの互換性がなくなることもあります。

FORWARD_FORMAT (文字列)

ユーザーの .forward ファイルの場所を指定します。%u 文字列は、この部分が各ユーザー ID で置換されることを示します。%h 文字列は、この部分が各ユーザーのホームディレクトリで置換されることを示します。このオプションが明示的に指定されていない場合、デフォルトの動作は次と同様になります。

FORWARD_FORMAT=%h/.forward


REPEAT_COUNT (整数)
SLEEP_TIME (整数)

MTA が新しいメールを配信しようとするときに、ユーザーの新しいメールファイルがほかのプロセスによってロックされている場合、これらのオプションによって、ローカルプログラムが試行すべき再試行の回数と頻度を制御することができます。指定された回数の再試行が行われてもファイルを開くことができなかった場合、メッセージはローカルのキューに残され、次にローカルのチャネルが新しいメッセージを配信するときに再試行されます。 

REPEAT_COUNT オプションは、メールファイルを開こうとする試行が何回行われるかを制御します。REPEAT_COUNT のデフォルトは 30 (30 回の試行) です。

SLEEP_TIME オプションは、チャネルプログラムが何秒間隔で試行を繰り返すかを制御します。SLEEP_TIME は 2 (2 秒の間隔で再試行) にデフォルト設定されています。

SHELL_TIMEOUT (整数)

.forward を完成するために、チャネルがユーザーのシェルコマンドを待機する時間 (秒数) を制御します。この時間が経過すると、「usercommand を完了するシェルコマンドのタイムアウト」という旨のメッセージとともに、元の差出人にエラーメッセージが返送されます。デフォルトは 600 (10 分) です。

SHELL_TMPDIR (ディレクトリ固有)

シェルコマンドに配信を行う際に、ローカルチャネルが一時ファイルを作成する場所を制御します。デフォルトでは、一時ファイルはユーザーのホームディレクトリに作成されます。このオプションを使用すると、管理者は一時ファイルを別の (単一の) ディレクトリに作成するように選択できます。例:  

SHELL_TMPDIR=/tmp

hold チャネルを使って一時的にメッセージを保留するには

hold チャネルは、一時的に受信不能になっている宛先へのメッセージを保留するためのチャネルです。一時的な受信不能の原因としては、ユーザー名が変更されている最中であったり、メールボックスが別のホストやドメインに移行されている最中であることが考えられます。その他の理由によってメッセージが一時保留される可能性もあります。

メッセージが保留される場合、メッセージは、reprocess チャネルに送られる場合と同じ方法で hold チャネル (msg_svr_base/queue/hold ディレクトリ内) に送られます。この方法により、エンベロープ To: アドレスは変更されません。メッセージは hold チャネルキュー (msg-server/queue/hold ディレクトリ内) に ZZxxx.HELD ファイルとして書き込まれます。これによって、メッセージはジョブコントローラから見えなくなるため、「保留」されることになります。imsimta qm dir -held コマンドを使用すると、.HELD ファイルの一覧を表示できます。保留メッセージは、imsimta qm -release コマンドを使用して選択および解除できます。解除すると、メッセージ名は ZZxxx.00 に変更され、ジョブコントローラに通知が行われます。その後メッセージは hold チャネルと関連付けられているマスタープログラム (reprocess.exe) で処理されます。したがって、メッセージ (および To: アドレス) は、通常の書き換え機能を使用して処理されます。

imsimta qm コマンドの詳細については、『Sun Java System Messaging Server 6 2005Q4 Administration Reference』「imsimta qm」を参照してください。

変換チャネル

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 の概要

変換チャネルは MIME (Multipurpose Internet Mail Extension) ヘッダー行を幅広く利用します。このため、メッセージ構築と MIME ヘッダーフィールドに関する知識が必要です。MIME の詳細については、RFC 1806、2045 〜 2049、2183 を参照してください。ここでは、MIME について簡単に説明します。

メッセージの構築

メッセージは基本的にヘッダーと本文で構成されています。ヘッダーはメッセージの最初にあり、日付、件名、差出人、受取人など、一定の制御情報を含んでいます。ヘッダーの後ろに空白行が入り、その後ろはすべて本文です。MIME では、複数の本文部分を持つさらに複雑なメッセージを作成する方法を指定します。本文部分を入れ子にすることもできます。このようなメッセージは複数部分メッセージと呼ばれ、すでに説明したように、メッセージの本文部分ごとに変換チャネルで変換されます。

MIME ヘッダー

MIME 仕様では、本文部分のヘッダー行が定義されています。ヘッダー行には、MIME-VersionContent-typeContent-Transfer-EncodingContent-ID、および Content-disposition があります。変換チャネルでよく使用されるヘッダーは Content-typeContent-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- という文字列で始まっています。


Content-type ヘッダー

MIME Content-Type ヘッダーは本文部分の内容を表します。Content-Type ヘッダー形式と実際の例を次に示します。

Content-type: type/ subtype; parameter1=value; parameter2=value...

type は本文部分の内容の種類を表します。種類には、TextMultipartMessageApplicationImage AudioVideo などがあります。

subtype は コンテンツタイプをさらに詳しくしたものです。Content-type にはそれぞれ独自のサブタイプがあります。たとえば、次のようなものがあります。text/plain application/octet-streamimage/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、およびパラメータ名では大文字と小文字が区別されます。


Content-disposition ヘッダー

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 ファイルエントリの簡単な例を次に示します。


例 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 になります。

変換チャネル出力を使ってメッセージのバウンス、削除、保留を行うには

この節では、変換チャネルのオプションを使ってメッセージのバウンス、削除、保留を行う方法を説明します。基本手順は次のとおりです。

  1. 該当する変換ファイルエントリに OVERRIDE-OPTION-FILE=1 を設定します。変換チャネルで OUTPUT_OPTIONS ファイルの出力オプションを読み取ります。

  2. 変換スクリプトを使い、特定のメッセージ本文部分に必要なアクションを決定します。

  3. スクリプトで、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 コンテンツタイプを追加します。

このプログラムを有効にするには、次の操作を行う必要があります。

Procedureアラビア語文字セットを自動検出するには

手順
  1. 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

  2. 次の内容を含む変換ファイルを作成します。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"
    !
    
  3. 次のコマンドを使用して MTA 設定をコンパイルします。

    msg_svr_base/sbin/imsimta cnbuild

  4. 次のコマンドを使用して再起動します。

    msg_svr_base/sbin/imsimta restart

文字セット変換とメッセージの再フォーマット

この節では、MTA によって内部的に実行される文字セット、書式設定、およびラベル変換について説明します。ただし、この節の例の一部には、DEC VMS や d チャネルなどの古いまたは廃止された技術が使用されています。それらの技術は古いまたは廃止されたものですが、その例は DEC や d チャネルに限定されたものではありません。このような例も、変換技術のしくみを説明するうえでは有効です。今後のリリースでは例を更新する予定です。

Messaging Server の基本的なマッピングテーブルの 1 つに、文字セット変換テーブルがあります。このテーブルの名前を CHARSET-CONVERSION と言います。チャネル間における文字セット変換やメッセージフォーマット変換の種類を指定するために使用されます。

多くのシステムでは、文字セットおよびメッセージフォーマットの変換は不必要なため、このテーブルが使われることはありません。しかし、文字セット変換の必要性が生じる場合もあります。たとえば、日本語版 OpenVMS を実行しているサイトでは、現在インターネットで使用されている ISO-2022 Kanji と DEC Kanji との変換が必要になります。あるいは、多国語文字が非常に多く使用されているために、MIME で使用するよう指定されている ISO-8859-1 文字セットと DEC Multinational Character Set (DEC-MCS) との多少の相違が問題になるような場合にも、これら 2 つの文字セットの間で実際の変換が必要になります。

CHARSET-CONVERSION マッピングテーブルは、メッセージのフォーマットを変更するためにも使われます。MIME 以外のいくつかのフォーマットを MIME に変換する機能が提供されます。MIME エンコードおよび構造に変更を加えることもできます。これらのオプションは、MIME または MIME のサブセットだけをサポートするシステムにメッセージを送る際に使用されます。また、場合によっては、MIME フォーマットから非 MIME フォーマットへの変換も可能です。

MTA は 2 つの方法によって CHARSET-CONVERSION マッピングテーブルをプローブします。1 回目のプローブは、MTA がメッセージフォーマットを変換すべきか、また変換する場合はどのフォーマットオプションを使用すべきかを決定するために実行されます。(フォーマット変換が指定されていない場合、特定の文字セットへの変換に関するチェックは行われない。)このプローブには、次のような形式の入力文字列が使用されます。

IN-CHAN=in-channel;OUT-CHAN=out-channel;CONVERT

in-channel はソースチャネル (メッセージの送信元) の名前、out-channel は宛先チャネル (メッセージの送信先) の名前です。一致するソースチャネルおよび宛先チャネルがある場合は、その結果がコンマで区切られたキーワードリストの文字列として表示されます。表 13–7 に、キーワードの一覧を示します。

表 13–7 CHARSET-CONVERSION マッピングテーブルのキーワード

キーワード 

説明 

Always

out-channel に送信する前にメッセージが変換チャネルを通過する場合でも、変換を実行します。

Appledouble

Appledouble フォーマット以外の MacMIME フォーマットを Appledouble フォーマットに変換します。 

Applesingle

Applesingle フォーマット以外の MacMIME フォーマットを Applesingle フォーマットに変換します。 

BASE64

MIME エンコードを BASE64 に切り替えます。このキーワードはすでにエンコードされたメッセージ部分のみに適用されます。Content-transfer-encoding によるメッセージ、7BIT または 8bit は、特別なエンコードは不要であるため、この BASE64 オプションによる影響を受けません。 

Binhex

Binhex フォーマット以外の MacMIME フォーマット、または Macintosh タイプおよび Mac クリエータ情報を含む部分を Binhex フォーマットに変換します。 

Block

MacMIME フォーマット部分からデータフォークのみを抽出します。 

Bottom

message/rfc822 本文部分 (転送メッセージ) をメッセージ内容部分とヘッダー部分に「フラット化」します。 

Delete

message/rfc822 本文部分 (転送メッセージ) をメッセージ内容部分に「フラット化」し、転送ヘッダーを削除します。 

Level

重複するマルチパートレベルをメッセージから削除します。 

Macbinary

Macbinary フォーマット以外の MacMIME フォーマット、または Macintosh のタイプや Mac クリエータ情報を含む部分を Macbinary フォーマットに変換します。 

No

変換を無効にします。 

QUOTED-PRINTABLE

MIME エンコードを QUOTED-PRINTABLE に切り替えます。 

Record,Text

テキスト部分を 80 バイトのところで折り返します。 

Record,Text= n

テキスト部分を n バイトのところで折り返します。 

RFC1154

メッセージを RFC 1154 フォーマットに変換します。 

Top

message/rfc822 本文部分 (転送メッセージ) をヘッダー部分とメッセージ内容部分とに「フラット化」します。 

UUENCODE

MIME エンコードを X-UUENCODE に切り替えます。 

Yes

変換を有効にします。 

文字セットの変換

プローブを行い、メッセージフォーマットを変換する必要があると判断した場合、MTA はメッセージにおける各部分のチェックを開始します。テキスト部分はすべて検出され、その文字セットのパラメータは 2 回目のプローブに使用されます。ただし、変換が必要であると判断されるまで 2 回目のプローブは行われません。2 回目のプローブを行うための入力文字列は次のとおりです。

IN-CHAN=in-channel;OUT-CHAN=out-channel;IN-CHARSET=in-char-set

in-channelout-channel の部分は前述の例と同じです。in-char-set は該当する部分の文字セット名を示します。この 2 回目のプローブで一致するものがない場合、文字セットの変換は行われません (ただし、フォーマットの変換、たとえば MIME 構造への変換などは、最初のプローブで一致したキーワードに基づいて行われる)。一致するものが見つかった場合は、次の文字列が返されます。

OUT-CHARSET=out-char-set

この場合、in-char-setout-char-set が示す文字セットに変換されます。これらの文字セットは、MTA テーブルディレクトリに含まれる文字セット定義テーブル charsets.txt 内で定義されているものでなくてはなりません。文字セットがこのファイル内で適切に定義されていないと、変換は行われません。しかし、このファイルの中には現在もっとも利用度の高い数百種の文字セットが定義されているため、特に心配する必要はないでしょう。charsets.txt ファイルの詳細については、imsimta chbuild (UNIX および NT) ユーティリティーの説明を参照してください。

すべての条件が満たされると、MTA は文字セットマッピングを作成し、変換を実行します。変換されたメッセージ部分のラベルは、変換後の文字セット名に変更されます。

文字セット変換マッピングの機能は拡張されて、次に示す機能が新しく追加されました。


例 13–2 ISO-8859-1 から UTF-8 への変換およびその逆の変換

ローカルで使用している ISO-8859-1 を、インターネットで使用するために UTF-8 に変換する必要があるとします。さらに、インターネットへの接続は tcp_local を通して行われ、内部メッセージの発信と配信は tcp_internalims-ms で行われるとします。次に示す CHARSET-CONVERSION テーブルは、このような変換を実現します。各 IN-CHAN エントリは、それぞれを単一の行にする必要があります。円記号 (\) はこれを示すために使用されています。


CHARSET-CONVERSION

 IN-CHAN=tcp_internal;OUT-CHAN=tcp_local;CONVERT               Yes
 IN-CHAN=tcp_local;OUT-CHAN=tcp_internal;CONVERT               Yes
 IN-CHAN=tcp_local;OUT-CHAN=ims-ms;CONVERT                     Yes
 IN-CHAN=*;OUT-CHAN=*;CONVERT                                  No
 IN-CHAN=tcp_internal;OUT-CHAN=tcp_local;IN-CHARSET=ISO-8859-1 OUT-CHARSET=UTF-8
 IN-CHAN=tcp_local;OUT-CHAN=tcp_internal;IN-CHARSET=UTF-8 OUT-CHARSET=ISO-8859-1
 IN-CHAN=tcp_local;OUT-CHAN=ims-ms;IN-CHARSET=UTF-8       OUT-CHARSET=ISO-8859-1


例 13–3 EUC-JP から ISO-2022-JP への変換およびその逆の変換

次に示す CHARSET-CONVERSION テーブルは、ローカルで使用している EUC-JP と ISO 2022 ベースの JP コードとの変換を指定しています。


CHARSET-CONVERSION

  IN-CHAN=ims-ms;OUT-CHAN=ims-ms;CONVERT                  No
  IN-CHAN=tcp_internal;OUT-CHAN=ims-ms;CONVERT            No
  IN-CHAN=tcp_internal;OUT-CHAN=tcp_internal;CONVERT      No
  IN-CHAN=tcp_internal;OUT-CHAN=*;CONVERT                 Yes
  IN-CHAN=*;OUT-CHAN=ims-ms;CONVERT                       Yes
  IN-CHAN=*;OUT-CHAN=tcp_internal;CONVERT                 Yes
  IN-CHAN=tcp_internal;OUT-CHAN=*;IN-CHARSET=EUC-JP      OUT-CHARSET=ISO-2022-JP
  IN-CHAN=*;OUT-CHAN=ims-ms;IN-CHARSET=ISO-2022-JP        OUT-CHARSET=EUC-JP
  IN-CHAN=*;OUT-CHAN=tcp_internal;IN-CHARSET=ISO-2022-JP  OUT-CHARSET=EUC-JP

メッセージフォーマットの変換

前述したように、CHARSET-CONVERSION マッピングテーブルは MIME フォーマットと数種のメーカー独自のメールフォーマット間における添付ファイルの変換にもかかわりがあります。

このあとの各項では、CHARSET-CONVERSION マッピングテーブルによって可能なその他のメッセージフォーマット変換の例を紹介します。

非 MIME バイナリ添付ファイルの変換

メッセージの処理にかかわるチャネルで CHARSET-CONVERSION が有効になっている場合、MIME 以外の非標準フォーマットを使用しているメール、たとえば Microsoft Mail (MSMAIL) SMTP ゲートウェイからのメールは、自動的に MIME フォーマットに変換されます。tcp_local チャネルが存在する場合は通常、このチャネルが Microsoft Mail SMTP ゲートウェイからのメッセージを着信します。次の例は、ローカルユーザー宛のメッセージのフォーマット変換を有効にするものです。

CHARSET-CONVERSION  

  IN-CHAN=tcp_local;OUT-CHAN=ims-ms;CONVERT         Yes

ほかのローカルメールシステムに対するチャネルのエントリを追加することもできます。たとえば、tcp_internal チャネルのエントリは次のようになります。

CHARSET-CONVERSION

  IN-CHAN=tcp_local;OUT-CHAN=l;CONVERT              Yes
  IN-CHAN=tcp_local;OUT-CHAN=tcp_internal;CONVERT   Yes

すべてのチャネルに対してフォーマット変換を有効にするには、OUT-CHAN=ims-msOUT-CHAN=* に変更します。ただし、こうすると tcp_local チャネルからのメールがすべてチェックされることになるため、特定のチャネルに限定する場合より、処理時間が長くなる可能性があります。

さらに、このように無差別な変換を設定すると、エンベロープおよび関連する転送情報部分のみを変換して転送処理だけを実行すればよいはずのメッセージ (システムを通過するだけのメッセージなど) に対してまで不必要な変換処理が行われるため、システムが信頼できない不安定な状態になる可能性があります。

MIME を Microsoft Mail SMTP ゲートウェイが理解できるフォーマットに変換するには、MTA 設定ファイルで Microsoft Mail SMTP ゲートウェイ専用のチャネル (tcp_msmail など) を設定し、マッピングファイルに次の内容を追加します。

CHARSET-CONVERSION  

  IN-CHAN=*;OUT-CHAN=tcp_msmail;CONVERT        RFC1154

MIME ヘッダーのラベル変更

ユーザーエージェントやゲートウェイによっては、より正確な MIME ヘッダーを作成するために十分な情報があるにもかかわらず、比較的無益な MIME ヘッダーを作成するものもあります。もっとも良い方法はそのようなエージェントやゲートウェイの設定を適切に変更することですが、それが不可能な場合には有用な MIME ヘッダーを構築するように MTA を設定します。

最初のプローブの際に CHARSET-CONVERSION マッピングテーブルが Yes または Always キーワードを返した場合、MTA は conversions ファイルが存在するかどうかを確認します。conversions ファイルが存在する場合、MTA はそのファイルをチェックして RELABEL=1 という記述があるかどうかを確認し、ある場合はそのエントリの指定に従って MIME ラベルを変換します。conversions ファイルのエントリについては、「変換処理を制御するには」を参照してください。

たとえば、次のような CHARSET-CONVERSION テーブルがあるとします。


CHARSET-CONVERSION  

  IN-CHAN=tcp_local;OUT-CHAN=tcp_internal;CONVERT            Yes

また、次のような MTA conversion ファイルエントリがあるとします。


out-chan=ims-ms; in-type=application; in-subtype=octet-stream; 
  in-parameter-name-0=name; in-parameter-value-0=*.ps; 
  out-type=application; out-subtype=postscript;   
  parameter-copy-0=*; relabel=1 

out-chan=ims-ms; in-type=application; in-subtype=octet-stream; 
  in-parameter-name-0=name; in-parameter-value-0=*.msw; 
  out-type=application; out-subtype=msword; 
     parameter-copy-0=* relabel=1

これらを組み合わせた結果、メッセージは tcp_local チャネルから ims-ms チャネルにルーティングされます。さらに、受信時の MIME ラベルが application/octet-stream でファイル名パラメータの拡張子が ps または msw の場合には、それぞれ application/postscript または application/msword という新しいラベルが付けられます。(このラベル付けはより正確であり、元のユーザーエージェントやゲートウェイがメッセージに付けておくべきもの。) このようなラベル変更が特に役立つのは、MIME-CONTENT-TYPES-TO-MR マッピングテーブルと組み合わせる場合です。このテーブルは、結果として得られた MIME タイプを変換して適切な MRTYPE タグに戻すために使用されます。この処理が最適に動作するためには、正確な MIME ラベル付けが必要です。すべてのコンテンツタイプに application/octet-stream とだけラベル付けされている場合、MIME-CONTENT-TYPES-TO-MR マッピングテーブルでは、これらすべてを 1 種類の MRTYPE に変換することしかできません。

前述の例と、次のような MIME-CONTENT-TYPES-TO-MR マッピングテーブルエントリについて考えます。

APPLICATION/POSTSCRIPT        PS 
APPLICATION/MSWORD              MW

たとえば、受信時に次のようなラベルが付いているとします。

Content-type: application/octet-stream; name=stuff.ps

このラベルは次のように変更されます。

Content-type: application/postscript

その後、PostScript であることをメッセージルーターに知らせる PS という MRTYPE タグに変換されます。

逆方向のラベル変換が役立つ場合もあります。逆方向のラベル変換とは、具体的な MIME 添付ファイルラベルを、一般的なバイナリデータを表す application/octet-stream というラベル に「ダウングレード」することを意味します。特に、具体的な MIME ラベルの「ダウングレード」は、convert_octet_stream チャネルキーワードとの組み合わせで mime_to_x400 チャネル (PMDF-X400) または xapi_local チャネル (PMDF-MB400) で使用されることがよくあります。その目的は、すべての MIME バイナリ添付ファイルを X.400 bodypart 14 形式に強制的に変換することです。

たとえば、次のような CHARSET-CONVERSION マッピングテーブルがあるとします。

CHARSET-CONVERSION

    IN-CHAN=*;OUT-CHAN=mime_to_x400*;CONVERT Yes

また、次のような PMDF conversions ファイルエントリがあるとします。

out-chan=mime_to_x400*; in-type=application; in-subtype=*;
   out-type=application; out-subtype=octet-stream; relabel=1
 
out-chan=mime_to_x400*; in-type=audio; in-subtype=*; 
   out-type=application; out-subtype=octet-stream; relabel=1 

out-chan=mime_to_x400*; in-type=image; in-subtype=*; 
   out-type=application; out-subtype=octet-stream; relabel=1 

out-chan=mime_to_x400*; in-type=video; in-subtype=*; 
   out-type=application; out-subtype=octet-stream; relabel=1

これらを組み合わせた結果、mime_to_x400* チャネルに送られるすべてのメッセージについて、さまざまな特定の MIME 添付ファイルラベルが一般的な application/octet-stream ラベルにダウングレードされます (convert_octet_stream が適用されるようにするため)。

MacMIME フォーマットの変換

Macintosh ファイルには、Macintosh 特有の情報を含むリソースフォークと、ほかのプラットフォームで使用できるデータを含むデータフォークの 2 つの部分があります。さらに、Macintosh ファイルの転送には一般に 4 種類の異なるフォーマットが使用されるため、Macintosh ファイルを転送するにはより複雑な処理が必要となります。Applesingle、Binhex、および Macbinary フォーマットは、Macintosh リソースフォークと Macintosh データフォークを 1 つにエンコードしたものから成り立っています。Appledouble フォーマットの場合は、リソースフォークとデータフォークがそれぞれ独立した部分として存在しています。このため、Macintosh 以外のプラットフォームでは、リソースフォーク部分を無視してデータフォーク部分のみを使用できる Appledouble がもっとも便利です。逆に、Macintosh への送信には、ほかの 3 種類のフォーマットが便利です。

MTA は、これらの Macintosh フォーマット間の変換を実行することができます。MTA は CHARSET-CONVERSION キーワードである AppledoubleApplesingleBinhex、および Macbinary によって MacMIME フォーマット部分をそれぞれ multipart/appledouble、application/applefile、application/mac-binhex40、または application/macbinary の MIME フォーマットに変換します。さらに、Binhex または Macbinary キーワードは、MIME Content-type: ヘッダーに X-MAC-TYPE および X-MAC-CREATOR パラメータを含む特定の MacMIME 以外のフォーマットへの変換も要求します。CHARSET-CONVERSION キーワードの Block は、MTA に対し、MacMIME フォーマット部分のデータフォークのみを抽出し、リソースフォークを破棄するよう要求します (ただし、このキーワードを使用すると一部の情報が失われるため、Appledouble キーワードの使用をお勧めする)。

たとえば、次の CHARSET-CONVERSION テーブルは、VMS MAIL メールボックスまたは GroupWise ポストオフィスに配信するときは Appledouble フォーマットに変換することと、メッセージルーターチャネルに配信するときは Macbinary フォーマットに変換することを MTA に指示します。

CHARSET-CONVERSION
   IN-CHAN=*;OUT-CHAN=l;CONVERT              Appledouble 
   IN-CHAN=*;OUT-CHAN=wpo_local;CONVERT      Appledouble 
   IN-CHAN=*;OUT-CHAN=tcp_internal;CONVERT   Macbinary

この場合、すでに MacMIME フォーマットが使用されている部分のみが Appledouble フォーマットに変換されます。Macbinary フォーマットへの変換は、すでにいずれかの MacMIME フォーマットになっている部分に適用されます。また、MacMIME フォーマットでない部分には、MIME Content-type: ヘッダーに X-MAC-TYPE パラメータと X-MAC-CREATOR パラメータが含まれている場合だけ適用されます。

Appledouble または Block フォーマットへの変換には、元の Macintosh ファイルに含まれる Macintosh クリエータおよびタイプ情報に基づいて Appledouble または Block フォーマットの部分のデータフォークに付ける MIME ラベルを指定するために、MAC-TO-MIME-CONTENT-TYPES マッピングテーブルが使用されることもあります。このテーブルのプローブには、format|type|creator|filename の形式が使用されます。format の値には SINGLE、BINHEX、MACBINARY のどれかが指定され、type の値には Macintosh タイプ情報 (16進)、creator の値には Macintosh クリエータ情報 (16進)、そして filename の値には実際のファイル名が指定されます。

たとえば、ims-ms チャネルにメッセージを送る場合に Appledouble フォーマットに変換し、MACBINARY または BINHEX 部分から MS Word または PostScript に変換されたドキュメントに特定の MIME ラベルを付けるには、次のテーブルが適切です。


CHARSET-CONVERSION 

  IN-CHAN=*;OUT-CHAN=ims-ms;CONVERT     Appledouble


MAC-TO-MIME-CONTENT-TYPES 

! PostScript 
    MACBINARY|45505346|76677264|*     APPLICATION/POSTSCRIPT$Y 
    BINHEX|45505346|76677264|*        APPLICATION/POSTSCRIPT$Y 
! Microsoft Word 
    MACBINARY|5744424E|4D535744|*     APPLICATION/MSWORD$Y 
    BINHEX|5744424E|4D535744|*        APPLICATION/MSWORD$Y

マッピングエントリのテンプレート (右側) に $Y フラグが設定されていない場合、指定したラベルは付けられません。MTA テーブルディレクトリ内の mac_mappings.sample ファイルには、その他の種類の添付ファイルに関するサンプルエントリが記載されています。

MacMIME 以外のフォーマットが使用されている部分を Binhex または Macbinary フォーマットに変換するには、X-MAC-TYPE および X-MAC-CREATOR MIME Content-type: パラメータ値が必要です。通常これらのパラメータ値を持たない部分にそれを強要するために MIME ラベルの変換を実行することも可能です。

サービス変換

MTA の変換サービス機能をサイト提供のプロシージャと一緒に使用すると、新しい形式のメッセージを作成することができます。前述の CHARSET-CONVERSIONconversion チャネルの場合は個別の MIME メッセージ部分を操作しますが、変換サービスはすべての MIME メッセージ部分 (MIME ヘッダーと内容) および MIME メッセージ全体を操作します。また、ほかの CHARSET-CONVERSION 操作や変換チャネルの操作とは異なり、変換サービスは独自で MIME 逆アセンブリ、デコード、再エンコード、および再アセンブリを行います。

ほかの CHARSET-CONVERSION 操作と同様に、変換サービスは CHARSET-CONVERSION マッピングテーブルを通じて有効化されます。CHARSET-CONVERSION マッピングテーブルを最初にプローブした結果が Yes または Always キーワードの場合、MTA は conversions ファイルが存在するかどうかをチェックします。conversions ファイルが存在する場合は、ファイル内に SERVICE-COMMAND を指定するエントリがあるかどうかを確認し、ある場合はそれを実行します。conversions ファイルのエントリの形式は次のとおりです。


in-chan=channel-pattern; 
  in-type=type-pattern; in-subtype=subtype-pattern; 
  service-command=command

ここでコマンド文字列に注目してください。これは、たとえばドキュメントコンバータを呼び出すなどのサービス変換を行うために必要なコマンドです。このコマンドが実行されると、変換を必要とするメッセージを含む入力ファイルが処理され、新しいメッセージテキストを含む出力ファイルが生成されます。UNIX では、コマンドが成功した場合には 0、失敗した場合にはその他の値で終了する必要があります。

たとえば、次のような CHARSET-CONVERSION テーブルがあるとします。

CHARSET-CONVERSION

IN-CHAN=bsout_*;OUT-CHAN=*;CONVERT Yes

また、UNIX で次のような MTA conversions ファイルエントリがあるとします。


in-chan=bsout_*; in-type=*; in-subtype=*; 
service-command="/pmdf/bin/compress.sh compress $INPUT_FILE $OUTPUT_FILE"

これらを組み合わせた結果、BSOUT チャネルから届くすべてのメッセージが圧縮されます。

入力ファイル名、出力ファイル名、メッセージのエンベロープ受取人アドレスを含むファイルの名前などを渡すためには、環境変数が使われます。これらの 3 つの環境変数は次のとおりです。

この 3 つの環境変数の値は、通常の方法でコマンド行に代入することができます。UNIX では、変数名の前に「$」記号を挿入します。たとえば、INPUT_FILEOUTPUT_FILE の値が a.in と a.out である場合に、UNIX で次のように宣言したとします。


in-chan=bsout_*; in-type=*; in-subtype=*; 
 service-command="/pmdf/bin/convert.sh $INPUT_FILE $OUTPUT_FILE"

結果として、次のコマンドが実行されます。

/pmdf/bin/convert.sh a.in a.out