簡體   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