9

我最近使用C#編寫了.NET控制檯應用程序。它的目的是讀取特定文件夾中的電子郵件,解析它們的特定值並將它們保存到數據庫中。無法訪問公用文件夾根目錄

我最初編寫這個代碼時,我們的電子郵件系統是Exchange 2003.但是,我意識到我們很快就會升級到Exchange 2010:ergo,我構建了可在兩種環境中工作的代碼。

但是,在遷移到Exchange 2010之後,該應用程序已損壞。

該應用程序使用2010年功能的EWS API。當它嘗試使用ExchangeService的FindFolders方法查找publicfoldersroot時,它會引發異常。下面的代碼:

ExchangeService service = new ExchangeService(); 
FindFoldersResults findRootFldrs; 

service.UseDefaultCredentials = true; 
service.AutodiscoverUrl("[email protected]", delegate(string x) { 
return true; }); 

FolderView fview = new FolderView(100); 
fview.Traversal = FolderTraversal.Deep; 

findRootFldrs = service.FindFolders(WellKnownFolderName.PublicFoldersRoot, 
fview); 

例外:ErrorInvalidSchemaVersionForMailboxVersion,又名:

被請求的郵箱不支持指定RequestServerVersion

我已經嘗試:

  • 將exchangeservice設置爲2007(拋出一個例外:「發生內部服務器錯誤。操作失敗。「)

  • 給自己的權限到公用文件夾的最高水平(無效果)

  • 手動設置我的憑據(無效果)

我可以查看公共文件夾在Outlook 2007中; publicfoldersroot屬性在智能感知中可用;代碼適用於本地文件夾(我可以解析我的收件箱)

我目前的想法是,它是最近設置的Exchang e 2010:不幸的是,這不是我的領域。異常告訴我它試圖使用以前版本的Exchange。將其設置爲2007只會導致代碼失敗並顯示內部服務器錯誤。

回答

1

改變這一行:

ExchangeService service = new ExchangeService(); 

是這樣的:

ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010); 

ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP1); 

取決於您的版本。

1

舊帖子,但這竟然是我的答案:http://technet.microsoft.com/en-us/library/bb629522.aspx

基本上用於與EWS連接的帳戶有一個郵箱數據庫郵箱其默認公用文件夾服務器仍然是Exchange 2003中的任何和所有通過EWS枚舉公用文件夾的嘗試均失敗。將它換成2010年的後端服務器可立即解決問題。