2015-10-22 5 views
1

Мы разработчик плагина Outlook. Мы предоставляем кнопку в качестве альтернативы по умолчанию для кнопки «Отправить». Нам нужно сохранить все MailItem, ответившие нашей кнопкой, на определенную категорию. Когда пользователь отвечает по электронной почте (в новом инспекторе), как я могу получить ответ на главный MailItem?Получить предыдущий MailItem при ответе на внешний вид

ответ

2

Пользователь может ответить либо проводником, либо инспектором.

В случае Проводника закройте проводник Explorer.SelectionChange и настройте приемники событий для выбранных элементов. Вы можете заблокировать события MailItem.Reply/ReplyAll/Forward.

В случае инспекторов заблокируйте событие Application.Inspectors.NewInspector и настройте приемник событий на MailItem, возвращенный из свойства Inspector.CurrentItem. Затем вы снова поймаете события MailItem.Reply/ReplyAll/Forward.

+0

Это хороший подход, я решил проблему. – phuongnd

+0

Пожалуйста, отметьте как ответ, если он сработает для вас. –

+0

Это решение сработало для меня, спасибо – phuongnd

1

Вы можете использовать метод GetConversation класса MailItem, который возвращает объект Conversation, представляющий цепочку, к которой относится этот элемент.

GetConversation возвращает Null (ничего в Visual Basic), если для элемента нет разговора. Нет разговора для предмета в следующих сценариях:

  • Товар не сохранен. Элемент может быть сохранен программно, посредством действия пользователя или путем автоматического сохранения.
  • Для элемента, который может быть отправлен (например, элемент почты, элемент назначения или элемент контакта), элемент не был отправлен.
  • Разговоры отключены через реестр Windows.
  • Магазин не поддерживает вид разговора (например, Outlook работает в классическом онлайн-режиме с версией Microsoft Exchange раньше, чем Microsoft Exchange Server 2010). Используйте свойство IsConversationEnabled объекта Store, чтобы определить, поддерживает ли хранилище представление «Беседа».

Разговор представляет собой один или несколько элементов в одной или нескольких папках и магазинах. Если вы перемещаете элемент в цепочке в папку «Удаленные» и затем перечисляете разговор с помощью метода GetChildren, GetRootItems или GetTable, элемент не будет включен в возвращаемый объект.

void DemoConversation() 
{ 
    object selectedItem = 
    Application.ActiveExplorer().Selection[1]; 
    // This example uses only 
    // MailItem. Other item types such as 
    // MeetingItem and PostItem can participate 
    // in the conversation. 
    if (selectedItem is Outlook.MailItem) 
    { 
     // Cast selectedItem to MailItem. 
     Outlook.MailItem mailItem = 
     selectedItem as Outlook.MailItem; 
     // Determine the store of the mail item. 
     Outlook.Folder folder = mailItem.Parent 
     as Outlook.Folder; 
     Outlook.Store store = folder.Store; 
     if (store.IsConversationEnabled == true) 
     { 
     // Obtain a Conversation object. 
     Outlook.Conversation conv = 
     mailItem.GetConversation(); 
     // Check for null Conversation. 
     if (conv != null) 
     { 
      // Obtain Table that contains rows 
      // for each item in the conversation. 
      Outlook.Table table = conv.GetTable(); 
      Debug.WriteLine("Conversation Items Count: " + 
      table.GetRowCount().ToString()); 
      Debug.WriteLine("Conversation Items from Table:"); 
      while (!table.EndOfTable) 
      { 
      Outlook.Row nextRow = table.GetNextRow(); 
      Debug.WriteLine(nextRow["Subject"] 
      + " Modified: " 
      + nextRow["LastModificationTime"]); 
      } 
      Debug.WriteLine("Conversation Items from Root:"); 
      // Obtain root items and enumerate the conversation. 
      Outlook.SimpleItems simpleItems 
      = conv.GetRootItems(); 
      foreach (object item in simpleItems) 
      { 
      // In this example, only enumerate MailItem type. 
      // Other types such as PostItem or MeetingItem 
      // can appear in the conversation. 
      if (item is Outlook.MailItem) 
      { 
       Outlook.MailItem mail = item 
        as Outlook.MailItem; 
       Outlook.Folder inFolder = 
       mail.Parent as Outlook.Folder; 
       string msg = mail.Subject 
        + " in folder " + inFolder.Name; 
       Debug.WriteLine(msg); 
      } 
      // Call EnumerateConversation 
      // to access child nodes of root items. 
      EnumerateConversation(item, conv); 
      } 
     } 
     } 
    } 
    } 


    void EnumerateConversation(object item, 
    Outlook.Conversation conversation) 
    { 
    Outlook.SimpleItems items = 
     conversation.GetChildren(item); 
    if (items.Count > 0) 
    { 
     foreach (object myItem in items) 
     { 
      // In this example, only enumerate MailItem type. 
      // Other types such as PostItem or MeetingItem 
      // can appear in the conversation. 
      if (myItem is Outlook.MailItem) 
      { 
       Outlook.MailItem mailItem = 
       myItem as Outlook.MailItem; 
       Outlook.Folder inFolder = 
       mailItem.Parent as Outlook.Folder; 
       string msg = mailItem.Subject 
       + " in folder " + inFolder.Name; 
       Debug.WriteLine(msg); 
      } 
      // Continue recursion. 
      EnumerateConversation(myItem, conversation); 
      } 
     } 
    } 
+0

Многие знания здесь, но это кажется сложным для моей проблемы. – phuongnd