使用Interop.outlook和ews

时间:2017-03-27 12:14:50

标签: c# outlook interop exchangewebservices

我正在使用EWS搜索和显示电子邮件。但是,该项目的最后一步是将特定消息保存为文件系统上的.msg文件。我知道这对EWS来说是不可能的,所以我需要使用Interop.Outlook来实现这一目标。我的问题是:根据EWS提供的信息,找到Outlook消息的最佳方法是什么。我试图将通过EWS交换获得的Message.Id和ConversationId与Outlook的messageId相关联,但到目前为止还没有成功。

以下是我当前(失败的)代码,用于查找ConversationID:

 OUTLOOK.Application olApp = new OUTLOOK.Application();
        OUTLOOK.NameSpace olNS = olApp.GetNamespace("MAPI");
        OUTLOOK.MAPIFolder oFolder = olNS.GetDefaultFolder(OUTLOOK.OlDefaultFolders.olFolderInbox);
        OUTLOOK.Items oItems = oFolder.Items;
        String sFilter = string.Format("@SQL=\"http://schemas.microsoft.com/mapi/proptag/0x1035001F\" = '{0}'", missive.ConversationID.UniqueId);
        object obj = oItems.Find(sFilter);
        OUTLOOK.MailItem oEmail = (OUTLOOK.MailItem)obj;
        if (oEmail != null)
        {
            return oEmail;
        }
        else
        {
            throw new Exception("MAIL ITEM NOT IN OUTLOOK");
        } 

作为一方:我正在寻找Outlookd过滤器的参考,这是[property] = value版本的属性名称;以及与@SQL版本一起使用的十六进制值。有人有一个很好的参考链接吗?

1 个答案:

答案 0 :(得分:1)

您可以使用ConvertIdType请求;见:https://msdn.microsoft.com/en-us/library/office/bb856559(v=exchg.140).aspx

有关MAPI属性及其DASL名称和属性标记值的列表,请参阅:https://msdn.microsoft.com/en-us/library/office/cc815517.aspx。虽然Outlook Spy也是一个很好的工具。