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

时间:2017-05-24 20:28:07

标签: c# outlook vsto office-interop

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

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

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

非常感谢您的任何线索。

2 个答案:

答案 0 :(得分:0)

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

EntryID:https://msdn.microsoft.com/en-us/library/office/ff866458.aspx

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

答案 1 :(得分:0)

在获得一些其他帖子的线索之后,似乎我正在寻找的是“将VSTO EntryID转换为EWS ID”(至少这是我用Google搜索的内容: - )。

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

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;
}