从C#在Outlook中打开特定的MailItem

我想从我的C#winforms应用程序中打开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的证据。

然而第二部分不起作用,我正在努力找到正确的代码来访问并打开在第一部分中获取其ID和文件夹位置的特定mailItem。

任何人都能为我完成这个小项目。

最后通过替换以下代码行完成它。 。 。

 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); 

您不能将EntryId_Items.Find方法一起使用。 MSDN参考在这里 。

还有一个可能对您的项目感兴趣的评论:

“当项目移动到另一个商店时,条目ID会更改,例如,从收件箱移动到Microsoft Exchange Server公用文件夹,或从一个个人文件夹(.pst)文件移动到另一个.pst文件。解决方案不应依赖于除非不移动项目,否则EntryID属性是唯一的。“

MailItem.EntryID属性(Outlook) 。