2

我有一个要求,例如我需要使用 Exchange 服务 API 中的管理员帐户获取所有用户日历事件。我尝试过但无法实现,因此请就此提供建议。PFB 代码供您参考。我正在使用 Exchange 服务器版本 2013_SP1。在下面的代码中,我只能获取一个用户日历事件的详细信息。

public List<EWSModel> GetCalendarEventDetails()
    {
        List<EWSModel> objCalItems = new List<EWSModel>();
        try
        {
            ExchangeService service = CallEWSAPIService();
            DateTime startDate = DateTime.Now.AddDays(-30);
            DateTime endDate = DateTime.Now;
            CalendarFolder calendar = CalendarFolder.Bind(service, WellKnownFolderName.Calendar, new PropertySet());
            CalendarView cView = new CalendarView(startDate, endDate);
            cView.PropertySet = new PropertySet(AppointmentSchema.Subject, AppointmentSchema.Start, AppointmentSchema.End);
            FindItemsResults<Appointment> appointments = calendar.FindAppointments(cView);
            EWSModel objModel = null;
            foreach (Appointment appItem in appointments)
            {
                appItem.Load();
                List<string> attendees = new List<string>();
                foreach (var emailItem in appItem.RequiredAttendees)
                {
                    attendees.Add(emailItem.Name);
                }
                objModel = new EWSModel();
                objModel.AppointmentTitle = appItem.Subject.ToString();
                objModel.Subject = appItem.Subject.ToString();
                objModel.Body = StripHTML(appItem.Body.Text).Replace("\r", "").Replace("\n", "");
                objModel.EmailAddress = attendees;
                objModel.Location = appItem.Location.ToString();
                objModel.StartDate = appItem.Start;
                objModel.EndDate = appItem.End;
                objCalItems.Add(objModel);
            }
        }
        catch (Exception err)
        {
            throw err;
        }

        return objCalItems;
    }
4

2 回答 2

1

我自己找到了答案。使用模拟技术,将满足要求。首先,启用对 Exchange 管理员用户的模拟访问权限。请参阅以下链接来执行此操作。然后从您的代码中,您可以为任何用户设置模拟(使用管理员用户)以访问该用户的日历详细信息(交换),使用以下代码作为参考

ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP2);
service.Credentials = new WebCredentials(username, password);
service.ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.SmtpAddress, [username whose detail is needed]); 

请参阅以下链接了解更多详情。

于 2015-12-31T10:45:33.123 回答
0

首先要考虑的是,作为管理员不会授予您对其他用户邮箱的任何权限,因此如果您想访问其他用户邮箱,则需要使用 Add-MailboxPermissions 专门授予管理员对该邮箱的访问权限。一旦您授予访问权限(并等待该更改生效),您就可以使用 FolderId 重载,例如

        FolderId CalendarFolderId = new FolderId(WellKnownFolderName.Calendar,"MaiiboxtoAcces@domain.com");
        CalendarFolder calendar = CalendarFolder.Bind(service, CalendarFolderId, new PropertySet(BasePropertySet.FirstClassProperties));

另一种选择是授予管理员帐户访问权限以模拟您要访问的用户,请参阅https://msdn.microsoft.com/en-us/library/bb204095(EXCHG.140).aspxhttps://msdn.microsoft。 com/en-us/library/office/dd633680(v=exchg.80).aspx

干杯格伦

于 2015-08-04T23:20:01.373 回答