我正在尝试使用此处提供的示例(Display a shared calendar of a recipient)从c#中的Outlook中检索共享日历。
通过执行foreach (Microsoft.Office.Interop.Outlook.AppointmentItem item in outlookCalendarItems)
遍历folder.Items的尝试始终会导致COM异常。
经过反复试验,我注意到.GetSharedDefaultFolder()始终返回收件箱文件夹而不是日历,尽管传入了正确的文件夹类型...
这是相关的代码(或者我认为至少是相关的...)。注意CalendarFolder.DefaultMessageClass始终为IPM.NOTE。使用我自己的电子邮件地址(当前已登录Outlook用户)进行GetSharedDefaultFolder()调用时,DefaultMessageClass正确为IPM.Appointment。
我可以使用Outlook GUI从“打开其他用户的文件夹”访问选定的用户共享文件夹-在下拉菜单中选择文件夹类型日历。
AddressEntry addrEntry =
oApp.Session.CurrentUser.AddressEntry;
if (addrEntry.Type == "EX")
{
ExchangeUser manager =
oApp.Session.CurrentUser.
AddressEntry.GetExchangeUser().GetExchangeUserManager();
if (manager != null)
{
Recipient recip =
oApp.Session.CreateRecipient(manager.Name);
if (recip.Resolve())
{
try {
CalendarFolder =
oApp.Session.GetSharedDefaultFolder(
recip, OlDefaultFolders.olFolderCalendar)
as Folder;
Console.WriteLine($"{manager.Name}'s: " + CalendarFolder.DefaultMessageClass);
}
catch (System.Exception ex )
{
Console.Write(ex);
}
}
}
}
答案 0 :(得分:0)
已解决。
当然我没有足够详细地阅读方法详细信息页面..... https://docs.microsoft.com/en-us/office/vba/api/outlook.namespace.getshareddefaultfolder
“此方法用于委派方案中,其中一个用户具有 将一个或多个默认值委派给另一用户 文件夹(例如,它们的共享日历文件夹)。“
我不是代表。