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;
}
}
}
}
}
}
答案 0 :(得分:1)
首先,您检索帐户的代码不执行任何操作-您从不使用Acc变量。请注意,Acc.Session
与olApp.Session
相同。您可以使用Account.DeliverToStore检索该帐户的商店。然后,您可以使用Store.GetRootFolder()
来检索其顶层文件夹。
第二,即使关闭了Outlook的最后一个窗口,也没有关闭的COM引用。这样做是为了防止泄漏COM对象引用的bug应用程序出现。
要使Outlook保持活动状态,请引用其Explorer
或Inspector
对象中的任何一个-您可以从Application.ActiveExplorer
中检索一个对象或调用MAPIFolder.GetExplorer
。浏览器不一定是可见的。