変換ルールのテーブルを使用して、「C.2.2 電子メールから SMS への変換プロセス」に示した手順 1 〜 6 をサイトでカスタマイズできます。これらのルールは、MTA のマッピングファイル内のマッピングテーブルを使用して指定します。
マッピングテーブルの名前は、SMS_Channel_TEXT とし、SMS_Channel には SMS チャネルの名前を指定します。たとえば、チャネルの名前が sms である場合は SMS_TEXT、チャネルの名前が sms_mway である場合は SMS_MWAY_TEXT とします。
このマッピングテーブルには、2 種類のエントリが入ります。ただし、これらのエントリの形式についての説明を始める前に、エントリの作成および使用方法を理解するため、マッピングファイルの使用方法を理解しておくことが不可欠です。これら 2 種類のエントリの説明のあと、マッピングテーブルの例を示します。
2 種類のエントリを次に示します。
メッセージヘッダーエントリは、SMS メッセージに含めるヘッダー行を指定したり、ヘッダー行の略記方法または略記以外の場合に行われる変換方法を指定したりします。メッセージヘッダーエントリの 1 つによって、ヘッダー行がゼロでない長さの文字列に正常にマッピングされた場合にのみ、ヘッダー行は生成される SMS メッセージに含められます。各エントリには次のような形式があります。
H|pattern replacement-text
メッセージのヘッダー行がこのパターンに一致すると、ヘッダー行は置換テキスト「replacement-text」で置き換えられます。このときマッピングファイルのパターン一致機能および文字列置換機能が使用されます。その後、メタキャラクタ「$Y」が置換テキストに指定されていれば、ヘッダー行のマッピングによる最終的な結果は SMS メッセージに含められます。ヘッダー行がどのパターン文字列とも一致しない場合、ヘッダー行が長さゼロの文字列にマッピングされた場合、またはメタキャラクタ「$Y」が置換テキストに指定されていない場合は、ヘッダー行は SMS メッセージに含められません。次に 2 つのエントリを示します。
H|From:* F:$0$Y H|Subject:* S:$0$Y |
これらのエントリによって、From: および Subject: ヘッダー行は SMS メッセージに含められます。このとき From: および Subject: は F: と S: として略記されます。次のエントリの場合、
H|Date:* H|D:$0$R$Y H|D:*,*%19%%*:*:* H|D:$0$ $5:$6$R$Y |
Date: ヘッダー行が受け入れられ、次のヘッダー行のようにマップされます。
Date: Wed, 16 Dec 1992 16:13:27 -0700 (PDT)
これは次のように変換されます。
D: Wed 16:13
非常に複雑で反復的なマッピングが作成される場合もあります。サイトにカスタムフィルタを設定する場合は、最初にマッピングファイルの動作方法を理解しておく必要があります。エントリの右側の H| は、必要に応じて省略できます。H| は、一連の反復的なマッピングで必要とされるテーブルエントリの数を削減するために右側に置かれています。
メッセージ本文エントリは、マッピングを確立してメッセージ本文の各行に適用されます。メッセージ本文の各行は、確立されたマッピングが適用されてから、生成中の SMS メッセージに組み込まれます。メッセージ本文エントリは、次の形式をとります。
B|pattern B| replacement-text
メッセージ本文の行が pattern パターンと一致すると、置換テキスト replacement-text で置き換えられます。ここでも、この機能を使用して非常に複雑で反復的なマッピングが作成される場合があります。エントリの右側の B| は、必要に応じて省略できます。
例 C–1 に、SMS_TEXT マッピングテーブルの例を示します。各行の終わりにある括弧の中の数字は、このテーブルのあとに示す 「説明テキスト」というタイトルのセクションでの項目番号と対応しています。
SMS_TEXT H|From:* H|F:$0$R$Y (1) H|Subject:* H|S:$0$R$Y (1) H|F:*<*>* H|F:$1$R$Y () H|F:*(*)* H|F:$0$2$R$Y (2) H|F:*"*"* H|F:$0$2$R$Y (3) H|F:*@* H|F:$0$R$Y (4) H|%:$ * H|$0:$1$R$Y (5) H|%:*$ H|$0:$1$R$Y (5) H|%:*$ $ * H|$0:$1$ $2$R$Y (6) B|*--* B|$0-$1$R (7) B|*..* B|$0.$1$R (7) B|*!!* B|$0!$1$R (7) B|*??* B|$0?$1$R (7) B|*$ $ * B|$0$ $1$R (6) B|$ * B|$0$R (5) B|*$ B|$0$R (5) |
上記の例の SMS_TEXT マッピングテーブルのエントリの説明を次に示します。
上記の例では、マッピングの反復的適用の実装と制御にメタキャラクタ「$R」が使用されています。これらのマッピングを反復することによって、強力なフィルタリングが実行されます。たとえば、前後に付いている単一のスペースを削除する (6)、または 2 つのスペースを 1 つに削減する (7) という単純なマッピングは、全体として採用された場合に、前後に付いているすべてのスペースを削除し、連続する複数のスペースを単一のスペースに削減するフィルタとなります。このようなフィルタリングによって、各 SMS メッセージのサイズを小さくできます。
これらの 2 つのエントリによって、From: および Subject: ヘッダー行が SMS メッセージに含められます。From: および Subject: は、それぞれ F: と S: として略記されます。これら以外のエントリにも、From: および Subject: ヘッダー行にさらに影響を与えるものがあります。
このエントリは、<...> パターンを含む From: ヘッダー行を角括弧内のテキストのみにします。次に例を示します。
F: "John C. Doe" <jdoe@siroe.com> (Hello)
これは、次のように置き換えられます。
F: jdoe@siroe.com
このエントリは、From: ヘッダー行の (...) パターン内のすべてを包括的に削除します。次に例を示します。
F: "John C. Doe" <jdoe@siroe.com> (Hello)
これは、次のように置き換えられます。
F: "John C. Doe" <jdoe@siroe.com>
このエントリは、From: ヘッダー行の (...) パターン内のすべてを包括的に削除します。次に例を示します。
F: "John C. Doe" <jdoe@siroe.com> (Hello)
これは、次のように置き換えられます。
F: <jdoe@siroe.com> (Hello)
このエントリは、From: ヘッダー行のアットマーク (@) の右側にあるものをすべて包括的に削除します。次に例を示します。
F: "John C. Doe" <jdoe@siroe.com> (Hello)
これは、次のように置き換えられます。
F: "John C. Doe" <jdoe@
これらの 4 つのエントリは、メッセージヘッダーと本文の行から前後に付いているスペースを削除します。
これら 2 つのエントリは、メッセージのヘッダーと本文の行の 2 つのスペースを 1 つのスペースに削減します。
これらの 4 つのエントリは、二重になっているダッシュ、ピリオド、感嘆符、および疑問符を一致する文字の単一の不定発生に削減します。これによっても、SMS メッセージのバイト数を節約できます。
エントリの順序は非常に重要です。たとえば、所定の順序で、次のようなメッセージの From: ヘッダー行から始めます。
From: "John C. Doe" (Hello)
これは次のように短縮されます。
jdoe
この結果までの手順は次のとおりです。
次の From: ヘッダー行から始めます。
From: "John C. Doe" (Hello)
最初のマッピングエントリのパターンがこれと一致し、次の結果になります。
F: "John C. Doe" (Hello)
結果文字列の「$R」メタキャラクタによって、結果文字列は再度マッピングされます。
直前の手順の結果文字列にマッピングが適用されます。これによって、次の結果になります。
F: jdoe@siroe.com
マッピングの「$R」によって、一連のマッピング全体がこの手順の結果に再び適用されます。
次に、マッピングが適用され、次の結果になります。
F: jdoe
マッピングの「$R」によって、一連のマッピング全体がこの手順の結果に再び適用されます。
次に、マッピングが適用され、次の結果になります。
F:jdoe
マッピングの「$R」によって、一連のマッピング全体がこの手順の結果に再び適用されます。
ほかのエントリは一致しないため、最終的な結果文字列は次のとおりになります。
F:jdoe
これが SMS メッセージに取り込まれます。
imsimta test-mapping ユーティリティーを使用してマッピングテーブルをテストすることができます。次に例を示します。
# imsimta test -mapping -noimage_file -mapping_file=test.txt Enter table name: SMS_TEXT Input string: H|From: "John C. Doe" (Hello) Output string: H|F:jdoe Output flags: [0,1,2,89] Input string: ^D # |
imsimta test ユーティリティーの詳細については、『Sun Java System Messaging Server 6.3 Administration Reference』の「imsimta test」を参照してください。