ストア プロバイダーによってメッセージを使用してメッセージを送信します。Sending messages by using message store providers

適用されます: OutlookApplies to: Outlook

メッセージ ストア プロバイダーは、送信メッセージの送信 (つまり、クライアント アプリケーションがメッセージを送信するメッセージ ストア プロバイダーを使用する機能) をサポートする必要はありません。Message store providers are not required to support outgoing message submissions (that is, the ability for client applications to use the message store provider to send messages). クライアント アプリケーションをどこかに格納されているメッセージのデータがある必要がありますので、メッセージを送信するときに、メッセージ ストアを使用する必要があるユーザーが完了するまでの間と、MAPI スプーラー用のトランスポート プロバイダーにメッセージを提供する時間を構成します。基になるメッセージング システムに送信します。Client applications need to use a message store while sending messages, because the message's data must be stored somewhere between the time that the user is finished composing it and the time that the MAPI spooler gives the message to a transport provider for submission to the underlying messaging system. メッセージ ストア プロバイダーが送信メッセージの送信をサポートしていない場合は、既定のメッセージ ストアとして使用できません。If your message store provider does not support outgoing message submissions, it cannot be used as the default message store.

メッセージの送信をサポートするために、メッセージ ストア プロバイダーは、次の。To support sending messages, your message store provider must do the following:

SetLockStateメソッドは、MAPI スプーラーとクライアントの間の適切な相互運用のために重要です。The SetLockState method is important for proper interoperation between the MAPI spooler and clients. MAPI スプーラーを呼び出すとSetLockStateに送信するメッセージ、メッセージ ストア プロバイダーにする必要がありますクライアントがメッセージを開くことできません。When the MAPI spooler calls SetLockState on an outgoing message, the message store provider must not let clients open the message. クライアントは、MAPI スプーラーによってロックされているメッセージを開くと、メッセージ ストア プロバイダーは、MAPI_E_NO_ACCESS を返す必要があります。If a client does try to open a message that is locked by the MAPI spooler, the message store provider should return MAPI_E_NO_ACCESS. メッセージのロックされた状態は、ストアがシャット ダウンされるメッセージは、MAPI スプーラーによってロックされている場合に、持続的ではありません。The locked state of a message does not have to be persistent in case the store is shut down while the message is locked by the MAPI spooler.

かどうか、MAPI スプーラーに送信するメッセージをロックすることに関係なくメッセージ ストア プロバイダーは書き込み用に開かれる送信メッセージ キューにメッセージをできません。Regardless of whether the MAPI spooler has locked an outgoing message, the message store provider should not allow a message in the outgoing message queue to be opened for writing. 場合は、クライアントでは、MAPI_MODIFY フラグを使用して送信メッセージのIMSgStore::OpenEntryメソッドを呼び出し、呼び出しは失敗し、MAPI_E_SUBMITTED を返す必要があります。If a client calls the IMSgStore::OpenEntry method on an outgoing message with the MAPI_MODIFY flag, the call should fail and return MAPI_E_SUBMITTED. クライアント アプリケーションは、MAPI_BEST_ACCESS フラグを使用して送信メッセージにOpenEntryを呼び出し、メッセージ ストア プロバイダーは、メッセージを読み取り専用のアクセスを許可する必要があります。If a client application calls OpenEntry on an outgoing message with the MAPI_BEST_ACCESS flag, the message store provider should allow read-only access to the message.

メッセージは、MAPI スプーラーによって処理されるには、メッセージ ストア プロバイダーは、メッセージのPR_SUBMIT_FLAGS (PidTagSubmitFlags) のプロパティを SUBMITFLAG_LOCKED に設定します。When a message is to be handled by the MAPI spooler, the message store provider sets the message's PR_SUBMIT_FLAGS (PidTagSubmitFlags) property to SUBMITFLAG_LOCKED. SUBMITFLAG_LOCKED 値は、MAPI スプーラーが、排他的使用のためのメッセージをロックしていることを示します。The SUBMITFLAG_LOCKED value indicates that the MAPI spooler has locked the message for its exclusive use. メッセージが 1 つ以上のプリプロセッサ関数を使用して、トランスポート プロバイダーが登録されている前処理を必要とする場合、 PR_SUBMIT_FLAGSSUBMITFLAG_PREPROCESS の他の値が設定されています。The other value for PR_SUBMIT_FLAGS, SUBMITFLAG_PREPROCESS, is set when the message requires preprocessing by one or more preprocessor functions registered by a transport provider.

次の手順では、メッセージ ・ ストア、トランスポート、および MAPI スプーラーがクライアントから 1 つまたは複数の受信者にメッセージを送信するのにはどのようにやり取りする方法について説明します。The following procedures describe how the message store, transport, and MAPI spooler interact to send a message from a client to one or more recipients.

クライアント アプリケーションでは、 IMessage::SubmitMessageメソッドを呼び出します。The client application calls the IMessage::SubmitMessage method. SubmitMessage、メッセージ ストア プロバイダーは、次の。In SubmitMessage, the message store provider does the following:

  1. IMAPISupport::PrepareSubmitを呼び出します。Calls IMAPISupport::PrepareSubmit. MAPI がエラーを返した場合、メッセージ ストア プロバイダーは、クライアントにそのエラーを返します。If MAPI returns an error, the message store provider returns that error to the client.

  2. MSGFLAG_SUBMIT、 PR_MESSAGE_FLAGS (PidTagMessageFlags) のプロパティ、メッセージ内のビットを設定します。Sets the MSGFLAG_SUBMIT bit in the PR_MESSAGE_FLAGS (PidTagMessageFlags) property of the message.

  3. れない(PidTagResponsibility) プロパティで受信者テーブルの列し、トランスポートがまだいると見なすことがないメッセージを送信するための責任を示すために FALSE に設定してあることを保証します。Ensures that there is a column for the PR_RESPONSIBILITY (PidTagResponsibility) property in the recipient table and sets it to FALSE to indicate that no transport has yet assumed responsibility for transmitting the message.

  4. PR_CLIENT_SUBMIT_TIME (PidTagClientSubmitTime) のプロパティの元の日時を設定します。Sets the date and time of origination in the PR_CLIENT_SUBMIT_TIME (PidTagClientSubmitTime) property.

  5. 次にIMAPISupport::ExpandRecipsを呼び出します。Calls IMAPISupport::ExpandRecips to do the following:

    1. すべての個人用配布リストとカスタム受信者を展開し、すべての変更された表示名を元の名前に置き換えます。Expand all personal distribution lists and custom recipients and replace all changed display names with their original names.

    2. 重複した名前を削除します。Remove duplicate names.

    3. 必要な処理を確認し、前処理が必要な場合、NEEDS_PREPROCESSING フラグとPR_PREPROCESS (PidTagPreprocess) は、MAPI で予約されているを設定します。Check for any required preprocessing and, if preprocessing is required, set the NEEDS_PREPROCESSING flag and the PR_PREPROCESS (PidTagPreprocess) property, which is reserved for MAPI.

    4. メッセージ ・ ストアは、トランスポートと密接に関連し、すべての受信者を処理できない場合は、NEEDS_SPOOLER フラグを設定します。Set the NEEDS_SPOOLER flag if the message store is tightly coupled with a transport and it cannot handle all of the recipients.

  6. NEEDS_PREPROCESSING メッセージのフラグが設定されている場合は、次のタスクを実行します。Performs the following tasks if the NEEDS_PREPROCESSING message flag is set:

    1. PR_SUBMIT_FLAGSプロパティで設定された SUBMITFLAG_PREPROCESS ビットを使用して、送信キューにメッセージを配置します。Puts the message in the outgoing queue with the SUBMITFLAG_PREPROCESS bit set in the PR_SUBMIT_FLAGS property.

    2. MAPI スプーラー キューが変更されたことを通知します。Notifies the MAPI spooler that the queue has changed.

    3. 、クライアントに制御を返しますし、メッセージ フロー、MAPI スプーラーを無効にします。Returns control to the client, and message flow continues in the MAPI spooler. MAPI スプーラーは、次のタスクを実行します。The MAPI spooler performs the following tasks:

      1. IMsgStore::SetLockStateを呼び出すことによって、メッセージをロックします。Locks the message by calling IMsgStore::SetLockState.

      2. すべての登録の順序でプリプロセッサ関数を呼び出すことによって必要な前処理を実行します。Performs the needed preprocessing by calling all of the preprocessing functions in the order of registration. トランスポート プロバイダーでは、前処理の関数を登録するのにはIMAPISupport::RegisterPreprocessorを呼び出します。Transport providers call IMAPISupport::RegisterPreprocessor to register preprocessing functions.

      3. その前処理を格納したメッセージを示すメッセージを開いた状態でIMessage::SubmitMessageの呼び出しは、完了です。Calls IMessage::SubmitMessage on the open message to indicate to the message store that preprocessing is complete.

前処理、されていないかがあった場合の前処理スクリプトとSubmitMessageと呼ばれる、MAPI スプーラー メッセージ ストア プロバイダーは、クライアント プロセスで、次。If there was no preprocessing, or there was preprocessing and the MAPI spooler called SubmitMessage, the message store provider does the following in the client process:

  • メッセージ ・ ストアは、トランスポートに密に結合し、NEEDS_SPOOLER フラグは、 IMAPISupport::ExpandRecipsから返された場合は、次のタスクを実行します。Performs the following tasks if the message store is tightly coupled to a transport and the NEEDS_SPOOLER flag was returned from IMAPISupport::ExpandRecips:

    • 処理可能なすべての受信者を処理します。Handles any recipients that it can handle.

    • れないプロパティを設定しますが、処理するすべての受信者。Sets the PR_RESPONSIBILITY property to TRUE for any recipients that it handles.

    • このストアの密結合とトランスポートのすべての受信者がわかっている場合は、次のタスクを実行します。Performs the following tasks if all recipients are known to this tightly coupled store and transport:

      • IMAPISupport::CompleteMsgを呼び出す場合は、メッセージのプリプロセスまたはメッセージ ストア プロバイダーは、完全なメッセージを処理する MAPI スプーラーを希望しています。Calls IMAPISupport::CompleteMsg if the message was preprocessed or the message store provider wants the MAPI spooler to complete message processing. メッセージの流れは、MAPI スプーラーを続行します。Message flow continues with the MAPI spooler.

      • メッセージのプリプロセスがしないか、メッセージ ストア プロバイダーは、メッセージの処理を完了するのには MAPI スプーラーを希望しない場合は、次のタスクを実行します。Performs the following tasks if the message was not preprocessed or the message store provider does not want the MAPI spooler to complete message processing:

        1. コピーの場合はPR_SENTMAIL_ENTRYID (PidTagSentMailEntryId) プロパティでは、エントリ id によって識別されたフォルダーにメッセージを設定します。Copies the message to the folder identified by the entry identifier in the PR_SENTMAIL_ENTRYID (PidTagSentMailEntryId) property, if set.

        2. PR_DELETE_AFTER_SUBMIT (PidTagDeleteAfterSubmit) プロパティが TRUE に設定されている場合は、メッセージを削除します。Deletes the message if the PR_DELETE_AFTER_SUBMIT (PidTagDeleteAfterSubmit) property has been set to TRUE.

        3. ロックされている場合、メッセージのロックを解除します。Unlocks the message if it is locked.

        4. クライアントに返します。Returns to the client. メッセージ フローは、完了です。Message flow is complete.

    • メッセージのプリプロセスまたはプロバイダーは、メッセージの処理を完了するのには MAPI スプーラーを希望する場合は、次のタスクを実行します。Performs the following tasks if the message was preprocessed or the provider wants the MAPI spooler to complete message processing:

      1. IMAPISupport::CompleteMsgを呼び出します。Calls IMAPISupport::CompleteMsg.

      2. MAPI スプーラーとメッセージのフローを継続します。Continues message flow with the MAPI spooler. 詳細についてを参照してくださいを送信するメッセージ: MAPI スプーラー タスクFor more information, see Sending Messages: MAPI Spooler Tasks.

    • メッセージのプリプロセスがしないか、プロバイダーは、メッセージの処理を完了するのにはスプーラーを希望しない場合は、次のタスクを実行します。Performs the following tasks if the message was not preprocessed or the provider does not want the spooler to complete message processing:

      1. コピーの場合、 PR_SENTMAIL_ENTRYIDプロパティでは、エントリ id によって識別されたフォルダーにメッセージを設定します。Copies the message to the folder identified by the entry identifier in the PR_SENTMAIL_ENTRYID property, if set.

      2. PR_DELETE_AFTER_SUBMITプロパティが TRUE に設定されている場合は、メッセージを削除します。Deletes the message if the PR_DELETE_AFTER_SUBMIT property has been set to TRUE.

      3. ロックされている場合、メッセージのロックを解除します。Unlocks the message if it is locked.

      4. 呼び出し元に戻ります。Returns to the caller. メッセージ フローは、完了です。Message flow is complete.

  • トランスポートにメッセージ ・ ストアが密に結合されない、メッセージ ・ ストアに知られていたすべての受信者または NEEDS_SPOOLER フラグが設定されている場合は、次のタスクを実行します。Performs the following tasks if the message store is not tightly coupled to a transport, not all of the recipients were known to the message store, or the NEEDS_SPOOLER flag is set:

    1. PR_SUBMIT_FLAGSプロパティに SUBMITFLAG_PREPROCESS ビットを設定せず、送信キューにメッセージを配置します。Puts the message in the outgoing queue without setting the SUBMITFLAG_PREPROCESS bit in the PR_SUBMIT_FLAGS property.

    2. 発信キューは、テーブルの通知を生成することによって変更された MAPI スプーラーに通知します。Notifies the MAPI spooler that the outgoing queue has changed by generating a table notification.

    3. クライアント、およびメッセージの流れに戻りますが、MAPI スプーラーが実行するタスクのセットを使用して続行します。Returns to the client, and message flow continues with a set of tasks performed by the MAPI spooler.

関連項目See also