我想在我的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。
任何人都可以为我完成这个小项目。
答案 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属性是唯一的 除非物品不会被移动。“