[英]How do I check if folder and sub folder exist in Outlook using EWS Web Service & C#
我对 C# 开发非常陌生。 我正在尝试使用 Exchange Web 服务检查并创建 Outlook 邮箱中存在的文件夹/子文件夹。
文件夹结构
执行
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.