MTA の変換サービス機能をサイト提供のプロシージャと一緒に使用すると、新しい形式のメッセージを作成することができます。前述の CHARSET-CONVERSION や conversion チャネルの場合は個別の 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 つの環境変数は次のとおりです。
INPUT_FILE - 処理する入力ファイルの名前
OUTPUT_FILE - 生成する出力ファイルの名前
INFO_FILE - エンベロープ受取人アドレスを含むファイルの名前
この 3 つの環境変数の値は、通常の方法でコマンド行に代入することができます。UNIX では、変数名の前に「$」記号を挿入します。たとえば、INPUT_FILE と OUTPUT_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