c # VSTO Outlook тело письма из открытого окна - PullRequest
0 голосов
/ 07 января 2019

У меня проблема с приложением VSTO для Outlook. Я хочу обработать тело письма с выбранного письма. Для выбранных писем из списка «по умолчанию» этот код работает нормально:

Object selItem = Globals.ThisAddIn.Application.ActiveExplorer().Selection[1];
        Outlook.MailItem mailItem = (Outlook.MailItem)selItem;
        return mailItem.Body;

Но если пользователь открывает электронное письмо из списка двойным щелчком, оно отображается в новом окне. Если надстройка выполняется в этом окне (поверх ленты), электронная почта из списка все еще используется (которая теперь находится в фоновом режиме).

Есть ли способ узнать, был ли плагин запущен в отдельном окне, а затем получить из него тело письма?

С уважением, Florian

Ответы [ 2 ]

0 голосов
/ 08 января 2019

По совпадению, я только что имел дело с чем-то похожим на это. Моя ситуация не идентична, но так как я мог бы легко собрать воедино то, что, похоже, вы ищете, см. Ниже. Я не проверял это, и, очевидно, вам придется обрабатывать передачу правильной ссылки на ваше приложение Outlook, но, поскольку у меня это было сразу доступно, я решил, что оно передаст его вместе с надеждой, что вы найдете его полезным.

        private static void ribbonButton_Click(object sender, RibbonControlEventArgs e)
    {
        Outlook.Application application = new Outlook.Application();
        Outlook.Inspector inspector = application.ActiveInspector();

        if (application.ActiveExplorer().Selection[1] is Outlook.MailItem explorerMailItem)
        {
            // Write code to handle message if sourced from explorer (i.e., Reading Pane)
        }
        else if (inspector.CurrentItem is Outlook.MailItem inspectorMailItem)
        {
            // Write code to hanlde message if sourced from inspector 
            // (i.e., openened (double-clicked) message
        }
    }
0 голосов
/ 07 января 2019

Когда вы дважды щелкаете по элементу электронной почты, вы открываете окно инспектора, и вы можете получить к нему доступ, используя метод Application.ActiveInspector(). Объект Inspector имеет свойство CurrentItem, которое представляет открытый элемент. Также следует избегать использования нескольких точек в выражениях и правильно освобождать COM-объекты.

...