【发布时间】:2011-11-21 04:50:15
【问题描述】:
我们正在使用 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
});
}
我希望有人知道一种巧妙的方法来有效地获取有关构成对话一部分的回复的信息?
【问题讨论】:
标签: c# outlook exchange-server exchangewebservices exchange-server-2007