services office microsoft exchange c# exchangewebservices

c# - microsoft - exchange web services office 365



Exchange Web Service FolderId para un nombre de carpeta poco conocido (3)

Tengo una carpeta en un buzón de Exchange que es un elemento secundario de la raíz (no de la Bandeja de entrada).

¿Cómo obtengo el ID de dicha carpeta utilizando la API administrada de EWS?

Sólo los ejemplos que encuentro son los relacionados con WellKnownFolderNames.


La respuesta de siete capas es válida, pero puede llegar a resultados no deseados.

Supongamos que tiene esta estructura:

Raíz

--Folder A

----Prueba

- Carpeta B

----Prueba

El código que proporcionó devolvería ambas carpetas de prueba.

Si conoce la ruta (como Carpeta B / Prueba), puede obtener la ruta de la carpeta de forma iterativa. Vea mi método SetFolderHomePage en este enlace: http://www.infinitec.de/post/2011/10/05/Setting-the-Homepage-of-an-Exchange-folder-using-the-EWS-Managed-API.aspx .


Puede encontrar todas las carpetas con el método FindFolders. Use WellKnownFolderName.Root, mostrará todas las carpetas de su Bandeja de entrada. Debe crear un FolderView y agregar las propiedades que desea ver (por ejemplo, ID y DisplayName). Ajuste la travesía a profundidad para encontrar todas sus carpetas. En mi ejemplo estoy buscando la carpeta con la prueba "Prueba"

//set Server 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); }


Un poco tarde, pero lo siguiente es lo que solía encontrar mi carpeta:

var view = new FolderView(1); view.Traversal = FolderTraversal.Deep; var filter = new SearchFilter.IsEqualTo(FolderSchema.DisplayName, "Rejected"); var results = Service.FindFolders(WellKnownFolderName.Root, filter, view); if (results.TotalCount < 1) throw new Exception("Cannot find Rejected folder"); if (results.TotalCount > 1) throw new Exception("Multiple Rejected folders"); Rejected = Folder.Bind(Service, results.Folders.Single().Id);

Edit : Aparentemente mi código no funcionaba en las jerarquías anidadas. Agregué una línea según la edición sugerida por cookiemonster.