メッセージまたはフォルダーのコピーまたは移動

適用対象: Outlook 2013 | Outlook 2016

クライアントは、次の 4 つの方法のいずれかを使用して、メッセージまたはフォルダーをコピーまたは移動できます。

適切なフラグとパラメーターを設定することで、 CopyToCopyPropsCopyFolderCopyMessages と同じように動作させることができます。 呼び出すメソッドを決定するときは、次の問題を考慮してください。

  • フォルダーまたはメッセージをコピーまたは移動していますか?

  • 移動またはコピーするフォルダーまたはメッセージについてどのくらい知っていますか?

  • 移動またはコピーされるフォルダーまたはメッセージのプロパティはいくつですか?

IMAPIProp メソッドを使用して、フォルダーまたはメッセージをコピーまたは移動できます。 IMAPIFolder::CopyMessages は メッセージでのみ機能します。 IMAPIFolder::CopyFolder は フォルダーでのみ機能します。

IMAPIFolder メソッドを使用する場合、フォルダーまたはメッセージでサポートされているプロパティの知識をコピーまたは移動する必要はありませんが、IMAPIProp メソッドを使用するには何らかの知識が必要です。 IMAPIProp::CopyProps では、コピーまたは移動するフォルダーまたはメッセージ プロパティを明示的に指定できる必要があります。 IMAPIProp::CopyTo では、すべてのプロパティをコピーまたは移動する場合を除き、除外するプロパティを明示的に指定する必要があります。 これらのメソッドの詳細については、「 MAPI プロパティのコピー」を参照してください。

コピーまたは移動するプロパティの数は、使用するメソッドに関する決定に影響する可能性があります。 複数のメッセージをコピーまたは移動する場合は、 IMAPIFolder::CopyMessages を呼び出します。 別の方法として、 IMAPIProp::CopyProps を呼び出して、フォルダーの PR_CONTAINER_CONTENTS (PidTagContainerContents) プロパティのみをコピーすることもできます。 次の手順では、 CopyMessages を使用する方法を示します。

1 つ以上のメッセージをコピーまたは移動するには

  1. ソース フォルダーとコピー先フォルダーの有効なエントリ識別子を見つけます。

  2. これらのフォルダーを読み取り/書き込みモードで開くには、 IMAPISession::OpenEntry または IMsgStore::OpenEntry を呼び出し、MAPI_MODIFY フラグを設定します。

  3. OpenEntry から返されるインターフェイス ポインターが IMAPIFolder インターフェイス ポインターであることを確認します。 それ以外の場合は、LPMAPIFOLDER 型にキャストします。

  4. コピーまたは移動する 1 つ以上のメッセージを表すエントリ識別子の配列を作成します。

  5. 次のフラグを設定して IMAPIFolder::CopyMessages を呼び出します。

    • 移動操作を実行する場合は、MESSAGE_MOVEします。

    • フォルダーに進行状況インジケーターを表示する場合は、 ulUIParam パラメーターにウィンドウ ハンドルをMESSAGE_DIALOGして渡します。

  6. ソース フォルダーとコピー先フォルダーの IMAPIFolder ポインターを解放します。

フォルダーの完全な内容を別のフォルダーにコピーする場合は、ソース フォルダーの IMAPIFolder::CopyFolder または IMAPIProp::CopyTo メソッドを 呼び出します。

フォルダーのプロパティをいくつかコピーするには、 IMAPIProp::CopyProps メソッドを 呼び出します。 フォルダーのプロパティの大部分をコピーするには、 IMAPIProp::CopyTo を呼び出します。

たとえば、フォルダーの PR_DISPLAY_NAME (PidTagDisplayName) と PR_COMMENT (PidTagComment) プロパティをコピーする場合は、次のオプションがあります。

  • IMAPIFolder::CopyFolder を呼び出して、すべてのフォルダー プロパティをコピーし、不要なものを新しいフォルダーから削除します。

  • CopyTo を呼び出し、PR_DISPLAY_NAMEとPR_COMMENTを除くすべてのフォルダーのプロパティを除外します。

  • CopyProps を呼び出し、include 配列にPR_DISPLAY_NAMEPR_COMMENTを渡します。

この場合、 CopyProps は、少数のプロパティセットをコピーするために使用され、実装するのが最も簡単な呼び出しであるため、最適な選択です。

メッセージを含めずにフォルダーのプロパティのみをコピーまたは移動するには、フォルダーの IMAPIProp::CopyTo メソッドを呼び出し、次のプロパティを除外します。

コピー メソッドは、合計成功、MAPI_W_PARTIAL_COMPLETION、部分的な成功、またはエラーを示すS_OKを返すことができます。 MAPI_W_PARTIAL_COMPLETIONが返された場合は、 HR_FAILED マクロを使用して、より具体的なエラーにアクセスします。 詳細については、「 エラー処理にマクロを使用する」を参照してください。

あるメッセージ ストアから別のメッセージ ストアにメッセージをコピーし、Unicode が両方でサポートされていない場合は、コード ページの変換によって情報が失われる可能性があることに注意してください。 通常、メッセージ ストアが一方または両方の形式をサポートしているかどうかはわかりません。そのため、テキスト プロパティを ASCII 文字列としてコピーするか、Unicode 文字列としてコピーするかを判断できません。 Unicode をサポートしている場合は、Unicode コピーを実行してみてください。エラー値がMAPI_E_BAD_CHARWIDTHで失敗した場合は、ASCII に頼ります。