1

我正在尝试开发一个用于将日历和联系人同步到另一个系统的应用程序。该应用程序是用 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>

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

4

2 回答 2

1

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

我没有经验的另一种方法是Impersonation。Exchange 允许您充当其他用户。为此,您必须拥有 Windows 下的假冒权利。

于 2013-07-05T08:27:15.993 回答
1

根据 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);
}
于 2013-07-05T11:32:07.677 回答