CSharp - 打开一些 Outlook MailItems时出错,使用 Outlook spy 从中获取 GetItemFromID

  显示原文与译文双语对照的内容

使用OutlookSpy从特定文件夹中的MailItems获取EntryIDs并将它们提供给下面的代码时:


Outlook.Application myApp = new Outlook.ApplicationClass();
Outlook.NameSpace mapiNameSpace = myApp.GetNamespace("MAPI");

try
{
 object obj = mapiNameSpace.GetItemFromID(sEntryID);
 if (obj is Outlook.MailItem)
 {
 var getItem = (Outlook.MailItem)mapiNameSpace.GetItemFromID(sEntryID);
 getItem.Display();
 }
}
catch (Exception Ex)
{
 Global.Common.LogError("Error accessing MailItem", Ex,"EntryID" + sEntryID +" not found in" + sFolder,"Warning");
}

我获得了一些未知的消息错误,并且成功显示了 Outlook 中的消息和它的他。 任何人都可以建议MailItems可以能会有哪些属性会影响我能否使用GetItemFromID或者它的他方法可以靠地显示所有信息。

时间: 原作者:

感谢所有的受访者- 这解释了为什么有时特定的消息会打开,有时他们不会。 通过使用下面的代码获取 StoreId:


Outlook.Application myApp = new Outlook.ApplicationClass();
 Outlook.NameSpace mapiNameSpace = myApp.GetNamespace("MAPI");
 Object oStoreID = Common.GetFolder(myApp, sFolder).StoreID;
 try
 {
 object obj = mapiNameSpace.GetItemFromID(sEntryID,oStoreID);
 if (obj is Outlook.MailItem)
 {
 Outlook.MailItem getItem = (Outlook.MailItem)mapiNameSpace.GetItemFromID(sEntryID,oStoreID);
 getItem.Display();
 }
 }

火警的警铃在哪里?


 public static Outlook.Folder GetFolder(Outlook.Application App, string folderPath)
 {
 Outlook.Folder folder;
 string backslash = @"";
 try
 {
 if (folderPath.StartsWith(@""))
 {
 folderPath = folderPath.Remove(0, 2);
 }
 String[] folders =
 folderPath.Split(backslash.ToCharArray());
 folder =
 App.Session.Folders[folders[0]]
 as Outlook.Folder;
 if (folder!= null)
 {
 for (int i = 1; i <= folders.GetUpperBound(0); i++)
 {
 Outlook.Folders subFolders = folder.Folders;
 folder = subFolders[folders[i]]
 as Outlook.Folder;
 if (folder == null)
 {
 return null;
 }
 }
 }
 return folder;
 }
 catch { return null; }
 }

所有MailItems现在都显示在 Outlook 中。

原作者:
...