从打开的窗口中的C#VSTO Outlook电子邮件正文

时间:2019-01-07 14:06:31

标签: c# outlook vsto

我的VSTO Outlook应用程序出现问题。我要处理选定电子邮件中的电子邮件正文。 对于不在“默认”列表中的选定电子邮件,此代码可以正常工作:

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

但是,如果用户双击打开列表中的电子邮件,则该电子邮件将显示在新窗口中。如果在此窗口(功能区上方)执行插件,则仍使用列表中的电子邮件(现在位于后台)。

是否有办法找出插件是否在单独的窗口中启动,然后从中获取电子邮件正文?

关于, 弗洛里安

2 个答案:

答案 0 :(得分:0)

当您双击电子邮件项目时,将打开一个检查器窗口,您可以使用Application.ActiveInspector()方法来访问它。 Inspector对象具有CurrentItem属性,该属性代表打开的项目。 另外,应该避免在表达式中使用多个点,并正确释放COM对象。

答案 1 :(得分:0)

巧合的是,我只是处理了类似的事情。我的情况不尽相同,但是由于我可以轻松地拼凑出您正在寻找的外观,请参见下文。我尚未对此进行测试,显然您必须处理将正确的引用传递给Outlook应用程序的问题,但是由于我可以立即获得此引用,所以我认为它将通过它,并希望对您有所帮助。 / p>

        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
        }
    }