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

时间:2017-03-13 20:42:44

标签: c# outlook-addin exchangewebservices exchange-server-2010

是否可以确定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错误(这并没有让我感到惊讶)。我一直在尝试通过MailItem.PropertyAccessor.GetProperty确定Exchange ID是否可用,但我并不熟悉以这种方式访问​​属性并且到目前为止还没有运气。

思想?

1 个答案:

答案 0 :(得分:2)

我遇到了以下Stack Overflow帖子,该帖子没有完全回答我的问题,但我将注意力转移到 EntryID转换为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/

我已经完整地发布了这里的代码,以防链接被破坏。

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