如何在 Outlook 插件 (VSTO) 中获取原始 (Exchange) 文件夹 UniqueID?



在花了几个小时试图得到我问题的答案后,我决定是时候问一个关于SO的问题了,因为也许有人知道我可以从哪个MAPI属性获得此信息。

但是让我们从头开始 - 我正在用 C# 为 Outlook 2013/2016 编写一个 VSTO 插件; 在这个插件的某个地方,我正在获取当前存储中的文件夹列表,一切正常 - 对于每个文件夹,我都有一个条目 ID 和其他属性; 我最大的问题是 - 如何为文件夹或项目(电子邮件)获取该项目在服务器上的原始 ID(对于人)使用 EWS 的人是文件夹的 FolderId.UniqueId ) - 此信息很可能驻留在可以使用 PropertyAccessor 访问的 MAPI 隐藏属性中的某个位置。

从我目前所读到的内容来看,有几千个 MAPI 属性可用于 Outlook 项目/文件夹,但我不知道哪些是与 Exchange 相关的属性。

非常感谢您的任何线索。

你的意思是为每个来自Exchange Server的项目使用唯一的ID,而不是来自本地Outlook应用程序。您可以考虑使用

条目 ID: https://msdn.microsoft.com/en-us/library/office/ff866458.aspx

我试图发表评论,但随着公司合并,我们搬到了一个新的域,我有一个新的电子邮件地址,这里有一个新的ID,声誉又从零开始!

在其他一些帖子中获得一些线索后,似乎我正在寻找的被称为"将 VSTO EntryID 转换为 EWS ID"(至少这是我用谷歌搜索的:-)。

长话短说,我在多个网站上找到了解决方案,但可以在此处找到正确的解决方案:

https://bernhardelbl.wordpress.com/2013/04/15/converting-entryid-to-ewsid-using-exchange-web-services-ews/

简而言之,此操作似乎与我认为的有所不同 - 我正在寻找的这个 EWS ID 不驻留在 Outlook 项目中;为了获得它,您必须调用 EWS,您将获得来自服务器的响应:

string ConvertHexEntryIdToEwsId(ExchangeService esb, string sID, string strSMTPAdd)
{
AlternateId objAltID = new AlternateId();
objAltID.Format = IdFormat.HexEntryId;
objAltID.Mailbox = strSMTPAdd;
objAltID.UniqueId = sID;
AlternateIdBase objAltIDBase = esb.ConvertId(objAltID, IdFormat.EwsId);
AlternateId objAltIDResp = (AlternateId)objAltIDBase;
return objAltIDResp.UniqueId;
}

最新更新