You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MailKit 4.3.0删除邮件遇FolderNotOpenException,求解决方案

解决MailKit 4.3.0删除邮件时的FolderNotOpenException问题

问题原因

你的代码仅检查了文件夹是否打开(IsOpen),但未验证当前的访问权限是否为读写模式。如果Inbox之前是以只读模式打开的,IsOpen会返回true,但执行AddFlags这类需要写权限的操作时就会抛出FolderNotOpenException。另外,IsWritable属性在MailKit 4.3.0版本中已被移除,无法使用。

解决方案

通过Inbox.Access属性判断当前文件夹的访问权限,确保以读写模式打开后再执行删除操作。同时,建议记录文件夹的初始状态,避免关闭原本就处于打开状态的文件夹:

// 记录文件夹初始状态,避免误关原本打开的文件夹
var wasPreviouslyOpen = Inbox.IsOpen;
var needsReopen = !wasPreviouslyOpen || Inbox.Access != FolderAccess.ReadWrite;

try
{
    if (needsReopen)
    {
        // 如果未打开或当前是只读模式,以读写模式打开
        Inbox.Open(FolderAccess.ReadWrite);
    }

    // 执行删除操作
    Inbox.AddFlags(uid, MessageFlags.Deleted, true);
    Inbox.Expunge();
}
catch (Exception ex)
{
    Console.WriteLine($"删除UID为{uid}的邮件出错: {ex.Message}");
}
finally
{
    // 仅关闭我们自己打开的文件夹
    if (!wasPreviouslyOpen && Inbox.IsOpen)
    {
        Inbox.Close();
    }
}

额外说明

  • FolderAccess枚举包含ReadOnly、ReadWrite和AppendOnly三种模式,删除操作必须在ReadWrite模式下执行。
  • Expunge()方法会永久移除标记为Deleted的邮件,若想保留邮件在垃圾箱而非永久删除,可跳过此步骤(取决于邮件服务器的配置)。

内容的提问来源于stack exchange,提问作者Matías Alejandro Novillo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 11:37:20