0

複数の PST を 1 つの新しい PST にコピーするスタンドアロン プログラムを作成しています。メールが重複している場合は、全部ではなく1部だけお願いします。

現状では、私のコードは次のとおりです。

if (item is Outlook.MailItem)
{
    Outlook.MailItem i = item as Outlook.MailItem;
    Outlook.MailItem iCopy = i.Copy();
    iCopy.Move(targetMAPIFolder);
}

Outlook では、[ファイル] > [開く] > [インポート] > [別のプログラムまたはファイルからインポート] > [Outlook データ ファイル] > [重複をインポートしたアイテムで置き換える] を選択して、目的の結果を手動で作成できます。

ご協力いただきありがとうございます!

4

2 に答える 2

2

Outlook オブジェクト モデルには、重複をチェックするためのプロパティやメソッドはありません。特定のアイテムをコピーする必要があるかどうかを判断するには、アイテムのプロパティを比較する必要があります。重複を見つけるには、Items クラスの Find/FindNext または Restrict メソッドを使用することをお勧めします。また、Application クラスのAdvancedSearchメソッドの使用を検討することもできます。Outlook で AdvancedSearch メソッドを使用する主な利点は次のとおりです。

  • 検索は別のスレッドで実行されます。AdvancedSearch メソッドはバックグラウンドでスレッドを自動的に実行するため、別のスレッドを手動で実行する必要はありません。
  • メール、予定、カレンダー、メモなど、特定のフォルダの範囲を超えて任意の場所にある任意のアイテム タイプを検索する可能性。Restrict および Find/FindNext メソッドは、特定の Items コレクションに適用できます (Outlook の Folder クラスの Items プロパティを参照してください)。
  • DASL クエリの完全なサポート (カスタム プロパティも検索に使用できます)。詳細については、MSDNのフィルタリングの記事を参照してください。検索パフォーマンスを向上させるために、ストアでインスタント検索が有効になっている場合は、インスタント検索キーワードを使用できます (Store クラスの IsInstantSearchEnabled プロパティを参照してください)。
  • 最後に、Search クラスの Stop メソッドを使用して、いつでも検索プロセスを停止できます。

これらの方法の詳細については、次の記事を参照してください。

次のコードは使用しないでください。

var duplicateItem = (
   from email in
   emailFolder.Items.OfType<MailItem>()

とても遅くなります...

于 2015-09-15T15:50:47.747 に答える