简体   繁体   中英

How do I check if folder and sub folder exist in Outlook using EWS Web Service & C#

I'm very new to C# development. I'm trying to check and create a folder/ sub-folder exist in Outlook Mailbox using Exchange Web Service.

Folder Structure

  • MAIN_folder
  • Sub Folder-1
  • Sub Folder-2
  • Sub Folder-3

Implementation

public void checkFolderExistOrNot( String folder_name)
        {
            FolderView fv = new FolderView(100);

            var findFoldersResults = exchangeService.FindFolders(
                WellKnownFolderName.Inbox,
                new SearchFilter.SearchFilterCollection(
                    LogicalOperator.Or,
                    new SearchFilter.ContainsSubstring(FolderSchema.DisplayName, folder_name)),
                fv);

            foreach (var folder in findFoldersResults)
            {
                if (folder is Folder)
                {
                    if (folder.DisplayName == folder_name)
                    {
                        archiveFolderID = folder.Id;
                    }
                   

                }
            }
            //if archive folder not found create and assign the variable to the folderID
            if (archiveFolderID == null)
            {
                Folder folder = new Folder(exchangeService);
                folder.DisplayName = folder_name;
                folder.Save(WellKnownFolderName.Inbox);
                archiveFolderID = folder.Id;
            }
            
        }

checkFolderExistOrNot(MAIN_folder)
checkFolderExistOrNot(MAIN_folder.Sub Folder-1)
checkFolderExistOrNot(MAIN_folder.Sub Folder-2)
checkFolderExistOrNot(MAIN_folder.Sub Folder-3)

But this is only creating the Main folder under the inbox. It would be greatly appreciated if someone could help me to identify what is missing in my implementation.

Thanks in Advance.

The only way to tell if a folder exists is to search for it with your search because you don't specify the traversal in the Folderview it will always be shallow. If you specify a deep traversal in

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

You should then be able to find the parent folder you want to create a new subfolder on. Your logic should work okay as long as you don't have any name clashes a different folder levels. Otherwise what I do is this Exchange Web Service FolderId for a folder created by user or Get to an Exchange folder by path using EWS

Have you given Microsoft Graph a look?

You can basically use it for anything in Microsoft 365. With you you can also achieve your goal.

You will need to create a GraphServiceClient and with it you can do the following to check if a folder exists:

string user = "emailAddressOfTheUser";

var parentFolderRequest = graphClient.Users[user].MailFolders.Inbox.ChildFolders
                                                   .Request()
                                                   .Filter($"startsWith(displayName, 'parentFolderName')");

var parentMailFolder = await parentFolderRequest.GetAsync(cancellationToken);

Once you have the parent folder you can get it's ID and once you know that you can search it for child folders:

var parentMailFolderID = parentMailFolder.First().Id;

var childFolderRequest = graphClient.Users[user].MailFolders[parentMailFolderID].ChildFolders
                                                   .Request()
                                                   .Filter($"startsWith(displayName, 'childFolderName')");

var childMailFolder = await parentFolderRequest.GetAsync(cancellationToken);

If the childMailFolder.Count > 0 then the folder exists, if not you create the child folder:

var childFolder = new MailFolder
{
   DisplayName = "childFolderName",
   IsHidden = false
};

await graphClient.Users[graphUser.Id]
                 .MailFolders[parentMailFolderID].ChildFolders
                 .Request()
                 .AddAsync(childFolder );

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM