1

我正在嘗試開發一個應用程序,用於將日曆&聯繫人同步到另一個系統。該應用程序是用C#編寫的,但我不明白我如何獲取所有用戶的日曆和聯繫人,而不知道每個人的憑證。應用程序不應輪詢信息,而是將其作爲事件發送到我的應用程序。從Exchange Server 2010獲取所有用戶的數據

我已經在MS網站上搜索過,下載了'Exchange 2013 101代碼示例'併成功編寫了一個腳本,該腳本將電子郵件發送給另一個用戶,但驗證只能與用戶憑證一起使用。

是否有可能創建一個可以讀取給定用戶列表的所有日曆和聯繫人的'主'用戶? ExchangeServer可以調用我的應用程序併發送信息(例如使用SOAP),還是必須輪詢?


UPDATE:

我創建誰擁有的一切全權限的用戶,但我不知道如何從服務器讀取數據,因爲「主」用戶的日曆是空的。當我訪問OWA並選擇模仿某人的日曆時,我可以看到約會。

代碼權限:

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

而這一股日曆:

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

我怎樣才能得到我的主用戶的用戶的日曆嗎?

回答

1

據揚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); 
} 
+0

當我嘗試使用此代碼時,我收到「指定的文件夾無法在商店中找到。」 –

+0

我很抱歉我遲到的答案。不幸的是,我不再在這個項目上工作,因爲這只是一個暑期工,而我是一名學生。您是否使用相同版本的Exchange Server? WellKnownFolderName.Calendar是一個適用於您的服務器的通用文件夾名稱。你使用的是ews-managed-api的正確版本嗎?你在Visual Studio中選擇了正確的Exchange版本嗎? – Pixelmonster

+0

NP,我想我明白了,雖然我幾個月沒有在這個項目上工作。謝謝你的迴應。 –

1

我們使用的方法是,所有用戶都必須與具有完全編輯權限的「主」用戶共享他們的日曆。該用戶必須在服務器的域中創建。我們的代碼以主用戶身份登錄到Exchange,然後它可以訪問所有日曆。

我沒有經驗的另一種方法是Impersonation。 Exchange可讓您充當其他用戶。你必須擁有Windiows下的模仿權。

+0

請看看我的更新。 – Pixelmonster

+0

我終於用模擬解決了這個問題。 這真的很簡單,但非常強大,我可以保留我的代碼的其餘部分,因爲它只是一條線。 - 十分感謝! – Pixelmonster

相關問題