我有一个脚本应该从“收件箱”下载所有附件,然后将它们移动到另一个名为“已处理”的文件夹。我按主题过滤邮件。如果存在,则下载所有附件并移动邮件。 例如,我有5封带附件的邮件(xls),主题名称如下:
BB_asd_green_dsa AD_acv_blue_sf FD__c_d_red_sa CV_saas_white_sdsd as_dc_asa_purple
当我启动脚本时,它会保存3个附件,带有附件的邮件也会被移动。然后就停止了。
第二次开始。它节省了1个附件和移动1个邮件
最后一个手动启动脚本会保存最后一个附件并移动邮件。
为什么脚本不保存并用邮件移动所有附件?
这是脚本:
$olFolderInbox = 6
$outlook = New-Object -Com Outlook.Application;
$ns = $outlook.GetNameSpace("MAPI");
#$ns.Logon("Outlook")
#$ns.SendAndReceive($true)
#Start-Sleep -s 0
$inbox = $ns.GetDefaultFolder($olFolderInbox)
$messages = $inbox.Items
Write-Host $messages.Count
foreach ($message in $messages) {
$msubject = $message.Subject
$b = $msubject.Filename
$filepath = "D:\Users\h.yordanov\Desktop\convertexltohtm\xls\"
$message.Attachments | foreach{
Write-Host $message.Filename
$a = $_.Filename
$msubject = $message.Subject
$msubjectW = $msubject -replace '[^0-9]', ''
$b = $msubjectW + ".xls"
if ($msubject.Contains("green") -or $msubject.Contains("blue") -or $msubject.Contains("green") -or $msubject.Contains("white") -or $msubject.Contains("purple")) {
$_.SaveAsFile((Join-Path $filepath $b))
}
}
$MoveTarget = $inbox.Folders.Item("Processed")
[void]$message.Move($MoveTarget)
}
我使用此脚本移动邮件,但仍然不是所有5个邮件都被移动:
$Date = [DateTime]::Now.AddDays(-180)
$Last6Months = $Date.tostring("MM/dd/yyyy")
$o = New-Object -comobject outlook.application
$n = $o.GetNamespace(“MAPI”)
$Account = $n.Folders | ? { $_.Name -eq 'h.yordanov@sample.com' };
$Inbox = $Account.Folders | ? { $_.Name -match 'Inbox' };
$TargetFolder = $Inbox.Folders.Item('Processed')
$Inbox.Items |
Where-Object -FilterScript {
$_.senton -ge "$Last6Months"
} |
ForEach-Object -Process {
[void]$psitem.Move($TargetFolder)
}
顺便说一下,我正在使用MS Office Pro和2010 64位