前へ 目次 索引 DocHome 次へ |
iPlanet Messaging Server 5.2 管理者ガイド |
第 9 章 定義済みチャネルを使用する
チャネルによっては iPlanet Messaging Server をインストールした時点ですでに定義されているものもあります (表 9-1 を参照)。この章では、MTA の定義済みチャネルの使い方を説明します。この章を読む前に、第 6 章「MTA サービスと設定について」をお読みください。imta.cnf ファイルの書き換え規則を設定する方法については、第 7 章「書き換え規則を設定する」 を参照してください。
「パイプチャネルを使用してメッセージをプログラムに配信するには」
「ネイティブ (/var/mail) チャネルを設定するには」
「hold チャネルを使って一時的にメッセージを保留するには」
「文字セット変換とメッセージの再フォーマット」
チャネル
定義
UNIX のみ。/var/mail にメールを配信する(Messaging Server は /var/mail へのアクセスをサポートしない。ユーザが /var/mail ストアのメールにアクセスするには、UNIX ツールを使う必要がある)
サイト提供のプログラムやスクリプトを介してメールを配信するために使用される。この pipe チャネルによって実行されるコマンドは、管理者が imsimta プログラムのインタフェースを通じて管理する。詳細は、「パイプチャネルを使用してメッセージをプログラムに配信するには」を参照してください。
遅延メッセージのオフライン処理に使用されるチャネル。通常、reprocess チャネルはソースまたは宛先チャネルとして公にされない。process チャネルは、ほかの MTA チャネルと同様、公にされる
ディレクトリ内でのステータスが非アクティブまたは削除済みになっているユーザへのメッセージの処理に使用される。通常、受信したメッセージを差出人に送り返し、カスタム返送メッセージを送る
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 を参照)
パイプチャネルを使用してメッセージをプログラムに配信するには
メールをメールボックスで受信する代わりにプログラムに転送することができます。たとえば、受け取ったメールをメール保存用プログラムに転送したり、不在通知のような自動応答エージェントに転送することができます。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" -euser
programs ディレクトリ (server-instance/imta/programs) に実行ファイルが存在し、「others」に対して実行権が設定されていることを確認してください。
ユーザがプログラムにアクセスするためには、そのユーザの LDAP エントリに以下の属性および値が含まれている必要があります。
maildeliveryoption: program
mailprogramdeliveryinfo:myprocmailimsimta program ユーティリティについては、『iPlanet Messaging Server リファレンスマニュアル』を参照してください。
その他の配信プログラムを使用する場合は、そのプログラムが次の終了コードおよびコマンドラインの引数に関する条件を満たしていることを確認してください。
終了コード条件 : pipe チャネルが呼び出す配信プログラムは、チャネルがメッセージをキューから出すか、あとで処理するために配信するか、または返送するかを判断できるように、適切なエラーコードを返さなくてはなりません。
サブプロセスが終了コード 0 (EX_OK) で終了した場合は、メッセージが適切に配信されたと認識され、MTA のキューから削除されます。終了コード 71、74、75、または 79 (EX_OSERR、EX_IOERR、EX_TEMPFAIL、または EX_DB) で終了した場合は、一時的なエラーが発生したとみなされ、メッセージの配信は延期されます。その他のコードが返されると、メッセージは配信不能として差出人に返送されます。終了コードは、システムヘッダーファイル sysexits.h 内で定義されています。
コマンドラインの引数 : 可変引数 (%s) を含め、配信プログラムが使用できる引数の数に上限はありません。可変引数は、ユーザが実行するプログラムの場合はユーザ名を、ポストマスター「inetmail」が実行するプログラムの場合はユーザ名 + ドメイン名を示します。たとえば、次のコマンドラインは procmail プログラムを使用してメールを受取人に配信します。
ネイティブ (/var/mail) チャネルを設定するには
オプションファイルは、ローカルチャネルのさまざまな機能を制御するために使用されます。このローカルチャネルのオプションファイルは MTA の設定ディレクトリに保存し、native_option という名前を付けなければなりません (例 : server_root/msg-instance/imta/config/native_option)。オプションファイルは複数の行から構成されており、各行にはそれぞれ 1 つのオプション設定が含まれています。オプション設定は、次の形式で記述されています。
option=value 「value」は、オプションの要件に基づいて文字列または整数のいずれかとなります。
hold チャネルを使って一時的にメッセージを保留するには
hold チャネルは、一時的に受信不能になっている宛先へのメッセージを保留するためのチャネルです。一時的な受信不能の原因としては、ユーザ名が変更されている最中であったり、メールボックスが別のホストやドメインに移行されている最中であることが考えられます。原因はほかにもありますが、この 2 つがもっとも一般的なものです。hold チャネルにメッセージを保留するには、hold にユーザの maildeliveryoption 値の 1 つを設定します。その他の maildeliveryoption 値はすべて無視され (maildeliveryoption は複数値を持つ属性)、そのユーザへのメッセージは hold チャネルにルーティングされます。
ほかのチャネルとは異なり、hold チャネルのマスタープログラムは自動的に起動するように設定されていません。hold チャネルのキュー内のメッセージは、管理者が hold_master プログラムを呼び出すまでそのままの状態で待機します。
変換チャネル
conversion チャネルを使うと、MTA を通じて配信されるメッセージで指定する本文部分ごとの変換を任意に行うことができます。(本文部分とメッセージは違います。メッセージには複数の本文部分が含まれることがあります。たとえば添付ファイルにも本文部分があります。)変換処理は、サイトが提供した任意のプログラムやコマンド手順で行うことができます。処理内容には、テキストや画像形式の変換、ウィルススキャン、言語変換などがあります。MTA で通信するさまざまなメッセージ形式を変換することができ、特定の処理やプログラムをメッセージの本文部分に指定することができます。この章を利用するには、チャネルの概念を理解している必要があります (「チャネル」 を参照)。conversion チャネルを使ったウィルススキャンの補足情報は、iPlanet Messaging Server マニュアルの Web サイトの下部にある iPlanet Messaging Server のテクニカルノートを参照してください。
変換チャネルの実行には、A) 処理するメッセージ通信を選択し、B) 処理するメッセージの不一致の状態を特定する、という 2 つの手順があります。以下に詳細を説明します。
注 デフォルトの変換チャネルは MTA 設定ファイル内 (imta.cnf) に自動的に作成されます。このチャネルはそのままの状態で使用することができます。変更する必要はありません。
MIME の概要
変換チャネルは MIME (Multipurpose Internet Mail Extension) ヘッダー行を幅広く利用します。このため、メッセージ構築と MIME ヘッダーフィールドに関する知識が必要です。MIME の詳細については、RFC 1806、2045 〜 2049、2183 を参照してください。ここでは、MIME について簡単に説明します。
メッセージの構築
メッセージは基本的にヘッダーと本文で構成されています。ヘッダーはメッセージの最初にあり、日付、件名、差出人、受取人など、一定の制御情報を含んでいます。ヘッダーの後ろに空白行が入り、その後ろはすべて本文です。MIME では、複数の本文部分を持つさらに複雑なメッセージを作成する方法を指定します。本文部分を入れ子にすることもできます。このようなメッセージは複数部分メッセージと呼ばれ、すでに説明したように、メッセージの本文部分ごとに変換チャネルで変換されます。
MIME ヘッダー
MIME 仕様では、本文部分のヘッダー行が定義されています。ヘッダー行には、MIME-Version、Content-type、Content-Transfer-Encoding、Content-ID、および Content-disposition があります。変換チャネルでよく使用されるヘッダーは Content-type と Content-disposition です。以下に MIME ヘッダー行の例を示します。
Content-type ヘッダー
MIME Content-Type ヘッダーは本文部分の内容を表します。Content-Type ヘッダー形式と実際の例を次に示します。
type は本文部分の内容の種類を表します。種類には、Text、Multipart、Message、Application、Image、Audio、Video などがあります。
- Content-type: type/subtype; parameter1=value; parameter2=value...
subtype は コンテンツタイプをさらに詳しくしたものです。Content-type にはそれぞれ独自のサブタイプがあります。たとえば次のようなものがあります。text/plain、application/octet-stream、image/jpeg。MIME メールの Content Subtype は IANA (Internet Assigned Numbers Authority) で割り当てられ、一覧表示されています。割り当て一覧は http://www.isi.edu/in-notes/iana/assignments/media-types/media-types で参照することができます。
parameter は Content-type/subtype の組み合わせに固有のものです。たとえば、charset および name パラメータは以下のようになります。
charset パラメータでは、テキスト形式メッセージの文字セットを指定します。name パラメータでは、データをファイルに書き込む場合に使用するファイル名を指定します。
- Content-type:text/plain; charset=us-ascii
Content-type:application/msword; name=temp.doc
注
Content-disposition ヘッダー
MIME Content-disposition ヘッダーで本文部分のプレゼンテーション情報がわかります。通常、添付ファイルに追加され、添付ファイルの本文部分を表示するのか (inline)、コピーするファイル名として表示するのか (attachment) を指定します。Content-disposition ヘッダーの形式は次のとおりです。
disposition_type は通常 inline (本文部分を表示) または attachment (保存ファイルとして表示) です。attachment には通常パラメータ filename があり、ここでファイル保存で推奨される名前を指定します。
- Content-disposition: disposition_type; parameter1=value;parameter2=value...
Content-disposition ヘッダーの詳細については、RFC 2183 を参照してください。
変換処理のトラフィックを選択する
MTA チャネルとは異なり、通常、変換チャネルはアドレスや MTA 書き換え規則では指定されていません。代わりに、メッセージは CONVERSIONS マッピングテーブル (imta_tailor ファイルの IMTA_MAPPING_FILE パラメータで指定される) を使って変換チャネルに送られます。テーブルへのエントリには次のような形式があります。
MTA はそれぞれのメッセージを処理する際、CONVERSIONS マッピングテーブルがあれば使用します。source-channel がメッセージを発信するチャネルで、destination-channel がメッセージの宛先となるチャネルであるとすれば、CONVERT に続くアクションが実行されます (Yes を選択すると、MTA はメッセージを destination-channel から変換チャネルに変換します。一致するものがなければ、メッセージは通常の宛先チャネルのキューに入ります)。
- IN-CHAN=source-channel;OUT-CHAN=destination-channel;CONVERT Yes/No
注 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 ファイル (デフォルトのディレクトリは server_root/msg-instance/imta/conversions) の IMTA_CONVERSION_FILE オプションファイルで指定します。エントリを構成する conversions ファイルで、どの形式の本文部分をどのように処理するかを制御します。各エントリは 1 つまたは複数の行で構成され、各行には 1 つまたは複数の name=value パラメータ句が含まれています。パラメータ句の値は MIME 規則に一致しています。最終行以外のすべての行は、セミコロン (;) で終了する必要があります。このファイルでは、1 行に入力できる文字数が 252 バイトに制限されています。円記号 (¥) を継続文字として使用すれば、1 つの論理行を複数の行に分割することができます。エントリは、セミコロンで終了していない行や空白行が 1 行以上挿入されているところで終了します。
conversion ファイルエントリの簡単な例を次に示します。
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-* パラメータを追加すると詳細に指定することができます(表 9-5 を参照)。このエントリは、次のような MIME ヘッダー行を持つメッセージ部分の変換アクションをトリガします。
3 つの conversion ファイルがコード例 9-1 のパラメータを指定したら、次の 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 (コード例 9-1) は、サイト提供のプログラムが返すファイル形式を指定します。つまり、ファイルの保存方法と、変換チャネルが返されたファイルを読み取る方法を指定します。たとえば、html ファイルはテキストモードで保存されますが、.exe プログラムや zip ファイルはブロック / バイナリモードで保存されます。モードは、読み取り中のファイルが一定の保存形式にあることを表しています。
コード例 9-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 は、元の本文部分を持つファイルと変換後の本文部分を保存するプログラムがあるファイルとを指定する変換チャネル環境パラメータ (「変換チャネル環境変数の使い方」 を参照) です。
本文部分でコマンドを実行する代わりに、command パラメータの場所に DELETE=1 を使えばメッセージ部分を簡単に削除することができます。
変換チャネルの情報フロー
情報フローは次のようになります。本文部分を含むメッセージが変換チャネルに入ってきます。変換チャネルはメッセージをパースして、本文部分を 1 つずつ処理します。次に変換チャネルは本文部分が適格であるかどうかを判断します。つまり、MIME ヘッダー行を指定パラメータと比較して処理するかどうかを決定します。本文部分が適格であると判断されれば、変換処理が始まります。MIME や本文部分の情報を変換スクリプトに渡す場合は、「情報引き渡しパラメータ」で指定した環境変数 (表 9-3) に保存します。この時点で、「アクションパラメータ」で指定したアクションを本文部分に実行します。一般的には、本文部分を削除するか、スクリプトで囲んだプログラムに渡します。本文部分はスクリプトで処理されると変換チャネルに戻され、処理後のメッセージに組み込まれます。スクリプトは、変換チャネルの「出力オプション」を使って情報を変換チャネルに送信することもできます。この情報には、出力本文部分に追加する新しい MIME ヘッダー行、メッセージの差出人に返送するエラーテキスト、MTA にメッセージのバウンス、削除、保留などのアクション開始を指示する命令などがあります。
最後に、変換チャネルは「出力パラメータ」で指定されたように出力本文部分のヘッダー行を置き換えます。
変換チャネル環境変数の使い方
メッセージ本文部分を処理する場合、MIME ヘッダー行情報や本文部分全体をサイト提供のプログラムとやり取りすると便利なことがあります。たとえば、あるプログラムでメッセージ本文部分以外に Content-type と Content-disposition ヘッダー行情報が必要であるとします。一般にサイト提供のプログラムに入力されているのは、主にファイルから読み取るメッセージ本文部分です。プログラムで本文部分が処理されると、変換チャネルが読み取りファイルに書き込まれます。このような情報の受け渡しは、変換チャネル環境変数を使って行われます。環境変数は、parameter-symbol-* パラメータや定義済みの変換チャネル環境変数のセット (表 9-4 を参照) を使って、conversions ファイルで作成することができます。
次の conversions ファイルエントリと受信ヘッダーでは、サイト提供のプログラムに環境変数を使って MIME 情報を渡す方法が示されています。
conversions ファイルエントリ :
受信ヘッダー :
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=APPARENT_NAME は、最初の Content-type パラメータの値 (この例では Draft1.doc) が APPARENT_NAME という環境変数に保存されることを示します。
parameter-copy-0=* は、入力本文部分の Content-type パラメータがすべて出力本文部分にコピーされることを示します。
dparameter-symbol-0=APPARENT_FILENAME は、最初の Content-disposition パラメータの値 (この例では Draft1.doc) が APPARENT_FILENAME という環境変数に保存されることを示します。
dparameter-copy-0=* は、入力本文部分の Content-disposition パラメータがすべて出力本文部分にコピーされることを示します。
message-header-file=2 は、メッセージの元のヘッダー全体 (最初と最後のメッセージヘッダー) が環境変数 MESSAGE_HEADERS で指定したファイルに書き込まれることを示します。
original-header-file=1 は、封入する MESSAGE/RFC822 部分の元のヘッダーが環境変数 INPUT_HEADERS で指定したファイルに書き込まれることを示します。
override-header-file=1 は、MIME ヘッダーが環境変数 OUTPUT_HEADERS で指定したファイルから読み取られ、封入するMIME 部分の元のヘッダーを無視することを示します。$OUTPUT_HEADERS は、変換実行中に作成される実行時テンポラリファイルです。このファイルはサイト提供のプログラムで使用され、変換処理中に変更されたヘッダーが保存されます。本文部分が変換チャネルで再構築される際に、このファイルからヘッダー行が読み取られます。
override-option-file=1 は、変換チャネルが OUTPUT_OPTIONS 環境変数によって名前が付けられたファイルから変換チャネルのオプションを読み取ることを表します。「変換チャネル出力オプションを使用するには」を参照してください。
command="SERVER_ROOT/msg-INSTANCE/bin/viro-scan500.sh" は、メッセージ本文部分で実行するコマンドを示します。
環境変数
説明
封入するメッセージ (本文部分だけに限らない) の元の一番外側のヘッダーまたは本文部分がすぐに封入する MESSAGE/RFC822 部分のヘッダーを含むファイル名。サイト提供のプログラムはこのファイルを読み取る
サイト提供のプログラムで封入部分の MIME ヘッダー行を保存するファイル名。サイト提供のプログラムはこのファイルを作成して書き込む。ファイルには option=value 行ではなく実際のヘッダー行が含まれ、最後の行は空白行となる
サイト提供のプログラムで変換チャネルのオプションを読み取るファイル名。「変換チャネル出力オプションを使用するには」を参照
変換チャネル出力オプションを使用するには
変換チャネル出力オプション (表 9-4) は動的な変数で、変換スクリプトから変換チャネルに情報と特定の指示を渡します。たとえば、本文部分の処理中にメッセージをバウンスさせてスクリプトから変換チャネルに指示を出し、返送メッセージに「このメッセージにはウィルスが含まれている」というエラーテキストを追加させることができます。出力オプションは、指定した変換エントリに OVERRIDE-OPTION-FILE=1 を設定すると開始されます。次に必要に応じて出力オプションはがスクリプトで設定され、環境変数ファイル OUTPUT_OPTIONS に保存されます。このスクリプトが本文部分の処理を終了すると、変換チャネルは OUTPUT_OPTIONS ファイルからオプションを読み取ります。
OUTPUT_OPTION 変数は、変換チャネルがオプションを読み取るファイル名です。通常、この変数は情報を渡す実行時テンポラリファイルとして使用されます。以下に、出力オプションを使ってウィルスを送信した差出人にエラーメッセージを返すスクリプトの例を示します。
この例では、$OUTPUT_OPTIONS で定義されたファイルにシステム診断メッセージとステータスコードが追加されます。$OUTPUT_OPTIONS テンポラリファイルを読み出すと、次のように表示されます。
OUTPUT_DIAGNOSTIC="Virus found and deleted."
STATUS=178029946OUTPUT_DIAGNOSTIC='Virus found and deleted' の行は、メッセージに「Virus found and deleted」というテキストを追加するように変換チャネルに指示していることを表します。
178029946 は pmdf_err.h ファイルごとの PMDF__FORCERETURN ステータスで、server-root/bin/msg/imtasdk/include/pmdf_err.h に格納されています。このステータスコードは、差出人にメッセージを返送するように変換チャネルに指示しています。特定の指示の使い方について詳細は 「変換チャネル出力を使ってメッセージのバウンス、削除、保留を行うには」を参照してください。
封入する MESSAGE/RFC822 部分のヘッダー
メッセージ部分で変換を実行する場合、変換チャネルは封入する MESSAGE/RFC822 部分のヘッダーにアクセスします。封入された MESSAGE/RFC822 部分がない場合は、メッセージヘッダーにアクセスします。ヘッダーの情報はサイト提供のプログラムに役立つことがあります。ORIGINAL-HEADER-FILE=1 を含むエントリが選択されると、封入する MESSAGE/RFC822 部分の元のヘッダー行はすべて OUTPUT_HEADERS 環境変数で表したファイルに書き込まれます。OVERRIDE-HEADER-FILE=1 であれば、変換チャネルは OUTPUT_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=* は、処理するメッセージが 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 ファイルの出力オプションを読み取ります。
指示の全リストは server_root/bin/msg/imtasdk/include/pmdf_err.h に記載されています。以下に、変換チャネルでよく使用される指示を示します。変換スクリプトを使い、特定のメッセージ本文部分に必要なアクションを決定します。
スクリプトで、OUTPUT_OPTIONS ファイルに STATUS=directive_code オプションを記述しアクションに対する指示を指定します。
名前
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
文字セット変換とメッセージの再フォーマット
Messaging Server の基本的なマッピングテーブルの 1 つに、文字セット変換テーブルがあります。CHARSET-CONVERSION という名のこのテーブルは、チャネル間における文字セット変換やメッセージフォーマット変換の種類を指定するために使用されます。多くのシステムでは、文字セットおよびメッセージフォーマットの変換は不必要なため、このテーブルが使われることはありません。しかし、文字セット変換の必要性が生じる場合もあります。
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 は宛先チャネル (メッセージの送信先) を示します。一致するソースチャネルおよび宛先チャネルがある場合は、その結果がカンマで区切られたキーワードリストの文字列として表示されます。表 9-6 にキーワードの一覧を示します。
文字セットの変換
プローブを行い、メッセージフォーマットを変換する必要があると判断した場合、MTA はメッセージにおける各部分のチェックを開始します。テキスト部分はすべて検出され、その文字セットのパラメータは 2 回目のプローブに使用されます。ただし、変換が必要であると判断されるまで 2 回目のプローブは行われません。2 回目のプローブを行うための入力文字列は以下のとおりです。IN-CHAN=in-channel;OUT-CHAN=out-channel;IN-CHARSET=in-char-set
in-channel と out-channel の部分は前述の例と同じです。in-char-set は該当する部分の文字セット名を示します。この 2 回目のプローブで一致するものがない場合、文字セットの変換は行われません (ただし、フォーマットの変換、たとえば MIME 構造への変換などは、最初のプローブで一致したキーワードに基づいて行われます)。一致するものが見つかった場合は、以下の文字列が返されます。
この場合、out-char-set はin-char-set が示す文字セットに変換されます。これらの文字セットは、MTA テーブルディレクトリに含まれる文字セット定義テーブル charsets.txt 内で定義されているものでなくてはなりません。文字セットがこのファイル内で適切に定義されていないと、変換は行われません。しかし、このファイルの中には現在もっとも利用度の高い数百種の文字セットが定義されているため、特に心配する必要はないでしょう。charsets.txt ファイルの詳細については、imsimta chbuild (UNIX および NT) ユーティリティの説明を参照してください。
すべての条件が満たされると、MTA は文字セットマッピングを作成し、変換を実行します。変換されたメッセージ部分のラベルは、変換後の文字セット名に変更されます。
メッセージフォーマットの変換
前述したように、CHARSET-CONVERSION マッピングテーブルは MIME フォーマットと数種のメーカー独自のメールフォーマット間における添付ファイルの変換にもかかわりがあります。以下の各項では、CHARSET-CONVERSION マッピングテーブルによって可能なその他のメッセージフォーマット変換の例を紹介します。
非 MIME バイナリ添付ファイルの変換
メッセージの処理にかかわるチャネルで CHARSET-CONVERSION が有効になっている場合、MIME 以外の非標準フォーマットを使用しているメール、たとえば Microsoft Mail (MSMAIL) SMTP ゲートウェイからのメールは、自動的に MIME フォーマットに変換されます。tcp_local チャネルが存在する場合は通常、このチャネルが Microsoft Mail SMTP ゲートウェイからのメッセージを受信します。以下の例は、ローカルユーザ宛てのメッセージのフォーマット変換を有効にするものです。IN-CHAN=tcp_local;OUT-CHAN=ims-ms;CONVERT Yes
すべてのチャネルに対してフォーマット変換を有効にするには、OUT-CHAN=ims-ms を OUT-CHAN=* に変更します。ただし、こうすると tcp_local チャネルからのメールがすべてチェックされることになるため、特定のチャネルに限定する場合より、処理時間が長くなる可能性があります。
さらに、このように無差別な変換を設定すると、エンベロープおよび関連する転送情報部分のみを変換すべきメッセージ (たとえばシステムを通過するだけのメッセージなど) に対してまで広範な変換処理を行うことになりかねません。
MIME を Microsoft Mail SMTP ゲートウェイが理解できるフォーマットに変換するには、MTA 設定ファイルで Microsoft Mail SMTP ゲートウェイ専用のチャネル (tcp_msmail など) を設定し、マッピングファイルに以下の内容を追加します。
IN-CHAN=*;OUT-CHAN=tcp_msmail;CONVERT RFC1154
MIME ヘッダーのラベル変更
ユーザエージェントやゲートウェイによっては、より正確な MIME ヘッダーを作成するために十分な情報があるにもかかわらず、比較的無益な MIME ヘッダーを作成するものもあります。もっとも良い方法はそのようなエージェントやゲートウェイの設定を適切に変更することですが、それが不可能な場合には有用な MIME ヘッダーを構築するように MTA を設定します。最初のプローブの際に CHARSET-CONVERSION マッピングテーブルが Yes または Always キーワードを返した場合、MTA は conversions ファイルが存在するかどうかを確認します。ファイルが存在する場合、MTA はそのファイルをチェックして RELABEL=1 という記述があるかどうかを確認し、ある場合はそのエントリの指定に従って MIME ラベルを変換します。
たとえば、以下のような CHARSET-CONVERSION テーブルと MTA conversions ファイルのエントリの組み合わせなら、メッセージは tcp_local チャネルから ims-ms チャネルにルーティングされます。さらに、受信時の MIME ラベルが application/octet-stream でファイル名パラメータの拡張子が ps または msw の場合には、それぞれapplication/postscript または application/msword という新しいラベルが付けられます (より正確なこのラベルは、元のユーザエージェントやゲートウェイがメッセージに付けておくべきものです)。
MacMIME フォーマットの変換
Macintosh ファイルには、Macintosh 特有の情報を含むリソースフォークと、ほかのプラットフォームで使用できるデータを含むデータフォークの 2 つの部分があります。さらに、Macintosh ファイルの転送には一般に 4 種類の異なるフォーマットが使用されるため、Macintosh ファイルを転送するにはより複雑な処理が必要となります。Applesingle、Binhex、および Macbinary フォーマットは、Macintosh リソースフォークと Macintosh データフォークを 1 つにエンコードしたものから成り立っています。Appledouble フォーマットの場合は、リソースコードとデータフォークがそれぞれ独立した部分として存在しています。このため、Macintosh 以外のプラットフォームでは、リソースフォーク部分を無視してデータフォーク部分のみを使用できる Appledouble がもっとも便利です。逆に、Macintosh への送信には、ほかの 3 種類のフォーマットが便利です。MTA は、これらの Macintosh フォーマット間の変換を実行することができます。MTA は CHARSET-CONVERSION キーワードである Appledouble、Applesingle、Binhex、および 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 テーブルは ims-ms チャネルにメッセージを配信する場合に Appledouble フォーマットへの変換を MTA に指示します。
IN-CHAN=*;OUT-CHAN=l;CONVERT Appledouble
この場合、すでに MacMIME フォーマットが使用されている部分のみが Appledouble フォーマットに変換されます。
Appledouble または Block フォーマットへの変換には、元の Macintosh ファイルに含まれる Macintosh クリエータおよびタイプ情報に基づいて Appledouble または Block フォーマットの部分のデータフォークに付ける MIME ラベルを指定するために、MAC-TO-MIME-CONTENT-TYPES マッピングテーブルが使用されることもあります。このテーブルのプローブには、「フォーマット|タイプ|クリエータ|ファイル名」形式が使用されます。フォーマットの値には SINGLE、BINHEX、MACBINARY のどれかが指定され、タイプの値には Macintosh タイプ情報 (16進)、クリエータの値には Macintosh クリエータ情報 (16進)、そしてファイル名の値には実際のファイル名が指定されます。
たとえば、ims-ms チャネルにメッセージを送る場合に Appledouble フォーマットに変換し、MACBINARY または BINHEX 部分から MS Word または PostScript に変換されたドキュメントに特定の MIME ラベルを付けるには、以下のテーブルが適切です。
マッピングエントリのテンプレート (右側) に $Y フラグが設定されていない場合、指定したラベルは付けられません。MTA テーブルディレクトリ内の mac_mappings.sample ファイルには、その他の種類の添付ファイルに関するサンプルエントリが記載されています。
MacMIME 以外のフォーマットが使用されている部分を Binhex または Macbinary フォーマットに変換するには、X-MAC-TYPE および X-MAC-CREATOR MIME Content-type: パラメータ値が必要です。通常これらのパラメータ値を持たない部分にそれを強要するために MIME ラベルの変換を実行することも可能です。
サービス変換
MTA の変換サービス機能をサイト提供のプロシージャと一緒に使用すると、新しい形式のメッセージを作成することができます。前述の CHARSET-CONVERSION や conversion チャネルの場合は個別の MIME メッセージ部分を操作しますが、変換サービスはすべての MIME メッセージ部分 (MIME ヘッダーと内容) および MIME メッセージ全体を操作します。また、ほかの CHARSET-CONVERSION 操作や conversion チャネルの操作とは異なり、変換サービスは独自で MIME 逆アセンブリ、デコード、再エンコード、および再アセンブリを行います。ほかの CHARSET-CONVERSION 操作と同様に、変換サービスは CHARSET-CONVERSION マッピングテーブルを通じて有効化されます。CHARSET-CONVESION マッピングテーブルを最初にプローブした結果が 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、失敗した場合にはその他の値で終了する必要があります。
入力ファイル名、出力ファイル名、メッセージのエンベロープ受取人アドレスを含むファイルの名前などを伝達するためには、環境変数が使われます。これらの 3 つの環境変数は以下のとおりです。
これらの環境変数の値は、通常の方法でコマンドラインに代入することができます。UNIX では、変数名の前に「$」記号を挿入します。
前へ 目次 索引 DocHome 次へ
Copyright © 2002 Sun Microsystems, Inc. All rights reserved.
最新更新日 2002 年 2 月 27 日