使用 c# 中的 Microsoft.Office.Interop.Outlook 访问非默认配置文件

Use Microsoft.Office.Interop.Outlook from c# to access non-default profiles

提问人:Adam J. Kessel 提问时间:11/17/2023 最后编辑:Eugene AstafievAdam J. Kessel 更新时间:11/20/2023 访问量:36

问:

我正在尝试从非默认配置文件中提取 Outlook 存储信息。这里的解决方案基本上可以满足我的要求,只是它只从默认配置文件中提取。根据 MS 文档,我应该能够使用 NameSpace.Logon 方法指定配置文件。但是,无论我使用 NameSpace.Login 指定什么,我都只能从默认配置文件中获取存储。

例如,此代码仅输出默认配置文件(“Outlook”),而不是“存档”配置文件:

using Microsoft.Office.Interop.Outlook;
...
Application objApp = null;
NameSpace ns = null;
objApp = new Application();
ns = objApp.GetNamespace("MAPI");
ns.Logon("archive");
Console.WriteLine(ns.Session.CurrentProfileName);

我还尝试将 Logon 方法与 Application.Session 对象而不是 Application.Namespace 对象一起使用,但我得到了相同的结果。

C# Windows Outlook Office-Interop Office-自动化

评论


答:

0赞 Eugene Astafiev 11/17/2023 #1

确保正在运行的进程列表中不存在任何进程。Outlook 是单例,如果任何实例尚未关闭且仍在系统上运行,您将无法登录到另一个配置文件并继续处理当前会话/配置文件。outlook.exe

评论

0赞 gilliduck 11/17/2023
您确定 outlook.exe 是单一实例吗?我可以同时打开多个 Outlook 实例。事实上,我只需要在快捷方式上添加一个标志来防止这种默认行为。
0赞 Eugene Astafiev 11/17/2023
是的,与其他 Office 应用程序不同。你添加了哪个标志?当系统上没有运行Outlook进程时,您仍然会获得默认配置文件吗?
0赞 Adam J. Kessel 11/17/2023
从关闭 Outlook 开始,我得到了相同的结果(在任务管理器和 pslist 中验证)。我也欢迎关于如何以编程方式获取有关非默认配置文件的信息的其他想法。
0赞 Eugene Astafiev 11/17/2023
别无他法。您需要使用 Logon 方法,但是,您可以尝试指定所有参数。我建议尝试启用该选项,以便您可以确保可以通过编程方式选择正确的配置文件。ShowDialog
0赞 Adam J. Kessel 11/17/2023
我尝试过设置到但没有出现任何框,所以该功能似乎默默失败。有没有可能它只是被 O365 破坏了?有什么想法可以缩小问题范围吗?ShowDialogtrue
0赞 Adam J. Kessel 11/18/2023 #2

我无法弄清楚为什么这不适用于 c# 代码,但我确实找到了命令行工具 MrMAPI,它可以让我大部分时间到达那里。 列出可用的配置文件,然后转储与指定配置文件的每个存储关联的元数据。从那里我可以提取我需要的其他信息。我想弄清楚为什么上面显示的互操作代码从未起作用,但这是一个合理的解决方法。mrmapi -profilemrmapi -profile (profile_name) -store (store_name)

顺便说一句,即使 Outlook 使用默认配置文件运行,mrmapi 也能够检索有关其他配置文件的信息。我不知道这是否与上面的单例观察相矛盾,或者 mrmapi 是否以其他方式访问配置文件。