C# Outlook 加载项 - 确定所选电子邮件的 EWS 项目 ID

C# Outlook AddIn - Determine EWS Item ID for the selected Email

是否可以确定 MailItem(活动资源管理器中的选定项目)的 Exchange Server ItemID?我正在处理的解决方案有一个 Outlook AddIn 组件和另一个通过 EWS 访问邮件项目的组件。

我的 Outlook 插件中有类似于以下的代码:

Outlook.Explorer ActiveExplorer = Globals.ThisAddIn.Application.ActiveExplorer();
object selectedItem = ActiveExplorer.Selection[1];
Outlook.MailItem selectedEmail = selectedItem as Outlook.MailItem;

通过这种方式,我可以访问电子邮件的某些属性,但重要的是 属性 值与 EWS 返回的值完全相同,这对整个解决方案的工作非常重要。例如,如果 属性 返回一个时间,那么时间精确到毫秒就很重要了。

如果我有 ItemID,我可以绑定到 Item 并使用它(从插件中)使用类似下面的东西。

Item myItem = Item.Bind(MyExchangeService, MyItemID);

一时兴起,我尝试绑定到 MailItem.EntryID,但我收到了格式错误的 ID 错误(这并不让我感到惊讶)。我一直在尝试确定 Exchange ID 是否可以通过 MailItem.PropertyAccessor.GetProperty 获得,但我并不真正熟悉以这种方式访问​​属性,并且到目前为止还没有任何运气。

想法?

我遇到了以下 Stack Overflow post,它并没有完全回答我的问题,而是将我的注意力转移到 converting the EntryID into EWS ID 而不是寻找EWS ID。

Exchange ItemID differs from GlobalAppointmentID for Outlook AddIn

通过这个新角度,我找到了以下直接解决我问题的网站。

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

我已经 post 完整地编辑了这里的代码,以防 link 被破坏。

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