次の方法で共有


POP3 アカウントのメッセージ ダウンロード履歴の検索

このトピックでは、メール クライアントが PidTagAttachDataBinary プロパティにアクセスして、POP3 アカウントのメッセージダウンロード履歴を取得する方法について説明します。

メッセージのダウンロード履歴を取得する理由

Outlook 用の Post Office Protocol (POP) プロバイダーを使用すると、ユーザーはローカル デバイスで新しい電子メール メッセージを取得およびダウンロードし、その後、メール サーバー上でこれらの電子メール メッセージを残したり削除したりできます。 メール クライアントは、ダウンロードする新しいメッセージを確認するときに、その受信トレイの新しいメッセージのみを識別してダウンロードできる必要があります。 メール クライアントは、まず UIDL (一意の ID リスト) コマンドを使用してこれを行います。このコマンドは、その受信トレイに一意の識別子 (UID) に配信された各メッセージのマップを取得します。 クライアントは、そのクライアントの受信トレイに対してダウンロードまたは削除されたメッセージのメッセージダウンロード履歴も取得します。 メッセージ UID マップとダウンロード履歴を使用して、クライアントは履歴に存在しないメッセージを新しいメッセージとして識別できるため、ダウンロードする必要があります。

受信トレイのメッセージダウンロード履歴を取得するには:

  • このトピックの手順に従って、特定の形式に従うバイナリ ラージ オブジェクト (BLOB) の履歴を含む PidTagAttachDataBinary プロパティを見つけます。

  • 引き続き 、POP3 アカウントのメッセージダウンロード履歴の解析に進みます。この BLOB を解析して、その受信トレイに対してダウンロードまたは削除されたメッセージを識別する方法について説明します。

メッセージのダウンロード履歴を特定するための重要な概念

受信トレイのメッセージダウンロード履歴は、受信トレイの非表示メッセージの添付ファイルにバイナリ MAPI プロパティ PidTagAttachDataBinary に格納されます。 表 1 は、メッセージのダウンロード履歴を見つける方法を理解するのに役立つ概念のリソースを示しています。

表 1. 中心概念

記事のタイトル 説明
MAPI 非表示フォルダー
MAPI を使用すると、メール クライアントは非表示のフォルダーと非表示のメッセージに情報を格納できます。 非表示のフォルダーは MAPI フォルダーの関連付けられた部分にあり、通常、ユーザーが操作するのとは見えない情報が含まれています。 クライアントは、非表示のフォルダー内の非表示メッセージに格納する形式と内容を決定します。
MAPI メッセージ
MAPI は、クライアントのユーザーに表示される標準 IPM サブツリー内、またはサブツリーの外部に表示され、ユーザーには表示されないフォルダーにメッセージを格納します。 メッセージには、添付ファイルに追加のデータを格納できます。ファイル、別のメッセージ、または OLE オブジェクトの形式にすることができます。 メッセージのダウンロード履歴の場合、履歴は、別の非表示メッセージに添付されているメッセージのプロパティに格納されます。
メッセージ プロパティの概要
クライアントは、メッセージに情報を格納するときに、実際にはメッセージのプロパティに情報を格納します。 MAPI では、多くのプロパティがサポートされています。一部は常に存在し、クライアントによって設定できます。他のプロパティは省略可能です。また、クライアントはそれらを使用可能にすることも、有効な値に設定することもできません。 メッセージのダウンロード履歴は、非表示メッセージへの添付ファイルの PidTagAttachDataBinary プロパティに格納されます。
MAPI プロファイル
セッションのログオン時に、メール クライアントは、使用するプロバイダーとサービスを説明するプロファイルを選択します。 プロファイルは、プロパティを含むセクションに分割されます。 特に、 PidTagSearchKey (PR_SEARCH_KEY) プロパティと PidTagProfileName (PR_PROFILE_NAME) プロパティは常に存在します。 プロファイルの検索キーはすべてのプロファイルの中で一意であり、 MUID_PROFILE_INSTANCE (MAPIGUID で定義されている) によって識別されるプロファイル セクションに格納されます。H). IMAPISession::OpenProfileSection を使用してセクションを開き、IMAPIProp::GetProps を使用してプロパティ値を取得します。
コンテンツ テーブル
メッセージ ストア プロバイダーは、フォルダーのコンテンツ テーブルを実装します。 フォルダーの関連付けられた部分の非表示メッセージの場合、メッセージ ストア プロバイダーは関連するコンテンツ テーブルをサポートし、クライアントは IMAPIContainer::GetContentsTable メソッドを使用して、関連付けられたコンテンツ テーブルへのポインターを返すことができます。
制限事項について
制限の種類
制限の構築
制限コードのサンプル
MAPI では、クライアントは制限を使用してコンテンツ テーブルをフィルター処理し、特定のプロパティが特定の値に設定されているメッセージを表す行を検索できます。 制限は、より特殊な制限構造の和集合を含めることができる SRestriction データ構造を使用して定義されます。 IMAPITable::FindRow メソッドは、制限を適用し、制限条件に一致するテーブル内の最初の行を取得します。
インデックス作成用のストアの登録について
PidTagStoreProvider (PR_MDB_PROVIDER) プロパティを使用して、ストア プロバイダーの種類を確認します。 たとえば、ストアが Exchange ストアであるかどうかを確認するために、 PidTagStoreProvider プロパティは、パブリック ヘッダー ファイル edkmdb.h で定義されている定数 pbExchangeProviderPrimaryUserGuid で表される値を返す必要があります。

適切な非表示のメッセージと添付ファイルの検索

受信トレイのメッセージダウンロード履歴が非表示メッセージへの添付ファイルの PidTagAttachDataBinary プロパティにあることがわかったので、適切な非表示メッセージの適切な添付ファイルを検索する手順には、次の手順が含まれます。

  1. 適切な非表示メッセージを見つける

  2. 非表示メッセージの適切な添付ファイルを見つける

  3. メッセージ添付ファイルの PidTagAttachDataBinary プロパティにアクセスする

適切な非表示メッセージを見つける

  1. MUID_PROFILE_INSTANCEで指定されたプロファイル セクションで、プロファイルから PidTagSearchKey (PR_SEARCH_KEY) プロパティ取得します。

  2. IMAPIContainer::GetContentsTable を呼び出して、受信トレイ フォルダーの関連コンテンツを開きます。

  3. PidTagConversationKey (PR_CONVERSATION_KEY)、PidTagSearchKey (PR_SEARCH_KEY)、および PidTagMessageClass (PR_MESSAGE_CLASS) プロパティに基づいて制限を作成して、受信トレイの関連コンテンツのすべての非表示メッセージを含むテーブルを取得します。 POP3 UIDL 履歴の検索から抽出された制限の例を次に示します。

       SRestriction rgRes[3]; 
       SPropValue rgProps[3]; 
       rgRes[0].rt = RES_AND; 
       rgRes[0].res.resAnd.cRes = 2; 
       rgRes[0].res.resAnd.lpRes = &rgRes[1]; 
       rgRes[1].rt = RES_PROPERTY; 
       rgRes[1].res.resProperty.relop = RELOP_EQ; 
       rgRes[1].res.resProperty.ulPropTag = PR_CONVERSATION_KEY; 
       rgRes[1].res.resProperty.lpProp = &rgProps[0]; 
       rgRes[2].rt = RES_PROPERTY; 
       rgRes[2].res.resProperty.relop = RELOP_EQ; 
       rgRes[2].res.resProperty.ulPropTag = PR_MESSAGE_CLASS; 
       rgRes[2].res.resProperty.lpProp = &rgProps[1]; 
       rgProps[0].ulPropTag = PR_CONVERSATION_KEY; 
       rgProps[0].Value.bin = pVals[iSearchKey].Value.bin; // PR_SEARCH_KEY from the profile 
       rgProps[1].ulPropTag = PR_MESSAGE_CLASS; 
       rgProps[1].Value.LPSZ = (LPTSTR)"IPM.MessageManager";
    
  4. テーブルから、 IMAPITable::FindRow を使用して非表示のメッセージを見つけます。

  5. 手順 4 で非表示のメッセージが見つからない場合は、次に示すように、PidTagConversationKey ではなく PidTagSearchKey (PR_SEARCH_KEY) を使用するように制限を変更します。

     rgRes[1].res.resProperty.ulPropTag = rgProps[0].ulPropTag = PR_SEARCH_KEY;
    
  6. IMAPITable::FindRow を使用して非表示のメッセージを見つけます。

  7. 手順 6 で失敗した場合は、 PidTagSubject (PR_SUBJECT) を次の値と等しくするように制限を変更します (簡潔にスタイル置換を使用して printf 以下に示します)。

     "Outlook Message Manager (%s) (KEY: %s)", PR_PROFILE_NAME, HexFromBin(PR_SEARCH_KEY)
    
  8. IMAPITable::FindRow を使用して非表示のメッセージを検索します。

  9. Outlook 2010 以降のバージョンを実行している場合は、 PidTagProfileName (PR_PROFILE_NAME) と PidTagSearchKey (PR_SEARCH_KEY) にそれぞれ次の値を使用します。

     CHAR g_szGeneralKey[] = "General Key"; 
     const SBinary g_binGeneralKey = {sizeof(g_szGeneralKey), (LPBYTE)g_szGeneralKey};
    

    手順 3 ~ 8 を実行します。 メッセージが見つからない場合は、元の手順 3 から 8 に戻ります。

  10. 手順 4、6、または 8 で見つかった非表示のメッセージを開きます。

非表示メッセージの適切な添付ファイルを見つける

非表示のメッセージには複数の添付ファイルが含まれている可能性があるため、次の順序で適切な添付ファイルを探します。

注:

この手順では、スタイルの置換を printf 使って簡潔にします。

  1. PidTagAttachLongFilename (PR_ATTACH_LONG_FILENAME) が次の文字列と一致する添付ファイルを探します。ここでszEmailAddress、ユーザーの SMTP アドレスはユーザーのプロファイルで指定されています。 .

     "BlobPOP%s", szEmailAddress
    
  2. PidTagAttachFilename (PR_ATTACH_FILENAME) が "BlobPOP%s"、 szEmailAddressと一致する添付ファイルを探します。

  3. PidTagDisplayName (PR_DISPLAY_NAME) が "BlobPOP%s"、 szEmailAddressと一致する添付ファイルを探します。

  4. PidTagAttachFilename (PR_ATTACH_FILENAME) が "Blob%.8x" とdwAcctUIDdwAcctUID一致する添付ファイルを探PROP_ACCT_MINI_UIDIOlkAccount::GetProp メソッドを使用して、PROP_ACCT_MINI_UID プロパティにアクセスできます。

メッセージ添付ファイルの PidTagAttachDataBinary プロパティにアクセスする

非表示メッセージの適切なメッセージ添付ファイルを見つけたら、 IMAPIProp::GetProps を使用して添付ファイルの PidTagAttachDataBinary プロパティを読み取ります。

次の手順

このトピックでは、POP3 メール クライアントの受信トレイのメッセージダウンロード履歴を見つける方法について学習しました。 この 履歴を解析して 受信トレイに対してダウンロードまたは削除されたメッセージを特定する方法については、「POP3 アカウントのメッセージダウンロード履歴の解析」を参照してください。

関連項目