获取所有用户';的数据来自Exchange Server 2010
本文关键字:数据 Exchange 2010 Server 用户 获取 | 更新日期: 2023-09-27 18:21:03
我正在尝试开发一个用于同步日历的应用程序&联系人到另一个系统。该应用程序是用C#编写的,但我不明白如何在不知道每个用户的凭据的情况下获取所有用户的日历和联系人。应用程序不应该轮询信息,而是像事件一样将其发送到我的应用程序。
我已经在MS网站上搜索过,下载了"Exchange 2013 101代码示例",并成功地编写了一个脚本,向另一个用户发送电子邮件,但身份验证仅适用于用户凭据。
是否可以创建一个可以读取给定用户列表的所有日历和联系人的"主"用户?ExchangeServer是否可以调用我的应用程序并发送信息(例如,使用SOAP),或者我是否必须轮询?
更新:
我创建了一个对所有内容都拥有完全权限的用户,但我不知道如何从服务器读取数据,因为"主"用户的日历是空的。当我访问OWA并选择模拟查看某人的日历时,我可以看到约会。
权限代码:
Get-Mailboxdatabase | Add-ADPermission -AccessRights ExtendedRight -ExtendedRights Receive-As, Send-As -User "<SuperAccount>"
这个分享日历:
Add-MailboxFolderPermission –Identity <MailboxFolderId>:'Calendar -AccessRight ReadItems -User <SuperAccount>
如何使用主用户获取用户的日历?
我们使用的方法是,所有用户都必须与具有完全编辑权限的"主"用户共享他们的日历。必须在服务器的域中创建此用户。我们的代码以主用户身份登录到Exchange,然后它可以访问所有日历。
另一种我没有经验的方法是模拟。Exchange允许您充当其他用户。为此,您必须拥有Windiows下的模拟权限。
根据Jan Doggen的回答,我在另一个StackOverflow线程中找到了解决方案,可以在这里找到:EWS:访问共享日历
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);
}