I have a folder in an Exchange mailbox that is a child of the root (not Inbox).
How do I get the ID of such folder using EWS Managed API?
Only examples I find are those relating to WellKnownFolderNames.
You can find all Folders with the FindFolders Method. Use WellKnownFolderName.Root it will show all your folders of your Inbox. You have to create a FolderView an add the properties which you want to see ( ID and DisplayName for example). Set the travesal to deep in order to find all of your folders. In my example I'm looking for the folder with the displayName "Test"
//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);
}
A bit late, but the following is what I used to find my folder:
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: Apparently my code did not work on nested heirarchies. I added a line as per cookiemonster's suggested edit.
The answer of seven-ply is valid, but may lead to undesired results.
Suppose you have this structure:
Root
--Folder A
----Test
--Folder B
----Test
The code he provided would return both test folder.
If you know the path (like Folder B/Test), you can get the folder path iteratively. See my the method SetFolderHomePage in this link: http://www.infinitec.de/post/2011/10/05/Setting-the-Homepage-of-an-Exchange-folder-using-the-EWS-Managed-API.aspx.
来源:https://stackoverflow.com/questions/7912584/exchange-web-service-folderid-for-a-not-well-known-folder-name