C# 互操作。Outlook继续运行

C# 互操作。Outlook继续运行,c#,outlook,office-interop,C#,Outlook,Office Interop,嘿嘿, 我在Interop.Outlook中遇到问题,无法找到解决方案。因此,我运行我的应用程序,在其中使用Interop.Outlook过滤不同Outlook的帐户,并在需要时获取电子邮件。启动应用程序时,打开Outlook并获取要筛选的帐户。 此外,我还使用Outlook应用程序进行正常工作。 所以,有时过滤器不起作用,我想当我关闭Outlook应用程序时,它也会在我的应用程序Interop.Outlook中关闭,所以我必须重新启动应用程序才能运行过滤器 是否有人有一些想法可以继续运行,或者

嘿嘿,

我在Interop.Outlook中遇到问题,无法找到解决方案。因此,我运行我的应用程序,在其中使用Interop.Outlook过滤不同Outlook的帐户,并在需要时获取电子邮件。启动应用程序时,打开Outlook并获取要筛选的帐户。 此外,我还使用Outlook应用程序进行正常工作。 所以,有时过滤器不起作用,我想当我关闭Outlook应用程序时,它也会在我的应用程序Interop.Outlook中关闭,所以我必须重新启动应用程序才能运行过滤器

是否有人有一些想法可以继续运行,或者有一些解决方案可以避免关闭Interop.Outlook

应用olApp; 账户Acc; 项目箱中的项目; 文件夹收件箱


首先,检索帐户的代码不起任何作用-您从不使用Acc变量。请注意,Acc.会话与olApp.Session相同。您可以使用Account.DeliverToStore检索该帐户的存储。然后,您可以使用Store.GetRootFolder检索其顶级文件夹

第二,Outlook在关闭最后一个窗口时关闭,即使存在对其任何对象的未完成COM引用。这样做是为了防止泄露COM对象引用的错误应用


若要使Outlook保持活动状态,请引用其任何资源管理器或检查器对象-您可以从Application.ActiveExplorer或调用MAPIFolder.GetExplorer检索一个对象。浏览器不必可见。

如果要处理多个帐户,是否确定Outlook是处理这些帐户的正确网关?例如,在公司Exchange环境中,直接针对Exchange服务器而不是使用客户端应用程序可能更明智。谢谢。我认为展望是一种简单的方式。不过,我会尝试交换方式,因为我找不到其他智能解决方案。嗨,谢谢。不过,我正在测试Exchange,我认为对于我的应用程序来说,运行得确实更好,所以我将把代码改为EWS。然而,它的工作原理是相同的,但是Outlook应用程序的打开没有问题。
    public void FilterMain()
    {
        olApp = new Application();

        Accounts accounts = olApp.Session.Accounts;
        foreach (Account acc in accounts)
        {
            if (acc.SmtpAddress.ToLower() == "mail@mail.com")
            {
                Acc = acc;
                break;
            }
        }
        if (Acc != null)
        {
            Folders rootFolders = Acc.Session.Folders;

            foreach (Folder fold in rootFolders)
            {
                if (fold.Name.ToLower() == "mail@mail.com")
                {

                    foreach (Folder f in fold.Folders)
                    {
                        if (f.Name == "Saapuneet") //Saapuneet
                        {
                            inbox = f;
                            itemsInbox = inbox.Items;
                            itemsInbox.ItemAdd += new Microsoft.Office.Interop.Outlook.ItemsEvents_ItemAddEventHandler(ItemsInbox_ItemAdd);
                            break;
                        }
                    }
                }
            }
        }
    }