c# - 邮包。将现有文件夹及其所有子文件夹和消息移动到另一个文件夹的最佳方法是什么?
问题描述
我正在尝试使用 MailKit 库将现有文件夹移动到另一个文件夹。目前我正在通过在新位置重新创建相同的文件夹结构来手动执行此操作,但这似乎不是一个好的解决方案,因为我还需要跟踪所有订阅、子文件夹属性等。我想知道是否有任何方法让生活更轻松?
谢谢
这是一个示例代码:
private async Task MoveFolderToRecursively(IMailFolder sourceFolder, IMailFolder destinationFolder)
{
await sourceFolder.OpenAsync(FolderAccess.ReadWrite);
var messages = await sourceFolder.FetchAsync(0, -1, MessageSummaryItems.UniqueId);
var uids = messages.Select(x => x.UniqueId).ToList();
await sourceFolder.MoveToAsync(uids, destinationFolder);
if (sourceFolder.IsSubscribed)
{
await destinationFolder.SubscribeAsync();
}
await sourceFolder.CloseAsync(true);
if (sourceFolder.Attributes.HasFlag(FolderAttributes.HasChildren))
{
var subfolders = sourceFolder.GetSubfolders();
foreach (var subfolder in subfolders)
{
var destinationSubfolder = destinationFolder.Create(subfolder.Name, true);
await MoveFolderToRecursively(subfolder, destinationSubfolder);
}
}
await sourceFolder.DeleteAsync();
}
解决方案
只需重命名文件夹而不是克隆它。
推荐阅读
- sql-server - 如何在 SQL Server 中创建 Visual Studio 和链接服务器之间的连接?
- c# - 给定盐度和压力下海水的冰点
- node.js - 如何构建在猫鼬中工作的嵌套模式?
- sql - 单独的查询性能很好,但是当一起运行时它不会完成
- permissions - Craft 3 CMS 和本地资产上传的权限问题
- c# - 如何响应具有真正未知状态的设备的 QUERY 意图(willReportState = false,commandOnly... = true 不足)?
- android - 不使用 Flash 在 WebView Android 中播放 RTMP
- vert.x - Vertx:在事件循环之外运行一段代码
- python - 从 SysFS 读取成功的 NUMA 节点为负值(-1),但必须至少有一个 NUMA 节点,因此返回 NUMA 节点零
- java - 在 java 11 中使用 maven-antrun-plugin 创建 tar