2014-04-08 21 views
0

我進入這個項目,其中推送到文件夾的電子郵件必須交叉檢查它是否到達。 因此,爲了達到這個目的,我使用了powershell腳本來連接郵件文件夾並收集數據。 代碼粘貼在下方。針對outlook郵箱的Powershell腳本正在選擇舊數據

Add-Type $class -ReferencedAssemblies Microsoft.Office.Interop.Outlook 
$class = @" 
using Microsoft.Office.Interop.Outlook;public class MyOL 
{ 
public MAPIFolder GetInbox(string userName) 
{ 
    Application oOutlook = new Application(); 
    NameSpace oNs = oOutlook.GetNamespace("MAPI"); 
    Recipient oRep = oNs.CreateRecipient(userName); 
    MAPIFolder inbox = oNs.GetSharedDefaultFolder(oRep, OlDefaultFolders.olFolderInbox); 
    return inbox; 
} 
} 
"@ 
    Add-Type $class -ReferencedAssemblies Microsoft.Office.Interop.Outlook 

$MyOL = New-Object MyOL 
$olInbox = $MyOL.GetInbox("mailbox") 

$olInbox.items | Select-Object -Property Subject, ReceivedTime, Importance, SenderName 

但是這個代碼僅一週收集舊的數據!而不是新鮮的電子郵件。我曾嘗試環顧四周,發現這可能與郵箱中的索引有關。所以,我試圖禁用,但徒勞無功。

+0

您是否嘗試過使用*** ReceivedTime ***進行過濾? – Kiquenet

回答

0

不確定爲什麼你不只使用ComObject for Outlook。如果你想最近的項目只有這應該讓你在過去24小時內收到的物品:

$MSOut = new-object -ComObject Outlook.Application 
$MAPI = $MSOut.GetNamespace("MAPI")|?{$_.SMTP -match "[email protected]"} 
$Account = $MAPI.Folders|?{$_.Name -match "[email protected]"} 
$Inbox = $Account.folders | ?{$_.Name -match "Inbox"} 
$24hours = (get-date).AddDays(-1) 
$RecentItems = $Inbox.Items|?{$_.ReceivedTime -gt $24hours} 

然後,你可以,如果你想只得到特定屬性對運行你的選擇,如:

$RecentItems | Select -Property Subject, ReceivedTime, Importance, SenderName 
+0

此代碼不適合我!我是PowerShell腳本的新手。這與sdk的版本有什麼關係? – user3300750

+0

你不應該需要一個SDK,只需安裝Office。你在哪裏得到錯誤? – TheMadTechnician

+0

我沒有收到你給我的代碼的任何錯誤(儘管如此,謝謝),但它也沒有檢索任何數據。我粘貼的代碼,當你執行它時,你會得到什麼輸出?它是否包含最新的電子郵件?如果確實如此,那就是它應該工作的方式。我得到的回報是一個星期的電子郵件列表:(即,當我在9日執行它時,我從第二個列表中獲得一個列表!) – user3300750

相關問題