获取其他用户的Outlook可用性信息

时间:2018-02-28 16:06:35

标签: c# .net outlook automation

我正在编写一个应用程序,创建人们Outlook日历的概述,即它将显示未来[n]周内每周计划外的时间。

基础知识正在发挥作用,但有一件事我遇到了麻烦。某些用户以某种方式共享其Outlook日历,以便其他用户只能查看可用性信息(约会的时间和描述),但不能查看任何详细信息。

我通过手动打开Outlook并打开共享日历来验证这一点;将鼠标悬停在约会上会显示一个包含开始和结束时间,描述和位置的弹出窗口,但是双击它会出现错误:“您无权显示日历,是否要让[人]分享? ”

我的代码中的相关行是:

var outlook = new Application();
var mapiNamespace = outlook.GetNamespace("MAPI");

var recipient = mapiNamespace.CreateRecipient("Scott");
recipient.Resolve();

var calendarFolder = mapiNamespace.GetSharedDefaultFolder(recipient, OlDefaultFolders.olFolderCalendar);
var calendarItems = calendarFolder.Items;

我现在尝试用calendarItems做的所有事情都会引发异常。例如,获取Count将引发TargetInvocationException(客户端进程失败,但我不确定确切的英文翻译)。调用Sort("[Start]")将引发一条带有消息未知属性的COMException:开始。两者都适用于完全共享的日历。

现在,对于概述,我需要的只是开始和结束时间,所以我真的不想让每个人都改变他们的共享设置,特别是在不需要的时候。

我的问题是:

  • 最重要的是:还有另一种方法可以获得我忽略的可用性信息吗?
  • 并且相关:Interop现在仍然是最好的选择,还是有其他选择?也许是Office365网络服务?

1 个答案:

答案 0 :(得分:1)

您可以使用GetSharedDefaultFolder方法,而不是使用Recipient.FreeBusy并访问该文件夹中的项目。