Interop.Outlook继续运行

时间:2018-10-02 08:32:33

标签: c# outlook office-interop

Hei

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

有人建议继续运行该解决方案或解决方案以避免关闭Interop.Outlook吗?

Application olApp; Account Acc; Items itemsInbox; MAPIFolder inbox;

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

1 个答案:

答案 0 :(得分:1)

首先,您检索帐户的代码不执行任何操作-您从不使用Acc变量。请注意,Acc.SessionolApp.Session相同。您可以使用Account.DeliverToStore检索该帐户的商店。然后,您可以使用Store.GetRootFolder()来检索其顶层文件夹。

第二,即使关闭了Outlook的最后一个窗口,也没有关闭的COM引用。这样做是为了防止泄漏COM对象引用的bug应用程序出现。

要使Outlook保持活动状态,请引用其ExplorerInspector对象中的任何一个-您可以从Application.ActiveExplorer中检索一个对象或调用MAPIFolder.GetExplorer。浏览器不一定是可见的。