1

我正在尝试将邮件项目从一个邮箱复制到另一个邮箱,但是当我使用 Folder.Copy 方法将一个邮箱的收件箱文件夹复制到另一个邮箱时,它不是合并数据而是创建名为 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)
}

但它要慢得多,如果我有子文件夹,则需要特别注意额外的代码,

在没有找到解决方案的情况下搜索网络 任何帮助表示赞赏

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 回答