我尝试将邮件项目从一个邮箱复制到另一个邮箱,但是当我使用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)
}
但速度要慢得多,如果我有子文件夹,需要特别注意额外的代码,
在没有找到解决方案的情况下搜索网页 任何帮助表示赞赏
答案 0 :(得分:0)
这是预期的 - 如果已存在具有相同名称的现有文件夹,MAPI将返回MAPI_E_COLLISION - 请参阅IMAPIFolder::CopyFolder。
Outlook检测到该错误并创建一个具有唯一名称的文件夹。
您可以使用IMAPIFolder.CopyMessages批量复制项目,但扩展MAPI需要C ++或Delphi。如果使用Redemption是一个选项,则可以使用其RDOItems.CopyMultiple方法。您可以使用RDOItems。MAPITable.ExecSQL从源文件夹创建一个条目ID数组,并将其传递给RDOItems.CopyMultiple。