保存邮件中的所有附件

时间:2017-12-14 08:02:02

标签: powershell email outlook

我有一个脚本应该从“收件箱”下载所有附件,然后将它们移动到另一个名为“已处理”的文件夹。我按主题过滤邮件。如果存在,则下载所有附件并移动邮件。 例如,我有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位

0 个答案:

没有答案