2012-12-18 41 views
2

我想從我的C#winforms應用程序中打開Outlook中的特定電子郵件。在C#中打開Outlook中的特定郵件項目#

目前我有以下代碼:

//...Get Folder & Entry ID for last Email in Sent Box 

Outlook.Application myApp = new Outlook.ApplicationClass(); 
Outlook.NameSpace mapiNameSpace = myApp.GetNamespace("MAPI"); 
Outlook.MAPIFolder mySentBox = mapiNameSpace.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderSentMail);     
Outlook.MailItem myMail = ((Outlook.MailItem)mySentBox.Items[1]); 
string guid = myMail.EntryID; 
string folderEntryID = mySentBox.EntryID; 
string folderStoreID = mySentBox.StoreID; 
string mailAddressee = myMail.To; 
MessageBox.Show(mailAddressee); 

//...Attempt to Open that Email at a later date 

Outlook.MAPIFolder getFolder = (Outlook.MAPIFolder)mapiNameSpace.GetFolderFromID(folderEntryID, folderStoreID); 
Outlook.MailItem getItem = (Outlook.MailItem)getFolder.Items.Find("[EntryID] = " + guid); 
getItem.Display(); 

第一代碼的第二部分將在不同的時間運行,儘管它們在目前的測試方法相同。

第一部分從Outlook獲取mst最近發送的電子郵件的相關ID。這部分似乎工作正常,因爲我的內置Messagebox的證據。

然而,第二部分是不工作,我努力找到正確的代碼來訪問並打開該特定的mailItem已獲得其ID和文件夾位置在第一部分。

任何人都可以爲我完成這個小項目請。

回答

4

最後通過替換下面幾行代碼完成它。 。 。

Outlook.MAPIFolder getFolder = (Outlook.MAPIFolder)mapiNameSpace.GetFolderFromID(folderEntryID, folderStoreID); 
Outlook.MailItem getItem = (Outlook.MailItem)getFolder.Items.Find("[EntryID] = " + guid); 

與此。 。 。

Outlook.MailItem getItem = (Outlook.MailItem)mapiNameSpace.GetItemFromID(guid, folderStoreID); 
0

您不能使用EntryId_Items.Find方法。 MSDN的參考號是here

也有可能是對你的項目感興趣的一句話:

「當一個項目被移動到另一個存儲條目ID的變化, 例如,從收件箱到Microsoft Exchange服務器公用文件夾, 或從一個個人文件夾(.pst)文件到另一個.pst文件。 解決方案不應該依賴於EntryID屬性是唯一的 ,除非項目不會被移動。

MailItem.EntryID Property (Outlook)

+0

那麼如何搜索單個電子郵件。所有過濾標準可能會返回多個電子郵件。我有他的電子郵件的具體ID,當然有一種方法可以用它打開那一封電子郵件? – PJW

相關問題