以编程方式有效地移动电子邮件

时间:2017-06-21 21:30:32

标签: powershell email outlook

我正在编写一个脚本,将所有超过2周的阅读电子邮件移至单独的PST进行存档。一旦可以接受,我将通过规则执行它。

但是,我目前的代码需要很长时间才能完成(大约8分钟),而只需在Outlook中进行拖放即可快得多。

有没有人知道移动大量电子邮件的更好方法?也许通过访问Outlook的索引?

Add-Type -AssemblyName "Microsoft.Office.Interop.Outlook"

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

$Items=1

while ($Items -gt 0)
{
    $Items=0
    $SourceFolder = $Namespace.Folders.Item($SourcePSTName).Folders.Item($Folder)
    $TargetFolder = $Namespace.Folders.Item($TargetPSTName).Folders.Item($Folder)

    $AllOfDem=($SourceFolder.Items | where {$_.SentOn -lt $SentMaxDate -and $_.Unread -eq $False})
    foreach ($Mail in $AllOfDem)
    {
        $Mail.Move($TargetFolder) | Out-Null
        $Items++
    }
}

1 个答案:

答案 0 :(得分:2)

我怀疑你的问题并不是移动消息(可以使用扩展MAPI或Redemption在一次调用中移动所有消息进行优化),而是循环浏览文件夹中的所有项目 - 这是个大问题。

使用Items.Find/FindNextItems.Restrict来提供仅返回匹配项的查询,而不是循环。