次の方法で共有


メッセージの保存

適用対象: Outlook 2013 | Outlook 2016

メッセージを保存する前に、クライアントは通常、メッセージの IMAPIProp::SetProps メソッドを呼び出して、メッセージ テキスト プロパティ、添付ファイルプロパティ、 PR_SUBJECT (PidTagSubject)、および受信者リストに関連付けられているプロパティに加えて、いくつかのプロパティを設定します。

PR_MESSAGE_CLASS (PidTagMessageClass) プロパティを IPM などの文字列に設定します。送信メッセージのクラスについて説明します。 クライアントはすべての送信メッセージ にPR_MESSAGE_CLASS を設定する必要がありますが、設定しない場合は、メッセージ ストア プロバイダーによって既定値が提供されます。 送信メッセージの既定のメッセージ クラスは IPM です。

PR_MESSAGE_FLAGS (PidTagMessageFlags) プロパティでMSGFLAG_UNSENT フラグを設定します。 必要に応じて、MSGFLAG_READフラグとMSGFLAG_UNMODIFIEDフラグも設定します。 MSGFLAG_UNMODIFIEDを設定すると、コンポジション下のメッセージで配信されたメッセージをシミュレートできます。 MSGFLAG_UNMODIFIEDは、メッセージが初めて保存される前にクライアントによってのみ設定できます。

未送信メッセージの永続的なコピーを作成する準備ができたら、メッセージとそのすべての添付ファイルに 対して IMAPIProp::SaveChanges を 呼び出します。 メッセージをすぐに送信する場合は、 SaveChanges を呼び出す必要はありません。 SubmitMessage を呼び出すと、メッセージは処理の一部として内部的に保存されます。

SaveChanges を呼び出すときは、メッセージを後で変更できるようにするKEEP_OPEN_READWRITE フラグを指定することをお勧めします。 その他の設定可能なフラグには、変更のコミット後にメッセージまたは添付ファイルを閉じる必要があることを示すFORCE_SAVE、変更が加えないことを示すKEEP_OPEN_READONLY、メッセージ ストア プロバイダーがクライアント要求をバッチ処理できるようにするフラグMAPI_DEFERRED_ERRORSが含まれます。

メッセージの SaveChanges を 呼び出す前に、メッセージ内のすべての添付ファイルに 対して SaveChanges を 呼び出す必要があります。 添付ファイルの保存に失敗した場合、添付ファイルは送信時にメッセージに含まれず、メッセージの添付ファイル テーブルには表示されません。 すべての添付ファイルを保存した後にメッセージを保存できない場合、メッセージと添付ファイルの両方が失われます。

SaveChanges が呼び出されると、メッセージ ストア プロバイダーは次のプロパティを更新します。

  • PR_DISPLAY_TO (PidTagDisplayTo) には、すべてのプライマリ受信者が一覧表示されます。

  • PR_DISPLAY_TO は、すべてのカーボン コピー受信者を一覧表示します。

  • PR_DISPLAY_BCC (PidTagDisplayBcc) には、すべてのブラインド カーボン コピー受信者が一覧表示されます。

  • PR_LAST_MODIFICATION_TIME (PidTagLastModificationTime)

  • PR_MESSAGE_FLAGS は、1 つ以上の添付ファイルが保存されている場合にMSGFLAG_HASATTACHを設定し、メッセージが変更されたことを示すMSGFLAG_UNMODIFIEDをクリアします。

  • PR_MESSAGE_SIZE (PidTagMessageSize) には、メッセージの最新のサイズが含まれています。

  • PR_MESSAGE_ATTACHMENTS (PidTagMessageAttachments) は、添付ファイル テーブルへのアクセスを提供します。

  • PR_MESSAGE_RECIPIENTS (PidTagMessageRecipients) は、受信者テーブルへのアクセスを提供します。

一部のメッセージ プロパティは、通常、メッセージの作成時にクライアントまたはサービス プロバイダーによって提供されます。 クライアントが設定を怠った場合、 SaveChanges が呼び出された時点でクライアントを更新するのはメッセージ ストア プロバイダー次第です。 たとえば、メッセージの PR_ENTRYID (PidTagEntryId) プロパティと PR_RECORD_KEY (PidTagRecordKey) プロパティがメッセージの作成時に設定された場合、保存時に変更する必要はありません。 ただし、メッセージの作成時に設定を無視するメッセージ ストア プロバイダーは、 SaveChanges が初めて呼び出されるときに設定する必要があります。

SaveChanges がMAPI_E_CORRUPT_DATAを返す場合は、保存されているデータが失われたと仮定します。 実装にクライアント/サーバー モデルを使用するメッセージ ストア プロバイダーは、ネットワーク接続が失われたり、サーバーが実行されていない場合にこの値を返す場合があります。 ユーザーにエラーを返す前に、 SetProps を呼び出し、 SaveChanges の別の呼び出しを行って、データを 2 回目に書き込んで保存してみてください。 データがローカルにキャッシュされている場合、これは問題になりません。 ただし、ローカル キャッシュがない場合、または 2 回目の SaveChanges 呼び出しが失敗した場合は、エラーを表示してユーザーに問題を警告します。