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

时间:2012-12-18 11:16:08

标签: c# outlook-2010

我想在我的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。

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

2 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:0)

您无法将EntryId_Items.Find方法一起使用。 MSDN参考号为here

对于您的项目,还有一个可能有趣的评论:

  

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

     

MailItem.EntryID Property (Outlook)