MAPI プロパティの取得

適用対象: Outlook 2013 | Outlook 2016

クライアントまたはサービス プロバイダーがオブジェクトからプロパティを取得すると、オブジェクトはプロパティの値、型、識別子を使用できるようになります。

クライアントとサービス プロバイダーは、次のいずれかを呼び出すことによって、オブジェクトのプロパティを取得できます。

IMAPIProp::GetProps

IMAPIProp::OpenProperty

HrGetOneProp

GetProps メソッドは、アクセスに特殊化または代替インターフェイスを必要としない 1 つ以上のプロパティを取得するために使用されます。 これは、 GetProps で使用できるプロパティが、整数やブール値などの小さいことを意味します。

複数のプロパティを取得するには

  1. 取得するプロパティの数を保持するのに十分な大きさの SPropTagArray 構造体を割り当てます。

  2. SPropTagArray 構造体の cValues メンバーを取得するプロパティの数に設定し、各 aulPropTag メンバーを識別子と型 (可能な場合はターゲット プロパティの 1 つ) に設定します。 型が不明な場合は、PT_UNSPECIFIEDに設定します。 型と識別子の両方が不明な場合は、 IMAPIProp::GetPropList を呼び出して、この情報を見つけます。 GetPropList は、オブジェクトでサポートされているすべてのプロパティを持つプロパティ タグ配列を返します。 プロパティ名のみを使用できる場合は、 IMAPIProp::GetIDsFromNames を呼び出して、関連付けられている識別子にアクセスします。

  3. IMAPIProp::GetProps を呼び出して、プロパティまたはプロパティを開きます。

OpenProperty メソッドは、アクセスに IStreamIMAPITable などの代替インターフェイスを必要とする大規模なプロパティを開くために使用されます。 OpenProperty は通常、大きな文字列、バイナリ、およびオブジェクトのプロパティを開くために使用され、一度に開くことができるプロパティは 1 つだけです。 呼び出し元は、入力パラメーターの 1 つとして必要な追加インターフェイスの識別子を渡します。

OpenProperty の一般的な用途には、PR_BODY (PidTagBody)、テキスト ベースのメッセージの本文を保持するプロパティ、PR_ATTACH_DATA_OBJ (PidTagAttachDataObject)、OLE オブジェクトまたはメッセージ添付ファイルを保持するプロパティ、フォルダーまたはアドレス帳のコンテナーコンテンツ テーブルを保持するプロパティPR_CONTAINER_CONTENTS (PidTagContainerContents) などがあります。

プロパティに応じて、 OpenProperty から異なるインターフェイスが要求されます。 IStream は、プロパティ データをバイト ストリームとして読み書きできるようにするインターフェイスで、通常、 PR_BODYにアクセスするために使用されます。 IMessage または IStream を使用して、PR_ATTACH_DATA_OBJにアクセスできます。 標準メッセージである埋め込みメッセージの添付ファイルでは IMessage が使用されますが、TNEF 形式のメッセージでは IStream が使用されますPR_CONTAINER_CONTENTSはテーブル オブジェクトであるため、IMAPITable を使用してアクセスします。

添付ファイルの PR_ATTACH_DATA_BIN プロパティを取得するには

  1. OpenStreamOnFile 関数を呼び出して、ファイルのストリームを開きます。

  2. メッセージの IMAPIProp::OpenProperty メソッドを呼び出して、IStream インターフェイスを使用してPR_ATTACH_DATA_BIN (PidTagAttachDataBinary) プロパティを取得します。 MAPI_MODIFYフラグとMAPI_CREATEフラグの両方を設定します。

  3. STATSTG 構造体を割り当て、ファイル ストリームの IStream::Stat メソッドの呼び出しで渡してサイズを決定します。 ストリーム サイズを決定するもう 1 つの方法は、フラグ STREAM_SEEK_ENDで IStream::Seek を 呼び出す方法です。

  4. ストリームの IStream::CopyTo メソッドを呼び出して、ファイルのストリームから添付ファイル ストリームにデータをコピーします。

  5. コピー操作が完了したら、 IUnknown::Release メソッドを呼び出して両方のストリームを解放します。

プロパティ アクセスに IStream を使用する場合、一部のサービス プロバイダーは、プロパティのサイズをストリームと共に自動的に送信します。 MAPI_DEFERRED_ERRORS フラグを指定して OpenProperty を呼び出すと、 プロパティの開き方とストリーム サイズの戻りが遅れる可能性があります。 MAPI_DEFERRED_ERRORS フラグが設定された OpenProperty の後にこのサイズを取得するために IStream::Stat が呼び出された場合、この一連の呼び出しによって余分なリモート プロシージャ呼び出しが強制されるため、パフォーマンスが影響を受けます。 パフォーマンスの低下を回避するために、クライアントは OpenPropertyStat の呼び出しの間で任意の MAPI メソッドを呼び出すことができます。

OpenProperty などの HrGetOneProp 関数は、一度に 1 つのプロパティを開きます。 HrGetOneProp は、ターゲット オブジェクトがローカル コンピューターに存在する場合にのみ使用する必要があります。 ターゲット オブジェクトがローカルで使用できない場合、 HrGetOneProp を 繰り返し使用すると、複数のリモート プロシージャ呼び出しが発生し、パフォーマンスが低下する可能性があります。

複数のプロパティを必要とする呼び出し元は、ループ内で HrGetOneProp または OpenProperty を呼び出すか、 GetProps を 1 回呼び出すことができます。 GetProps を 1 回呼び出した方が効率的です。

注:

セキュリティで保護されたプロパティは、 GetPropsHrGetOneProp、または GetPropList 呼び出しの他のプロパティでは自動的に使用できません。 セキュリティで保護されたプロパティは、プロパティ識別子を使用して明示的に要求する必要があります。

関連項目

MAPI のプロパティの概要