【问题标题】:Outlook 2010 autocomplete stream ( cached contacts)Outlook 2010 自动完成流(缓存的联系人)
【发布时间】:2023-04-02 13:25:01
【问题描述】:

我目前正在尝试开发一个 Outlook 插件。为了实现非功能性要求,我需要访问存储在 .nk2 文件中的 Outlook 缓存联系人。我参考了这个post,但不知道该怎么做。

已编辑(答案):

Microsoft.Office.Interop.Outlook.Application oApp = Globals.ThisAddIn.Application;
        Microsoft.Office.Interop.Outlook.MAPIFolder inboxFolder = oApp.GetNamespace("MAPI").GetDefaultFolder(OlDefaultFolders.olFolderInbox);

        StorageItem storage = inboxFolder.GetStorage("IPM.Configuration.Autocomplete", OlStorageIdentifierType.olIdentifyByMessageClass);

        //IPM.Configuration.Autocomplete

        PropertyAccessor propertyAcc = storage.PropertyAccessor;

        byte[] got = propertyAcc.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x7C090102");

目前我被困在访问字节数组中,当我访问数组时,值与post中提到的不同

【问题讨论】:

  • 欢迎来到Stack Overflow。您能告诉我们您在阅读文章的哪些部分时遇到了困难吗?你看过the new Outlook 2010 MAPI Reference吗?您是否在寻找代码示例。
  • mm 没有查看新的 Outlook 2010 MAPI 参考。我被困在@访问 MAPI 属性 PidTagRoamingBinary 中,该属性位于邮件帐户传递存储的收件箱的关联内容表中的隐藏消息。

标签: c# autocomplete outlook


【解决方案1】:
Microsoft.Office.Interop.Outlook.Application oApp = Globals.ThisAddIn.Application;
Microsoft.Office.Interop.Outlook.MAPIFolder inboxFolder = oApp.GetNamespace("MAPI").GetDefaultFolder(OlDefaultFolders.olFolderInbox);

StorageItem storage = inboxFolder.GetStorage("IPM.Configuration.Autocomplete", OlStorageIdentifierType.olIdentifyByMessageClass);

PropertyAccessor propertyAcc = storage.PropertyAccessor;

byte[] got = propertyAcc.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x7C090102");

使用描述here 访问byte[] 中的字段。我完成了它工作正常的代码。您只需遍历每个字节并在访问时检查数据类型。

【讨论】:

    【解决方案2】:

    编辑:

    你可以使用对象而不是字节数组吗(如果这不起作用,在调试期间将鼠标悬停在GetProperty 上,看看它期望的返回类型)。例如:

    Dim objPropAcc As Outlook.PropertyAccessor    
    Dim result As Object
    objPropAcc = BindingStorageItem.PropertyAccessor
    result = objPropAcc.GetProperty("http://schemas.microsoft.com/mapi/id/{00062040-0000-0000-C000-000000000046}/8A48001E").ToString();
    

    参考:how to get a sharepoint calendar url from outlook?

    旧:

    这是一篇 Microsoft 知识库文章 How to import .nk2 files into Outlook 2010

    Outlook 2007 和 2010 与昵称缓存交互,也称为 “自动完成流”。自动完成流是 Outlook 持久化自动完成列表,这是名称的列表 用户撰写时显示在“收件人”、“抄送”和“密件抄送”编辑框中 一封电邮。 This topic here 描述 Outlook 2007 和 Outlook 2010 如何与自动完成交互 流,还讨论了文件的二进制格式和 与自动完成流交互的推荐方式。

    还可以在这里查看一些示例:http://ol2010mapisamples.codeplex.com/,我认为这个 codeplex 项目由 MAPI expert Stephen Griffin 运行。

    【讨论】:

    • 我正在阅读您链接到的 pdf,但我看不到您将 byte[] 作为 GetProperty 方法的返回类型。你能看到我的编辑吗,我在 msdn 上找到了一篇文章,其中包含一些非常好的代码 sn-ps 应该可以帮助你克服这个障碍。
    • 嗯,我实际上正在将 GetProperty 方法返回的对象转换为字节 []。调试时,我可以看到返回的 byte[] 和里面的值。但是当我逐字节访问它时,值是不同的,因为它们在帖子stephengriffin.members.winisp.net/nk2/NK2WithBinaryExample.pdf 中有所描述
    • 我按照我开始的方式完成了代码。它工作正常,我可以访问所有缓存的联系人。只是需要更多的承诺来访问每个字节并通过循环检查它,感谢大家的帮助:)
    【解决方案3】:

    除了解析原始流之外,您还可以使用 Redemption 及其 RDONicknames 对象 - 它可以访问文件 (NK2) 和基于存储的昵称。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-07
      • 2012-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多