c# - " mailkit imap 客户端 Inbox.MoveTo "该文件夹当前未以读写模式打开。"
问题描述
我在使用 MailKit/MimeKit 工具将邮件从收件箱移到邮件服务器上的子文件夹时遇到问题。目前我可以阅读任一文件夹中的电子邮件,也可以从任一文件夹中删除电子邮件。邮件服务器是 microsoft exchange 365。我目前使用 Mozilla Thunderbird 客户端的任何 imap 功能都没有任何问题。我的代码如下:
public void MoveEmail(string index, string folder)
{
using (var client = new MailKit.Net.Imap.ImapClient())
{
client.Connect(ServerUrl, ServerPort, true);
client.Authenticate(UserName, Password);
client.Inbox.Open(MailKit.FolderAccess.ReadWrite);
if (!client.Inbox.IsOpen == true)
throw new Exception("Inbox is not open.");
var dingle = client.Inbox.GetSubfolder(folder);
dingle.Open(MailKit.FolderAccess.ReadWrite);
if (!dingle.IsOpen == true)
throw new Exception("Dingle is not open.");
client.Inbox.MoveTo(0, dingle);
var dangle = dingle.Count;
var wingle = dingle.Fetch(0, -1, MailKit.MessageSummaryItems.Full);
dingle.Close(false);
client.Disconnect(true);
}
}
代码一直执行,直到遇到 move 语句,然后抛出异常:“文件夹当前未以读写模式打开。”
谢谢阅读!卡尔
解决方案
问题是,一旦您打开dingle
文件夹,它就会关闭该Inbox
文件夹。这就是 IMAP 的工作方式(一次只能打开 1 个文件夹)。
解决办法是不打开dingle
文件夹,直接打开Inbox
文件夹。
代码应如下所示:
public void MoveEmail(string index, string folder)
{
using (var client = new MailKit.Net.Imap.ImapClient())
{
client.Connect(ServerUrl, ServerPort, true);
client.Authenticate(UserName, Password);
client.Inbox.Open(MailKit.FolderAccess.ReadWrite);
if (!client.Inbox.IsOpen == true)
throw new Exception("Inbox is not open.");
var dingle = client.Inbox.GetSubfolder(folder);
client.Inbox.MoveTo(0, dingle);
dingle.Open(MailKit.FolderAccess.ReadWrite);
if (!dingle.IsOpen == true)
throw new Exception("Dingle is not open.");
var dangle = dingle.Count;
var wingle = dingle.Fetch(0, -1, MailKit.MessageSummaryItems.Full);
dingle.Close(false);
client.Disconnect(true);
}
}
推荐阅读
- javascript - Mongoose 虚拟定义。箭头函数与“传统”函数
- relayjs - 中继 Todo 示例:为什么将类型 'Todo' 和 'User' 与 GraphQL 版本的类型分开定义?
- mysql - Mysql 通过乘以 id 过滤
- c# - 如果我有具有非只读结构作为成员的 ac# 只读结构,编译器将使用 in 参数创建防御性副本
- flutter - 错误:没有名为“列表”的命名参数
- css - Flexdashboard 导航栏颜色
- reactjs - 重定向使用
来自反应路由器 - python - 如何解析 JSON 并确定值是集合还是嵌套集合?
- python - Django 自定义表单动态原始 ID
- reactjs - 在本机反应中使用抽屉导航登录和注销