4

我們使用EWS在我們的一些郵箱上生成一些分析。通過使用EWS和Exchange 2007的對話實現Outlook 2010的羣組

這部分是獲取對話的計數/名稱/開始/結束。對話與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 
     }); 
    } 

我希望有人知道?

回答

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定義。

+0

謝謝,但我不認爲這有什麼用處,因爲我在Exchange 2007上請參閱[這裏](http://msdn.microsoft.com/en-us/library/ee158568(V = EXCHG.80 ).aspx) - 特別是「Exchange 2003,Exchange 2007,Office Outlook 2003和Office Outlook 2007不支持計算PidTagConversationId屬性的值」 - 如果不清楚,我會重申 - 我們的Exchange 2007與Outlook 2010和(不知何故)Outlook是能夠創建一個線程視圖...大概沒有ConversationId – Kram

+0

馬克,你是對的。但似乎可以派生PidTagConversationId值:雖然Exchange 2007不支持ConversationTopic屬性,但它與PidTagNormalizedSubject值具有相同的值(請參閱MS-OXOMSG 2.2.1.5)。 2.2.1.2節規定了如何從該屬性中調用ConversationId。 ConversationIndex受Exchange 2007支持;所以,通過這種組合,你應該能夠解決這個問題。 –

+0

謝謝......瞭解ConversationTopic是有用的,它將幫助我計算出線程中的消息。當我請求PidTagConversationId時,它返回null,這很奇怪,因爲它已經得到了PidTagConversationTopic,所以,給定2.2.1.2,應該返回MD5哈希值 - 我想這是留給我做:) – Kram

相關問題