2017-05-16 69 views
0

我有一段代碼,它目前從通用「收件箱」文件夾中讀取交換服務器上的所有電子郵件。下面這行就是在訪問一個特定的文件夾搜索Exchange服務器上的特定文件夾

FindItemsResults<Item> findResults = exchange.FindItems(WellKnownFolderName.Inbox, new ItemView(250)); 

問題 是否有可能使我可以搜索用戶創建的文件夾,而不是通用的收件箱來適應這個代碼?例如我創建了一個名爲「測試文件夾」的文件夾,我希望能夠閱讀這裏的所有電子郵件。

我已經嘗試添加一個搜索過濾器,但這個目前不返回任何結果:

SearchFilter searchFilter = new SearchFilter.IsEqualTo(FolderSchema.DisplayName, "Test Folder"); 

FindItemsResults<Item> findResults = exchange.FindItems(WellKnownFolderName.Inbox, searchFilter, new ItemView(250)); 

回答

1

你需要先找到問題的用戶創建的文件夾的FolderId,那麼你可以使用在的FindItem方法在使用FolderId的服務類上或在文件夾本身上使用FindItem方法。例如找到創建的文件夾,用戶可以將其轉換爲路徑,並搜索路徑

 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"); 
    } 
} 

因此,如果該文件夾是在收件箱中,您需要使用

GetFolderFromPath(服務,「郵箱@ domaim。 com「,」\ Inbox \ folder「),然後應該返回該文件夾。

+0

非常感謝,這將有助於應用程序更有效地運行 – Crezzer7

相關問題