从Exchange Server 2010获取所有用户的数据

时间:2013-07-05 07:54:15

标签: c# .net-4.0 exchangewebservices exchange-server-2010 ews-managed-api

我正在尝试开发一个同步日历和应用程序的应用程序。联系到另一个系统。该应用程序是用C#编写的,但我不明白如何在不知道每个用户的凭据的情况下获取所有用户的日历和联系人。应用程序不应该轮询信息,而是像事件一样将其发送到我的应用程序。

我已经在MS网站上搜索过,下载了“Exchange 2013 101 Code Samples”并成功编写了一个脚本,该脚本向另一个用户发送了一封电子邮件,但验证只能用于用户凭据。

是否可以创建一个“主”用户,可以阅读给定用户列表的所有日历和联系人? ExchangeServer可以调用我的应用程序并发送信息(例如使用SOAP),还是我必须轮询?


更新:

我创建了一个对所有内容拥有完全权限的用户,但我不知道如何从服务器读取数据,因为“master”用户的日历为空。当我访问OWA并选择模仿某人的日历时,我可以看到约会。

权限代码:

Get-Mailboxdatabase | Add-ADPermission -AccessRights ExtendedRight -ExtendedRights Receive-As, Send-As -User "<SuperAccount>"

这个人共享日历:

Add-MailboxFolderPermission –Identity <MailboxFolderId>:\Calendar -AccessRight ReadItems -User <SuperAccount>

如何使用我的主用户获取用户的日历?

2 个答案:

答案 0 :(得分:1)

我们使用的方法是所有用户必须与具有完全编辑权限的“主”用户共享他们的日历。必须在服务器的域中创建此用户。我们的代码以该主用户身份登录到Exchange,然后它可以访问所有日历。

我没有遇到过的另一种方法是Impersonation。 Exchange允许您充当其他用户。你必须在Windiows下拥有冒充权。

答案 1 :(得分:1)

根据Jan Doggen的回答,我在另一个StackOverflow线程中找到了解决方案,可在此处找到: EWS: Access shared calendars

Seph的答案是在Visual Basic中,但它可以很容易地转换为C#:

using Microsoft.Exchange.WebServices.Data;

DateTime startTime = new DateTime(2013, 1, 1);
DateTime endTime = new DateTime(2013, 12, 31);

var cal = new FolderId(WellKnownFolderName.Calendar, new Mailbox("other user's email"));
var calendarView = new CalendarView(startTime.Date, endTime.Date.AddDays(1));

foreach (var appointmentItem in service.FindAppointments(cal, calendarView))
{
    Console.WriteLine(appointmentItem.Subject);
}