none
請問 未讀郵件設定為已讀郵件 但 foreach 每次只能處理一半的結果. RRS feed

  • 問題

  • 因為我要把處理過的郵件標記為已讀

    若加上$MailItem.Unread = $False 後foreach 每次只能處理一半的結果.

    舉例來說若是有20封未讀取信件程序運行第一次變10封 第二次5封 不能一次處理好

    但是若是槓掉$MailItem.Unread = $False這行不把它邊標記為以讀取

    改用write-host測試 Foreach的確有正確的抓到每一封未讀信件

    只是加上去$MailItem.Unread = $False後他又指跑一半了

    請幫忙該改除錯 謝謝!!

    $outlook = New-Object -Com Outlook.Application   ## this code is very slow when its running in batch
    $ns = $outlook.GetNameSpace('MAPI')
    $inbox = ($ns.GetDefaultFolder(6)).Items.Restrict("[Unread]=true") # 6 for Default Inbox
    #$pstInBox = $ns.Folders.Item('mail').Folders.Item('收件匣')
    
    #$inbox = $pstInBox.Items.Restrict("[Unread]=true")
    $unreadCount = $inbox.Count
    $unreadCount
    $process = 0
    
    Function ProcessUnRead
    {
      foreach ($MailItem in $inbox)
       {
        Start-Sleep 1
        $MailItem.Unread = $False 
       } 
    }
    
    
    
    if( $unreadCount -ne $process)
    {
    . ProcessUnRead
    }
    


    2014年4月3日 上午 08:20

所有回覆

  • 查不出原因

    只好給她家個迴圈直到掃完 為止了

    do 
    {
    $inbox = ($ns.GetDefaultFolder(6)).Items.Restrict("[Unread]=true") 
    $unreadCount = $inbox.Count
    $unreadCount
    . ProcessUnRead
    }
    until ($process -eq $unreadCount)

    2014年4月15日 下午 03:39