【问题标题】:Tried to move mails from Inbox to PST, but they vanished试图将邮件从收件箱移动到 PST,但它们消失了
【发布时间】:2021-03-06 13:56:36
【问题描述】:

我编写了一个简单的脚本,旨在将收件箱、存档和发送的邮件备份到附加的 PST 数据文件中。

它似乎工作正常:脚本从我的电子邮件帐户中找到了源文件夹,它在附加的 PST 上找到了目标文件夹,它找到了要备份的邮件(即我已经深入检查了 $namespace 对象)。

当我重新打开 Outlook 客户端时,我遇到了一个令人不快的意外。正如预期的那样,我的邮件没有存储在我的电子邮件帐户中,但它们都没有出现在我附加的 PST 中

发生了什么事???

编辑:或者,您能否向我建议有关 Powershell 的 Outlook MAPI 的任何文档?谷歌返回给我的结果很差

$outlook = New-Object -ComObject Outlook.Application
$namespace = $outlook.GetNameSpace("MAPI")

$SourceDest = [ordered]@{}
$SourceDest['Inbox'] = 'PSTfolder1'
$SourceDest['Archive'] = 'PSTfolder2'
$SourceDest['Sent'] = 'PSTfolder3'

foreach ($from_folder in $SourceDest.Keys) {
    $to_folder = $SourceDest[$from_folder]
    $Source = $namespace.Folders['mymail@account.com'].Folders[$from_folder]
    $Dest = $namespace.Folders['myPST'].Folders[$to_folder]
    $Messages = $Source.Items
    foreach ($msg in $Messages) {
        [void]$msg.Move($Dest)
    }
}

【问题讨论】:

  • 我的个人案例研究的一些附加信息: 1. 电子邮件帐户是 Office365 帐户,属于我的公司。 2. PST 文件是本地的,我将其用于备份目的 3. 脚本工作正常,它不返回任何错误,我可以用一些断点调试它吗?

标签: powershell email outlook pst


【解决方案1】:

执行脚本时 Outlook 是否正在运行?您看到电子邮件被移动了吗?

请记住,Move 是一个返回新项目的函数,它不返回 void。这对你的情况并不重要。

重要的是您正在修改集合(因为Move 删除了原始集合),因为您正在循环访问它的项目。使用从 Items.Count 到 1 的反向循环。

【讨论】:

  • 在运行脚本之前必须关闭Outlook客户端,否则会出现错误消息(我发现这是由于在创建对象期间通过脚本提升了运行Outlook)。如果我很好理解 Move 方法返回选定的邮件,那么我必须收集邮件并将其重定向到目标目标文件夹。这是正确的吗?我怎样才能完成这样的任务?
  • 为什么您的脚本以提升的权限运行?至于 Move,没有理由“重定向”任何东西 - Move 返回新对象,以防您需要对目标文件夹中新创建的项目执行某些操作。或者你可以忽略返回值
猜你喜欢
  • 2018-06-08
  • 2014-06-18
  • 2021-03-09
  • 2010-12-27
  • 2020-03-10
  • 2012-11-27
  • 1970-01-01
  • 2013-09-24
  • 1970-01-01
相关资源
最近更新 更多