Exchange 2013 トランスポート パイプライン内のメッセージの読み取りおよび変更
Exchange 2013 のカスタム トランスポート エージェントでメッセージを読み取り、書き込み、および変更するために使用できる .NET Framework クラスの詳細について説明します。
製品: Exchange Server 2013
- メッセージの読み取り、書き込み、または変更に使用するクラス
- Encoders 名前空間
- iCalendar 名前空間
- MIME 名前空間
- TextConverters 名前空間
- Tnef 名前空間
- vCard 名前空間
メッセージがトランスポート パイプラインを通過すると、トランスポート エージェントは、さまざまなデータ形式間でメッセージ コンテンツの読み取り、書き込み、変換を行うことができます。 たとえば、MIME データの読み取りと書き込み、Uuencoded または Quoted-printable (qp) 形式の受信メッセージを識別し、組織で使用されている標準に変換したり、受信メッセージに関連付けられている予定表や連絡先情報を読み取って保存したりできます。
さらに、セキュリティ上の問題を引き起こすコンテンツを識別し、それらを含むコンテンツやメッセージを移動または削除する (たとえば、HTML メッセージのリンクを削除するなど) こともできます。
この記事では、メッセージの読み取り、書き込み、および変更に使用できる .NET Framework のクラスに関する情報を提供します。
注意
コンテンツ変換 API の多くのプロパティとパラメーターには、パフォーマンスの問題 (サービス拒否攻撃を含む) を引き起こすほど大きな値が使用できます。 トランスポート エージェントでコンテンツ変換 API を使用する場合は、エージェントのリソース消費量に制限をかけるため、読み取り時や書き込み時にプロパティ値とパラメーター値でサポートするサイズに制限を実装する必要があります。
メッセージの読み取り、書き込み、または変更に使用するクラス
次の表に、電子メール メッセージの読み取り、書き込み、および変更に使用できる .NET Framework のクラスを示します。
.NET Framework のメッセージ処理の名前空間
.NET Framework 名前空間 | Classes |
---|---|
Microsoft.Exchange.Data.Mime.Encoders |
メモリ内エンコードとデコードのクラス、関連付けられた列挙に含まれるエンコーダーまたはデコーダー クラスのいずれかを受け入れるエンコーダー ストリーム クラス、およびエンコーダーとデコーダーの ByteEncoderException 例外クラスが含まれます。 |
Microsoft.Exchange.Data.ContentTypes.iCalendar |
予定表の情報が含まれているデータ ストリームの読み書きを可能にする型が含まれています。 これには、予定表のリーダーとライター、例外オブジェクト、定期的なアイテム オブジェクト、および予定表アイテムに関するプロパティ情報を返す際に役立つ構造体と列挙体が含まれます。 |
Microsoft.Exchange.Data.Mime |
MIME データの作成、読み取り、書き込み、走査、エンコード、およびデコードに使用できるクラス、構造体、列挙体およびデリゲートが含まれています。 これには、MIME データ ストリームへの順方向専用の読み取り書き込みアクセスが可能になるストリーム ベースのリーダーとライターと、MIME ドキュメントに使用可能な DOM ベースのメソッドとクラスが含まれています。 |
Microsoft.Exchange.Data.TextConverters |
データ ストリームの読み書きと、特定のデータ形式間での変換 (HTML からリッチ テキスト形式 (RTF) への変換など) の実行を可能にするクラス、構造体、列挙体、およびデリゲートが含まれています。 テキスト コンバーターを使用すると、ドキュメント ストリームの形式を相互に変換できるようになり、セキュリティ上のリスクを招く可能性のあるドキュメントの要素を選択的に削除することもできるようになります。 |
Microsoft.Exchange.Data.ContentTypes.Tnef |
Transport Neutral Encapsulation Format (TNEF) の読み取りと書き込みが容易になる順方向専用のストリーム リーダーとライター、例外クラス、および構造体と列挙体が含まれています。 |
Microsoft.Exchange.Data.ContentTypes.vCard |
vCard 形式の連絡先データの読み取りと書き込みが容易になる順方向専用のストリーム リーダーとライター、例外クラス、および構造体と列挙体が含まれています。 |
Encoders 名前空間
Encoders 名前空間には、メモリ内エンコードおよびデコードに対応するクラスが含まれています。 これらは ByteEncoder 基底クラスから継承されます。 各クラスでは、Base64、BinHex、Quoted-printable (qp)、および Unix-to-Unix (Uu) のエンコードとデコードを行います。 メモリ内エンコードおよびデコードに使用されるクラスを次に示します。
エンコーダーとデコーダーは ByteEncoder 基底クラスを継承し、エラー処理に ByteEncoderException 例外クラスを使用します。
さらに、名前空間には MacBinaryHeader クラスが含まれています。MacBinary でエンコードされたファイルを識別し、関連するファイル ヘッダーを読み取ります。
最後に、 EncoderStream クラスは、メモリ内オブジェクトではなくデータ ストリームに対して変換を実行します。 このクラスは、エンコーダーまたはデコーダー クラスのいずれかを受け入れ、関連付けられている EncoderStreamAccess 列挙に従って読み取りまたは書き込みを行います。
iCalendar 名前空間
iCalendar 名前空間には、iCalendar データに対応した順方向専用のリーダーおよびライターと、iCalendar ストリームの作成、アクセス、および変更をサポートする構造体とクラスが用意されています。
CalendarReader クラスと CalendarWriter クラスは、iCalendar ストリーム データの読み取りと書き込みに使用されます。
CalendarReader は、読み取り可能な Stream をコンストラクターの引数として受け取ります。 その後、 ReadFirstChildComponent、 ReadNextSiblingComponent、 および ReadNextComponent メソッドを使用して、データ ストリーム内の iCalendar コンポーネントに順番にアクセスできます。 ComplianceMode プロパティに設定した値に基づいて、iCalendar ストリームのエラーによって例外がスローされるか、ComplianceStatus プロパティが Compliant 以外の値に設定されます。 このプロパティを確認することで、受信 iCalendar データの問題を検出できます。
CalendarWriter クラスは、書き込み可能な Stream をコンストラクターの引数として受け取ります。
MIME 名前空間
MIME 名前空間には、MIME ドキュメントの作成、アクセス、および変更を可能にするクラスが用意されています。 ストリーム ベースのメソッドまたは DOM ベースのメソッドのどちらかを使用して、MIME ドキュメントを操作できます。
MimeDocument クラスと MIME DOM
MimeDocument クラスを使用すると、DOM から MIME ドキュメントにアクセスできます。 この型のオブジェクトは、DOM 全体をロードできるメモリ容量があり、メッセージのヘッダーとコンテンツへのランダム アクセスが必要なときに使用します。
GetLoadStream メソッドまたは Load メソッドを使用して、MimeDocument オブジェクトにデータを読み込みます。 その後、DOM 階層を辿って MIME データを作成、変更、または削除します。 MIME データを変更したら、WriteTo メソッドのいずれかを使用してストリームに 書き込 むことができます。
次の図は、 MimeDocument オブジェクト内のデータの構造を示しています。
図 1. MimeDocument オブジェクトの構造
MimeReader クラスおよび MimeWriter クラスとストリーム ベースの MIME 解析
MimeReader クラスと MimeWriter クラスを使用すると、MIME ストリームへの転送専用アクセスが有効になります。 これらのクラスは、MIME データを変更する必要がなく、読み取りまたは書き込みが完了しているデータが必要になる場合に使用します。 たとえば、定義済みの形式に合ったメッセージを印刷する場合は、 MimeWriter クラスが理想的な場合があります。
MimeDocument クラスは DOM をカプセル化します。 MimeReader クラスと MimeWriter クラスは、状態コンピューターを表します。 それらの状態は、受信した入力と呼び出したメソッドによって変化します。 図 2 から 5 は、 MimeReader オブジェクトに対して、各状態と結果となる状態から呼び出すために有効なメソッドを示す簡略化された状態遷移図です。
これらの図を使用する場合は、ある状態から次の状態への矢印に従い、状態の変化を起こすメソッドの呼び出しや戻り値に注目します。 たとえば、最初の図では、自作の MimeReader に属するストリームの開始点を想定しています。 パーツ ヘッダーの状態を取得するには、その順序で ReadNextPart または ReadFirstChildPart のいずれかを呼び出します。 ヘッダーが存在する場合 (MIME が整形式の場合) は、Part Headers 状態に移行します。 それ以外の場合は、例外がスローされます。
図 2. MimeReader オブジェクトの簡易状態遷移図
注:
図 3、4 および 5 では、それぞれ前の図に示した状態を詳しく説明しています。
図 3. 図 2 からのパーツ ヘッダーの状態の拡張
図 4. ヘッダーでパラメーターが検出されたときの図 3 からのヘッダー状態の拡張
注:
図 5 で表される状態は再帰的です。アドレス グループが検出された場合は、 GroupRecipientReader プロパティを使用してグループ内のアドレスを読み取ることができます。
図 5. アドレスまたはアドレス グループが見つかった場合の図 3 からのヘッダー状態の拡張
図 6 と図 7 は、 MimeWriter オブジェクトの簡略化された状態遷移図を示しています。
注:
図 7 では、図 6 に示した Part Headers 状態を詳しく説明しています。
図 6. MimeWriter オブジェクトの簡易状態遷移図
図 7. 図 6 からのパーツ ヘッダーの状態の拡張
TextConverters 名前空間
TextConverters 名前空間には、電子メール メッセージの内容の変換をサポートする型が含まれています。 これらの型は、コード ページ変換を実行したり、セキュリティで保護されていない HTML を削除したり、電子メール メッセージ本文に対して他の変換を実行したりできます。 Microsoft.Exchange.Data.TextConverters 名前空間には、TextConverter 抽象クラスから派生する次のクラスが含まれています。
これらのテキスト コンバーターを使用すると、ドキュメント ストリームの形式を変更したり、HTML ドキュメントから安全でない要素を削除したりできます。 これらのクラスは、 TextConverter 基底クラスのいずれかの Convert メソッドの 1 つの呼び出しを使用して変換を実行するために単独で使用できます。または、変換された読み取りまたは書き込みを実行するためにそれを使用するコンバーターのコンストラクターに渡すことができます。
基底クラスから継承した機能は、元のドキュメントと変換後の出力を保存するための十分な領域がある場合や、変換の結果を保存する必要がある場合の変換を実行する際に役立ちます。 Convert メソッドは、入力と出力のストリーム、テキスト リーダー、またはテキスト ライターを受け取り、入力のコンテンツを関連付けられた出力に変換します。
この名前空間には、次に示すテキスト リーダー、ライター、およびストリームのクラスも含まれています。
ConverterReader — System.IO.TextReader から派生します。
ConverterWriter — System.IO.TextWriter から派生します。
ConverterStream — System.IO.Stream から派生します。
これらは、元のデータや変換後の出力を保存する領域がない場合、ストリームからの入力を受信する場合やストリームに出力を送信する場合、または出力の用途がインデックスの作成や検索のみで変換の結果を保存する必要のない場合の変換を実行するために使用します。
Tnef 名前空間
Tnef 名前空間には、TNEF データについて順方向専用のストリーム ベースの読み取りおよび書き込みを可能にするクラスと型が含まれています。 TNEF とは、MAPI を解釈できないクライアントのために、MAPI のプロパティをカプセル化することを目的として使用されるデータ形式のことです。
TnefReader クラスと TnefWriter クラスは、Microsoft.Exchange.Data.ContentTypes.Tnef 名前空間のコア機能を提供します。
TnefReader クラスは、読み取り可能なストリームをコンストラクターの引数として受け取ります。 次に 、ReadNextAttribute メソッドを使用して、TNEF ストリーム内の属性を順番に読み取ります。 属性を読み取った後は、 TnefPropertyReader を取得して現在のプロパティを読み取るだけでなく、 TnefReader オブジェクトの読み取り専用プロパティのいずれかを使用して、属性に関する情報にアクセスできます。 ReadAttributeRawValue メソッドを使用して、現在の属性に直接アクセスすることもできます。
TnefWriter クラスは、書き込み可能な Stream をコンストラクターの引数として受け取ります。 TnefWriter クラスは、このストリームにデータを書き込む複数の方法を提供します。
vCard 名前空間
vCard 名前空間には、vCard データ形式で電子メール メッセージに含まれている連絡先情報を読み書きするために使用するクラス、構造体、および列挙体が含まれています。 この名前空間には、電子メール メッセージに関連付けられた vCard データの読み取りを可能にする連絡先リーダーとライター、例外クラス、プロパティ リーダー、パラメーター リーダー、およびサポート用列挙体が含まれています。