mailkit imap 客户端 Inbox.MoveTo "The folder is not currently open in read-write mode."
mailkit imap client Inbox.MoveTo "The folder is not currently open in read-write mode."
我在使用 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);
}
}
我在使用 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);
}
}