IMAPIFolder::CopyMessages
適用対象: Outlook 2013 | Outlook 2016
1 つ以上のメッセージをコピーまたは移動します。
HRESULT CopyMessages(
LPENTRYLIST lpMsgList,
LPCIID lpInterface,
LPVOID lpDestFolder,
ULONG_PTR ulUIParam,
LPMAPIPROGRESS lpProgress,
ULONG ulFlags
);
パラメーター
lpMsgList
[in]コピーまたは移動するメッセージを識別する ENTRYLIST 構造体の配列へのポインター。
lpInterface
[in] lpDestFolder パラメーターが指す宛先フォルダーへのアクセスに使用するインターフェイスを表すインターフェイス識別子 (IID) へのポインター。 NULL を渡すと、サービス プロバイダーは標準フォルダー インターフェイス IMAPIFolder : IMAPIContainer を返します。 クライアントは NULL を渡す必要があります。 他の呼び出し元は、 lpInterface パラメーターをIID_IUnknown、IID_IMAPIProp、IID_IMAPIContainer、またはIID_IMAPIFolderに設定できます。
lpDestFolder
[in]コピーまたは移動されたメッセージを受信する開いているフォルダーへのポインター。
ulUIParam
[in]このメソッドが表示するダイアログ ボックスまたはウィンドウの親ウィンドウへのハンドル。 ulUIParam パラメーターは、クライアントが ulFlags パラメーターで MESSAGE_DIALOG フラグを設定し、lpProgress パラメーターに NULL を渡さない限り無視されます。
lpProgress
[in]進行状況インジケーターを表示する進行状況オブジェクトへのポインター。 LPProgress で NULL が渡された場合、メッセージ ストア プロバイダーは MAPI 進行状況オブジェクトの実装を使用して進行状況インジケーターを表示します。 lpProgress パラメーターは、ulFlags でMESSAGE_DIALOG フラグが設定されていない限り無視されます。
ulFlags
[in]コピーまたは移動操作の実行方法を制御するフラグのビットマスク。 次のフラグを設定できます。
MAPI_DECLINE_OK
サポート オブジェクトの IMAPISupport::D oCopyTo または IMAPISupport::D oCopyProps メソッドを呼び出して、IMAPIFolder::CopyMessages を実装している場合は、メッセージ ストア プロバイダーにMAPI_E_DECLINE_COPYを直ちに返すように通知します。
MESSAGE_DIALOG
操作が進行すると、進行状況インジケーターが表示されます。
MESSAGE_MOVE
メッセージまたはメッセージは、コピーされるのではなく移動されます。 MESSAGE_MOVEが設定されていない場合は、メッセージがコピーされます。
戻り値
S_OK
メッセージまたはメッセージが正常にコピーまたは移動されました。
MAPI_E_DECLINE_COPY
プロバイダーはサポート オブジェクト メソッドを呼び出してこのメソッドを実装し、呼び出し元は MAPI_DECLINE_OK フラグを渡しました。
MAPI_W_PARTIAL_COMPLETION
呼び出しは成功しましたが、すべてのエントリが正常にコピーまたは移動されたわけではありません。 この警告が返されたら、呼び出しは成功として処理する必要があります。 この警告をテストするには、 HR_FAILED マクロを使用します。 詳細については、「 エラー処理にマクロを使用する」を参照してください。
注釈
IMAPIFolder::CopyMessages メソッドは、メッセージをコピーまたは別のフォルダーに移動します。
読み取り/書き込みアクセス許可で開かれたメッセージは、移動またはコピーできます。
実装に関するメモ
IMAPISupport::CopyMessages メソッドを使用せずに別のメッセージ ストアにメッセージをコピーする場合は、まず、GENERATE_RECEIPT_ONLY フラグを設定して IMAPIFolder::SetReadFlags を呼び出す必要があります。 受信メッセージ ストアは、コピーまたは移動されたメッセージの読み取りレポートを生成する責任を負いません。 IMAPIFolder::CopyMessages を実装するために IMAPISupport::CopyMessages を呼び出す場合は、SetReadFlags を呼び出さないでください。MAPI はそれを呼び出します。
実装では、任意の順序でメッセージを移動またはコピーし、任意の順序で読み取り状態レポートを生成できます。 つまり、読み取り状態レポートを生成する前にメッセージのコピーを完了するか、実装でコピー操作を開始する前にレポートを送信できます。 ただし、コピーが成功したかどうかに関係なく、すべてのメッセージをコピーするために読み取りレポートを送信する必要があります。
コピーまたは移動操作に複数のメッセージが含まれる場合は、可能な限り完全に操作を実行します。 メモリ不足、ディスク領域の不足、メッセージ ストアの破損など、制御できないエラーが発生しない限り、操作を途中で停止しないでください。
移動操作またはコピー操作の間でエントリ識別子を維持してみてください。 また、エントリ識別子は保持する必要がありますが、必須ではありません。
メッセージの IMAPIProp::SaveChanges メソッドへの呼び出しが失敗する可能性があることをクライアントが事前に確認できるように、メッセージを移動またはコピーするときに通知を送信します。
コピー操作または移動操作にメッセージの状態を含めないでください。 メッセージの状態を移動またはコピーすると、パフォーマンスに大きく影響します。
呼び出し側への注意
IMAPIFolder::CopyMessages を使用して検索結果フォルダーを設定します。メッセージは親フォルダーによってグループ化されることが多いです。
これらの戻り値は、次の条件で想定します。
Condition | 戻り値 |
---|---|
IMAPIFolder::CopyMessages は、すべてのメッセージを正常にコピーまたは移動しました。 | S_OK |
IMAPIFolder::CopyMessages では、すべてのメッセージを正常にコピーまたは移動できませんでした。 | MAPI_W_PARTIAL_COMPLETION |
IMAPIFolder::CopyMessages を 完了できませんでした。 | エラー値 |
IMAPIFolder::CopyMessages が完了できない場合は、作業が行われなかったと想定しないでください。 IMAPIFolder::CopyMessages は、エラーが発生する前に、1 つ以上のメッセージをコピーまたは移動できた可能性があります。