Outlook Interop Folder.CopyTo方法 - 合并收件箱

时间:2015-07-22 21:16:07

标签: powershell outlook com-interop comobject

我尝试将邮件项目从一个邮箱复制到另一个邮箱,但是当我使用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)

要解决方法,我可以使用项目复制:

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

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

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

1 个答案:

答案 0 :(得分:0)

这是预期的 - 如果已存在具有相同名称的现有文件夹,MAPI将返回MAPI_E_COLLISION - 请参阅IMAPIFolder::CopyFolder

Outlook检测到该错误并创建一个具有唯一名称的文件夹。

您可以使用IMAPIFolder.CopyMessages批量复制项目,但扩展MAPI需要C ++或Delphi。如果使用Redemption是一个选项,则可以使用其RDOItems.CopyMultiple方法。您可以使用RDOItems。MAPITable.ExecSQL从源文件夹创建一个条目ID数组,并将其传递给RDOItems.CopyMultiple。