Outlook -互操作询问我是否要批准证书

本文关键字:证书 是否 互操作 Outlook | 更新日期: 2023-09-27 18:18:54

我使用interop来获得所有本地outlook联系人的列表(下面的代码)。这一切都很好,除了一种情况:当我没有outlook打开的时候,我使用的代码,我得到一个消息框,大约2秒后消失。消息框问我(翻译后的英文版本可能略有不同):"为这个网站配置mailboxxyz-accept服务器配置?"

查看消息并查看本地事物如何配置后,我看到我的公司正在outlook中使用证书,并且正如它所看到的那样:

  • 如果outlook正在运行,那么我的互操作功能正在使用证书,因此消息框不会弹出
  • 如果outlook没有运行,那么我的互操作功能不会自动使用证书,因此弹出窗口来询问我是否要接受它。

增加了一层奇怪的是,函数的使用成功,消息框在函数完成后几秒钟弹出,然后在2秒后消失。

Microsoft.Office.Interop.Outlook.Application outlookHandler = new Microsoft.Office.Interop.Outlook.Application();
Microsoft.Office.Interop.Outlook.Items outlookItemsCollection;
MAPIFolder folderContacts = (MAPIFolder)outlookHandler.Session.GetDefaultFolder(OlDefaultFolders.olFolderContacts);
outlookItemsCollection = folderContacts.Items;
foreach (var outlookItem in outlookItemsCollection)
{
    .....
}

还有一种方法可以得到这种现象:当outlook没有运行时,我可以试着启动它:

   Microsoft.Office.Interop.Outlook.Application outlookHandler = new Microsoft.Office.Interop.Outlook.Application();
        var mm = outlookHandler.GetNamespace("MAPI");
        mm.Logon(Type.Missing, Type.Missing, true, true); 
        // Same for the second true being false instead.

当我这样做时,outlook在要求默认配置文件后要求证书。

我现在的问题是:有什么方法可以防止这种弹出发生(或告诉互操作方法使用证书没有询问)?

Outlook -互操作询问我是否要批准证书

我要先说明这不是一个优雅的解决方案,但它应该可以工作。

// check to see if outlook is running
System.Diagnostics.Process[] prcs = System.Diagnostics.Process.GetProcessesByName("outlook");
// if the found prcs length is 0, outlook isn't running
if(prcs.Length == 0)
{
    // start outlook
    System.Diagnostics.Process.Start("path to outlook");
    // wait for outlook to load
    // call your interop code
}
else
    // outlook was found as an open process
    // call your interop code

这是围绕你的问题而不是解决根本问题。如果没有例外或其他情况,我们很难真正找到。