0

我正在开发一个将插入 iManage FileSite 插件的 Outlook VSTO 插件,我目前正在尝试访问当前选择的文件夹 ID(在 DMS 中),我注意到 CurrentFolder.EntryID 属性包含一个非常大的十六进制字符串,当转换为 UTF-16 时,它看起来像是 iManage 的格式错误的 ObjectID。见下文(部分信息已编辑):

�"�j���'`�W�vp441!nrtdms:0:!session:REDACTED:!database:TEC:!page:440:??!nrtdms:0:!session:REDACTED:!database:TEC:!publicpagescontainer??!nrtdms:0:!session:REDACTED:!database:TEC:??!nrtdms:0:!session:REDACTED:!explorercontainer??!nrtdms:0:!session:REDACTED:??!nrtmsg:neighborhood:??!nrtmsg:root:

我一直在研究一些正则表达式来将文件夹 ID 与字符串的其余部分分开,但我不禁认为有一个更稳定的方法。

有人有想法么?

4

2 回答 2

1

MSDN 中描述了ENTRYID标识符结构。消息存储和地址簿提供者使用该ENTRYID结构为其对象构造唯一标识符。

成员

  • abFlags - 提供描述对象信息的标志位掩码。只有标志的第一个字节 abFlags[0] 可以由提供者设置;其他三个保留。不得为永久条目标识符设置这些标志;它们仅用于短期条目标识符。对于客户来说,这个结构是只读的。可以在 abFlags[0] 中设置以下标志:

    • MAPI_NOTRECIP - 条目标识符不能用作消息的收件人。
    • MAPI_NOTRESERVED - 其他用户无法访问条目标识符。
    • MAPI_NOW - 条目标识符不能在其他时间使用。
    • MAPI_SHORTTERM - 条目标识符是短期的。除非启用条目标识符的其他用途,否则必须设置此字节中的所有其他值。
    • MAPI_THISSESSION - 条目标识符不能用于其他会话。
  • ab - 表示服务提供者使用的二进制数据数组。客户端应用程序无法使用此数组。

您可以使用PropertyAccessor.StringToBinary方法将字符串转换为二进制数据,该方法将 Value 指定的字符串转换为字节数组。有关使用PropertyAccessor对象时类型转换的更多信息,请参阅获取和设置属性的最佳实践

于 2019-03-13T12:53:01.070 回答
0

除了@Eugene Astafiev 的回答外,还记录了一些条目ID 的格式。解析 PST、Exchange 和 GAL 条目 ID 相当容易。

使用MFCMAPIOutlookSpy查看条目 ID 。这是 OutlookSpy 在缓存的 Exchange 存储中为消息 PR_ENTRYID 显示的内容(单击 IMessage 按钮,选择 PR_ENTRYID 属性):

abFlags[0]: 00
abFlags[1]: 00
abFlags[2]: 00
abFlags[3]: 00
muid: 5E81754F003E1549B0659F2AEA92E7C2 ({4F75815E-3E00-4915-B065-9F2AEA92E7C2})
Type: 0x0007 (eitLTPrivateMessage)
FolderDatabaseGUID: C7CF2304C77BF64585E8892DD6FF7BAC ({0423CFC7-7BC7-45F6-85E8-892DD6FF7BAC})
FolderGlobalCounter: 0xCAA69A1A0000
Pad1: 0x0000
MessageDatabaseGUID: 4A7CE85ED1AB274C9E20AA3CBFA828B1 ({5EE87C4A-ABD1-4C27-9E20-AA3CBFA828B1})
MessageGlobalCounter: 0x70A650D90100
Pad2: 0x0000
于 2019-03-13T17:29:04.897 回答