メッセージ受信モデル

適用対象: Outlook 2013 | Outlook 2016

トランスポート プロバイダーは、MAPI スプーラーが受信メールをポーリングする必要があるかどうか、または新しいメールが到着したときに MAPI スプーラーへのコールバックを実行するかどうかを制御します。 トランスポート プロバイダーは、ポーリングを要求するために IXPProvider::TransportLogon から戻るときに、SP_LOGON_POLL フラグを設定します。 それ以外の場合、トランスポート プロバイダーは、受信メールが使用可能な場合に IMAPISupport::SpoolerNotify を使用します。 受信メールが使用可能であることを学習した後、MAPI スプーラーは新しいメッセージを開き、受信したメッセージのプロパティをメッセージに格納するようにトランスポート プロバイダーに依頼します。

このプロセスは次のように機能します。

  1. 使用可能なメッセージは、 IMAPISupport::SpoolerNotify を呼び出すトランスポート プロバイダー、または IXPLogon::P oll を呼び出す MAPI スプーラーによって示されます。

  2. MAPI スプーラーは IXPLogon::StartMessage を呼び出してプロセスを開始します。

  3. トランスポート プロバイダーは、 StartMessage で参照される場所に参照値を配置します。 これらの参照値を使用すると、トランスポート プロバイダーと MAPI スプーラーは、配信するメッセージが複数あるときに処理されているメッセージを追跡できます。

  4. トランスポート プロバイダーは、渡された IMessage : IMAPIProp インスタンスにメッセージ データを格納します。

  5. トランスポート プロバイダーは、IMessage インスタンスで IMAPIProp::SaveChanges メソッドを呼び出し、StartMessage からを返します。

  6. MAPI スプーラーは、メッセージ配信を停止する必要がある場合に IXPLogon::TransportNotify を呼び出します。

注:

トランスポート プロバイダーが多数のメッセージを配信する必要があり、トランスポート プロバイダーが IXPLogon::P oll ではなく IMAPISupport::SpoolerNotify を使用している場合は、他のトランスポート プロバイダーの CPU 時間を奪うことがないように、SpoolerNotify を頻繁に呼び出さないように注意する必要があります。 MAPI スプーラーには、これが発生しないようにするためのロジックがありますが、一般的に 、SpoolerNotify 呼び出しの間隔は、トランスポート プロバイダーが 1 つのメッセージを処理するのにかかる時間よりも長くする必要があります。 > また、MAPI スプーラーは、受信メッセージをすぐに処理できない場合があります。 MAPI スプーラーは、受信メッセージを受信する前に、トランスポート プロバイダーに他のタスクを実行するように求める場合があります。