Реализация группы Outlook 2010 с помощью диалога с использованием EWS и Exchange 2007 - PullRequest
5 голосов
/ 20 сентября 2011

Мы используем 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
        });
    }

Iя надеюсь, что кто-то знает изящный способ эффективно получить информацию об ответах, которые являются частью разговора?

1 Ответ

3 голосов
/ 20 сентября 2011

Вы можете получить 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]: спецификация протокола объекта электронной почты , раздел 2.2.1.2 и 2.2.1.3.

Сами свойства определены в [MS-OXPROPS]: список основных свойств протоколов сервера Exchange .

...