この節では、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-channel と out-channel の部分は前述の例と同じです。in-char-set は該当する部分の文字セット名を示します。この 2 回目のプローブで一致するものがない場合、文字セットの変換は行われません (ただし、フォーマットの変換、たとえば MIME 構造への変換などは、最初のプローブで一致したキーワードに基づいて行われる)。一致するものが見つかった場合は、次の文字列が返されます。
OUT-CHARSET=out-char-set
この場合、in-char-set は out-char-set が示す文字セットに変換されます。これらの文字セットは、MTA テーブルディレクトリに含まれる文字セット定義テーブル charsets.txt 内で定義されているものでなくてはなりません。文字セットがこのファイル内で適切に定義されていないと、変換は行われません。しかし、このファイルの中には現在もっとも利用度の高い数百種の文字セットが定義されているため、特に心配する必要はないでしょう。charsets.txt ファイルの詳細については、imsimta chbuild (UNIX および NT) ユーティリティーの説明を参照してください。
すべての条件が満たされると、MTA は文字セットマッピングを作成し、変換を実行します。変換されたメッセージ部分のラベルは、変換後の文字セット名に変更されます。
文字セット変換マッピングの機能は拡張されて、次に示す機能が新しく追加されました。
マッピングエントリの出力テンプレートに IN-CHARSET オプションを指定できます。このオプションがある場合、エンコードされた単語で指定されている文字セットよりも優先されます。
RELABEL-ONLY オプションを指定できます。このオプションは、整数 0 または 1 を受け入れます。このオプションの値が 1 の場合、OUT-CHARSET は IN-CHARSET に置き換わるだけで、ラベルの変更は行いません。
IN-CHARSET オプションを使用して入力文字セットを * に設定すると、文字セットから適切なラベルを察知できるようになります。
ローカルで使用している ISO-8859-1 を、インターネットで使用するために UTF-8 に変換する必要があるとします。さらに、インターネットへの接続は tcp_local を通して行われ、内部メッセージの発信と配信は tcp_internal と ims-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 |
次に示す 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 マッピングテーブルによって可能なその他のメッセージフォーマット変換の例を紹介します。
メッセージの処理にかかわるチャネルで 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-ms を OUT-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 ヘッダーを構築するように 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 が適用されるようにするため)。
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 テーブルは、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-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