1

メール アイテムをあるメールボックスから別のメールボックスにコピーしようとしていますが、Folder.Copy メソッドを使用して 1 つのメールボックスの受信トレイ フォルダーを別のメールボックスにコピーすると、データは結合されず、Inbox1 という名前のフォルダーが作成されます。

これが私のコードです:

$outlook = New-Object -ComObject outlook.application
$namespace  = $Outlook.GetNameSpace("mapi")
$namespace.Logon("Outlook")

$LocalStore = $Namespace.Stores[3]
$RemoteStore = $Namespace.Stores[1]

$LocalFolders = $LocalStore.GetRootFolder().folders
$RemoteFolders = $RemoteStore.GetRootFolder().folders

$RemoteInbox = $RemoteFolders | ? {$_.Name -eq "Inbox"}
$LocalInbox = $LocalFolders | ? {$_.Name -eq "Inbox"}

$RemoteInbox.CopyTo($LocalInbox.Parent)

回避策として、Items Copy を使用できます。

Foreach ($Item in $RemoteInbox.Items)
{
$Copy = $Item.Copy()
[void]$Copy.Move($TargetFolder)
}

しかし、それははるかに遅く、サブフォルダーがある場合は、追加のコードで特別な注意が必要です。

解決策が見つからない Web を検索する

4

1 に答える 1

0

これは予想されることです - 同じ名前の既存のフォルダが既に存在する場合、MAPI は MAPI_E_COLLISION を返します - IMAPIFolder::CopyFolderを参照してください。

Outlook はそのエラーを検出し、一意の名前のフォルダーを作成します。

IMAPIFolder.CopyMessagesを使用してアイテムをバッチでコピーできますが、拡張 MAPI には C++ または Delphi が必要です。Redemptionを使用するオプションがある場合は、そのRDOItems.CopyMultipleメソッドを使用できます。RDOItems を使用して、ソース フォルダーからエントリ ID の配列を作成できます。MAPITable.ExecSQLを作成し、RDOItems.CopyMultiple に渡します。

于 2015-07-22T22:20:39.120 に答える