繁体   English   中英

如何使用 EWS Web 服务和 C# 检查 Outlook 中是否存在文件夹和子文件夹

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

我对 C# 开发非常陌生。 我正在尝试使用 Exchange Web 服务检查并创建 Outlook 邮箱中存在的文件夹/子文件夹。

文件夹结构

  • 主文件夹
  • 子文件夹-1
  • 子文件夹-2
  • 子文件夹-3

执行

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)

但这只是在收件箱下创建主文件夹。 如果有人可以帮助我确定我的实施中缺少什么,将不胜感激。

提前致谢。

判断一个文件夹是否存在的唯一方法是用你的搜索来搜索它,因为你没有在 Folderview 中指定遍历它总是很浅。 如果您在

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

然后,您应该能够找到要在其上创建新子文件夹的父文件夹。 只要您没有任何名称与不同的文件夹级别发生冲突,您的逻辑就应该可以正常工作。 否则我所做的是用户创建的文件夹的此 Exchange Web Service FolderId使用 EWS 通过路径获取 Exchange 文件夹

你看过Microsoft Graph吗?

你基本上可以将它用于 Microsoft 365 中的任何内容。有了你,你也可以实现你的目标。

您将需要创建一个GraphServiceClient并使用它您可以执行以下操作来检查文件夹是否存在:

string user = "emailAddressOfTheUser";

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

var parentMailFolder = await parentFolderRequest.GetAsync(cancellationToken);

一旦你有了父文件夹,你就可以得到它的 ID,一旦你知道你可以搜索它的子文件夹:

var parentMailFolderID = parentMailFolder.First().Id;

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

var childMailFolder = await parentFolderRequest.GetAsync(cancellationToken);

如果childMailFolder.Count > 0则该文件夹存在,如果不存在则创建子文件夹:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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