无法在Outlook加载项中创建StorageItem

时间:2015-10-22 13:59:28

标签: c# outlook outlook-addin

我试图运行此代码:

this.storage =
            Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderContacts)
           .GetStorage("ws_up_storage", Outlook.OlStorageIdentifierType.olIdentifyByMessageClass);

它在某些机器上运行得非常好,但在其他机器上却抛出了这个例外:

enter image description here

我还尝试了其他文件夹名称,例如olFolderInboxolFolderCalendar。我已经为此查看了Microsoft文档,并且如果该文件夹是以下之一,则表示会出现此错误:

  • 该文件夹是Microsoft Exchange公用文件夹,Internet邮件访问协议(IMAP),MSN Hotmail或Microsoft SharePoint Foundation文件夹。
  • 该文件夹的用户权限是只读的。
  • 商店提供商不支持隐藏商品。

可悲的事实是,我不知道如何检查这些中的哪一个是真的,以及它是否可能。

我如何确定问题的原因并解决问题?

2 个答案:

答案 0 :(得分:2)

错误0x80040102是MAPI_E_NO_SUPPORT,这意味着商店不支持隐藏(关联)项。

使用PropertyAccessor.GetProperty读取PR_MDB_PROVIDER属性(DASL名称http://schemas.microsoft.com/mapi/proptag/0x34140102)。返回的16字节数组将特定于每种商店类型。例如。对于Exchange存储,它将是pbExchangeProviderPrimaryUserGuid(5494A1C0297F101BA58708002B2A2517)。使用OutlookSpy(单击IMessage,IMAPIFolder或IMsgStore)查看相关商店中的任何对象,以查看PR_MDB_PROVIDER属性。

答案 1 :(得分:0)

处理所有这些情况的最简单方法是尝试获取存储空间。您需要付出很多努力来实施所有案例。 PR_MDB_PROVIDER属性允许识别商店提供商,但不是所有情况,例如文件夹的用户权限等。您可以使用try / catch块检查错误代码 - 0x80040102(MAPI_E_NO_SUPPORT)。

但是,您可以使用任何低级属性查看器(例如,免费的开源工具 - MFCMAPI)来探索扩展MAPI属性值。因此,您可能会发现所有必需的信息都不受支持。