2016-10-03 41 views
0

我有一個Exchange郵箱中的文件夾,該文件夾是根的子項,由用戶創建。用戶創建的文件夾的Exchange Web服務FolderId

如何使用EWS託管API找到這樣的文件夾?

我試過使用深度遍歷,但我找不到文件夾。

由於提前

編輯:你的問題這裏是我使用來獲得用戶

ExchangeService server = new ExchangeService(ExchangeVersion.Exchange2007_SP1); 
server.UseDefaultCredentials = true; 
string configUrl = @"https://yourServerAddress.asmx"; 
server.Url = new Uri(configUrl); 
//SetView 
FolderView view = new FolderView(100); 
view.PropertySet = new PropertySet(BasePropertySet.IdOnly); 
view.PropertySet.Add(FolderSchema.DisplayName); 
view.Traversal = FolderTraversal.Deep; 
FindFoldersResults findFolderResults = server.FindFolders(WellKnownFolderName.Root, view); 
//find specific folder 
foreach(Folder f in findFolderResults) 
{ 
     //show folderId of the folder "test" 
     if (f.DisplayName == "Test") 
       Console.WriteLine(f.Id); 
} 
+0

你應該MsgFolderRoot啓動枚舉而不是根,也因爲你沒有分頁結果你枚舉將只在郵箱典型的郵箱可以包含返回第100個文件夾1000+文件夾,所以它很重要,如果你想枚舉你的結果。它很容易只是使用一個Searchfilter過濾結果,我發佈的例子中。 –

+0

我的枚舉只爲MsgFolderRoot返回25個文件夾,爲Root返回45個,並且都不包含用戶創建的文件夾。我會嘗試你所建議的。 – tushar

回答

0

你應該包括代碼創建的文件夾中的代碼的使用,你可能只是有這個錯誤。我做的是用函數找到字符串路徑的文件夾,然後你可以調用像GetFolderFromPath(服務,「[email protected]」,「\\文件夾1 \文件夾2」),例如

 internal static Folder GetFolderFromPath(ExchangeService service,String MailboxName,String FolderPath) 
    { 
     FolderId folderid = new FolderId(WellKnownFolderName.MsgFolderRoot,MailboxName); 
     Folder tfTargetFolder = Folder.Bind(service,folderid); 
     PropertySet psPropset = new PropertySet(BasePropertySet.FirstClassProperties); 
     String[] fldArray = FolderPath.Split('\\'); 
     for (Int32 lint = 1; lint < fldArray.Length; lint++) { 
      FolderView fvFolderView = new FolderView(1); 
      fvFolderView.PropertySet = psPropset; 
      SearchFilter SfSearchFilter = new SearchFilter.IsEqualTo(FolderSchema.DisplayName,fldArray[lint]); 
      FindFoldersResults findFolderResults = service.FindFolders(tfTargetFolder.Id,SfSearchFilter,fvFolderView); 
      if (findFolderResults.TotalCount > 0){ 
      foreach(Folder folder in findFolderResults.Folders){ 
       tfTargetFolder = folder;     
       } 
      } 
      else{ 
       tfTargetFolder = null; 
       break; 
      }  
     } 
     if (tfTargetFolder != null) 
     { 
      return tfTargetFolder; 
     } 
     else 
     { 
      throw new Exception("Folder Not found"); 
     } 
    } 
+0

謝謝格倫。我將嘗試此代碼以獲取我需要的文件夾 – tushar

+0

Glen我試過這段代碼,但是我在Folder.Bind上收到「Access denied」錯誤。你知道爲什麼這個錯誤正在發生,它的解決方案? – tushar

+0

這聽起來像您沒有對底層郵箱的正確訪問權限。請確保您使用Add-MailboxPermissions授予對TargetMailbox的完全訪問權限,否則您的代碼將無法工作。 –

0

顯然,你的代碼是正確的,但它不會讓你更加接近交易所。我遇到了同樣的問題,只修復了這些行。

其實MS忽略UseDefaultCredentials = true;

這可能是您不會登錄交換服務器的原因。有關詳細信息,請參閱MS文檔here

使用這種方法

MSEWS.ExchangeService exchange = new MSEWS.ExchangeService(MSEWS.ExchangeVersion.Exchange2007_SP1); 
// userid , password and your network domain 
exchange.Credentials = new MSEWS.WebCredentials(userName, password, domain); 

exchange.AutodiscoverUrl("[email protected]"); 
相關問題