Interop.Outlook 保持运行



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

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

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

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

最新更新