Мы разработчик плагина Outlook. Мы предоставляем кнопку в качестве альтернативы по умолчанию для кнопки «Отправить». Нам нужно сохранить все MailItem, ответившие нашей кнопкой, на определенную категорию. Когда пользователь отвечает по электронной почте (в новом инспекторе), как я могу получить ответ на главный MailItem?Получить предыдущий MailItem при ответе на внешний вид
ответ
Пользователь может ответить либо проводником, либо инспектором.
В случае Проводника закройте проводник Explorer.SelectionChange и настройте приемники событий для выбранных элементов. Вы можете заблокировать события MailItem.Reply/ReplyAll/Forward.
В случае инспекторов заблокируйте событие Application.Inspectors.NewInspector и настройте приемник событий на MailItem, возвращенный из свойства Inspector.CurrentItem. Затем вы снова поймаете события MailItem.Reply/ReplyAll/Forward.
Вы можете использовать метод 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);
}
}
}
Многие знания здесь, но это кажется сложным для моей проблемы. – phuongnd
Это хороший подход, я решил проблему. – phuongnd
Пожалуйста, отметьте как ответ, если он сработает для вас. –
Это решение сработало для меня, спасибо – phuongnd