在sharepoint定制開發中,可能會有讀取用戶郵件並顯示的Webpart需求,
本文是對如何使用EWS Managed API操作Exchange郵箱進行的整理和總結。
一、認識EWS Managed API
EWS Managed API是微軟開發用於客戶端開發Exchange的應用程序接口,與.Net Framework
類庫一樣,簡單直觀的提供Exchange資源的統一訪問。
二、如何在sharepoint項目中使用EWS Managed API
如何將此類庫加入我們的sharepoint項目,可以看我之前的一篇博客 Sharepoint添加EWSManagedAPI引用
在此就不再講述。
三、sharepoint項目中的具體應用
下面的內容是我根據最近我遇到的項目來講述具體的應用。
3.1 首先實例化一個ExchangeService對象,並獲取收件箱中的內容。
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult); ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010);//如果是Exchange 2010,則切換到2010 ICredentials creds = new NetworkCredential(username, password, "域名"); service.Credentials = new WebCredentials(creds); service.Url = new Uri("https://服務器地址/ews/exchange.asmx"); service.PreAuthenticate = true;
//完成實例化 ItemView view = new ItemView(10); view.OrderBy.Add(ItemSchema.DateTimeReceived, Microsoft.Exchange.WebServices.Data.SortDirection.Descending); Microsoft.Exchange.WebServices.Data.EmailMessage em = null; FindItemsResults<Item> findMailResults = service.FindItems(WellKnownFolderName.Inbox, view);foreach (Item m in findMailResults) { em = (Microsoft.Exchange.WebServices.Data.EmailMessage)m;
//對em郵件的操作 }
ServicePointManager.ServerCertificateValidationCallback這一句用於設置用於驗證服務器證書的回調,然后實例化一個ExchangeService對象,創建一個web驗證憑據creds,
並將此憑據賦給service.Credentials。Url這個屬性可以直接用Exchange服務器中的服務地址,也可以用ExchangeService中的AutodiscoverUrl方法,只需提供一個Exchange服務器地址
即可,ExchangeService會自動根據服務器地址找到對應的服務。
ItemView用於設置郵件視圖,包括大小和排序規則。從Inbox中取出郵件后,用循環取得郵件並進行相應的操作。
3.2 讀取任務文件夾中的內容
實例化與上面的相同,不同在於訪問的文件夾不同
FindItemsResults<Item> findResults = service.FindItems(WellKnownFolderName.Tasks, view); //讀取任務文件夾 Microsoft.Exchange.WebServices.Data.Task t = null;foreach (Item item in findResults.Items) { t = (Microsoft.Exchange.WebServices.Data.Task)(item); if (!t.IsComplete) {
//具體操作代碼
} }
上述內容是立即應用的代碼,根據需要取得的數據不同,訪問的文件也不用。
在使用Microsoft.Exchange.WebServices.Data過程中,發現此枚舉包含很多類型,根據不同的需求,只要訪問不同的類型就可以完成數據查詢。
3.3 獲取OwaID
有時我們需要在用戶點擊相應鏈接后跳轉到Owa郵件頁面,在拼接URL是會遇到無法獲取owaid(url中的id字符串),下面附上相應代碼
public String GetOutlookOwaId(EmailMessage message, ExchangeService ser) { AlternateId ewsId = new AlternateId(IdFormat.EwsId, message.Id.ToString(), "用戶郵件地址如:**@exchange.com"); AlternateIdBase owaId = ser.ConvertId(ewsId, IdFormat.OwaId); return ((AlternateId)owaId).UniqueId; }
讀取郵箱中數據的操作基本就是這些了,下一篇博客會寫一下基於SharePoint Secure Store Service服務實現用戶owa郵箱的模擬單點登錄。請有這方面需求的觀眾關注。