无论提供的FolderType如何,GetSharedDefaultFolder()始终返回收件箱

时间:2018-10-17 19:34:16

标签: c# .net outlook outlook-2010

我正在尝试使用此处提供的示例(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);
                    }
                }
            }
        }

1 个答案:

答案 0 :(得分:0)

已解决。

当然我没有足够详细地阅读方法详细信息页面..... https://docs.microsoft.com/en-us/office/vba/api/outlook.namespace.getshareddefaultfolder

  

“此方法用于委派方案中,其中一个用户具有   将一个或多个默认值委派给另一用户   文件夹(例如,它们的共享日历文件夹)。“

我不是代表。