2

我想从我的 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 获取最近发送的第一封电子邮件的相关 ID。这部分似乎可以很好地作为我内置的 Messagebox 的证据。

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

请任何能够为我完成这个小项目的人。

4

2 回答 2

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);
于 2012-12-18T12:01:43.233 回答
0

你不能使用EntryIdwith_Items.Find方法。MSDN 参考在这里

还有一句话可能对您的项目很有趣:

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

MailItem.EntryID 属性 (Outlook)

于 2012-12-18T11:50:54.107 回答