使用EWS和Exchange 2007通过对话实现Outlook 2010的组

时间:2011-09-20 15:17:01

标签: c# outlook exchange-server exchangewebservices exchange-server-2007

我们正在使用EWS在我们的某些邮箱上生成一些分析。

部分内容是获取对话的计数/名称/开始/结束。对话类似于Outlook 2010在按对话分组时显示的方式。

我希望能够使用ConversationId对项目进行分组,但这似乎只是Exchange 2010的功能。

我可以按文件夹中的主题进行分组以获得线程的简单概念...但是这不会处理拆分对话,因为Outlook 2010会这样做 - 具体而言,它不处理引入已发送的回复项目(这些对我们很重要 - 我们无法在不查看回复的情况下获得良好的指标)。

我目前获取线程信息的代码如下所示:

private IEnumerable<EmailThread> GetThreads(Folder folder)
    {
        var view = new ItemView(int.MaxValue) {PropertySet = new PropertySet(BasePropertySet.IdOnly)};

        // view.PropertySet.Add(ItemSchema.ConversationId); - Can't use this as we're stuck on Exchange 2007 !!!
        view.PropertySet.Add(ItemSchema.Subject);
        view.PropertySet.Add(ItemSchema.DateTimeReceived);

        var grouping = new Grouping(ItemSchema.Subject, SortDirection.Descending, ItemSchema.DateTimeReceived, AggregateType.Maximum);
        var groupResults = folder.FindItems(view, grouping);


        return groupResults.Select(x => new EmailThread
        {
            Name = x.Items.First().Subject,
            Items =  x.Items.Count,
            StartDate = x.Items.Last().DateTimeReceived, // Assume last in thread is first email
            EndDate = x.Items.First().DateTimeReceived // Assume first in thread is most recent
        });
    }

我希望有人知道如何有效地获取构成对话回复的回复信息?

1 个答案:

答案 0 :(得分:3)

您可以通过扩展属性获取ConversationId和ConversationIndex:

private static readonly ExtendedPropertyDefinition ConversationIdProperty = new ExtendedPropertyDefinition(0x3013, MapiPropertyType.Binary);
private static readonly ExtendedPropertyDefinition ConversationIndexProperty = new ExtendedPropertyDefinition(0x0071, MapiPropertyType.Binary);

var items = service.FindItems(WellKnownFolderName.Inbox, new ItemView(512) { PropertySet = new PropertySet(BasePropertySet.FirstClassProperties, 
            ConversationIdProperty, ConversationIndexProperty)});

两者都是二进制属性。他们的内容在这里有详细描述:

[MS-OXOMSG]: E-Mail Object Protocol Specification,第2.2.1.2和2.2.1.3节。

属性本身在[MS-OXPROPS]: Exchange Server Protocols Master Property List中定义。