由于各种原因,我需要将几百万封电子邮件从一个归档解决方案迁移到另一个。从解决方案 A 中获取数据的唯一方法是使用专有实用程序转储单个 .MSG 文件。我已经编写了此脚本,它运行良好。要将这些 .MSG 文件放入解决方案 B,需要将它们添加到 Exchange 邮箱中,然后解决方案 B 会定期(每小时)抓取该邮箱。我也编写了此脚本。不幸的是,我遇到了一个非常特殊的问题。从解决方案 A 转储出的每个 .MSG 文件在正文中都有标头信息,并且原始电子邮件作为附件包含在内,并且保留了所有元数据。这完全没问题,但是我的脚本似乎删除了一定比例的附件。有趣的是,如果我在缓存交换模式下运行 Outlook,我不会遇到此问题(但当 Outlook 必须同步数以万计的电子邮件时,会出现许多其他问题。当我禁用缓存交换模式时,它会开始删除附件。
该脚本相当长(350 行),但我已隔离附件丢失的点。为了便于理解,该脚本的作用是获取目录树中的 .MSG 文件列表,然后逐个导入它们,直到收件箱中有 30,000 封电子邮件。然后,它会等待抓取运行并清除收件箱,然后再重新开始。
断裂点就在这两条线之间。
$olMailItem = $NameSpace.OpenSharedItem($msg)
[void]$olMailItem.Move($objNewFolder)
如果我打印出$olMailItem.Attachments
第一行之后的内容,它总是返回值 1。如果我打印出第二行之后的内容,对于同一组电子邮件,它会定期返回值 0。我将其解释为文件已正确打开,但将其放入交换中的过程导致某些附件丢失。我在 Google 上找不到任何与我有同样问题的人。而且,当我启用缓存交换模式时,这个问题似乎不会发生(但导致我处理一系列更糟糕的问题)。我搜索了 MSDN Outlook 开发人员参考,但我找不到任何明显错误的内容。希望这里有人可以提供一些关于可能导致它的原因的见解。