我正在使用 MailKit 的 ImapClient,并在阅读邮件后尝试将邮件从文件夹 A 移动到文件夹 B,但邮件未移动并且仍然存在于文件夹 A 中。问题是什么?
这是我的代码:
using (var client = new ImapClient())
{
client.Connect(_config.SmtpServer, _config.Port, true);
client.Authenticate(_config.UserName, _config.Password);
client.Inbox.Open(MailKit.FolderAccess.ReadWrite);
var inbox = client;
var archive = inbox.GetFolder("B");
archive.Open(FolderAccess.ReadWrite);
var A = inbox.GetFolder("A");
A.Open(FolderAccess.ReadWrite);
for (int i = 0; i < A.Count; i++)
{
if (!A.IsOpen)
A.Open(FolderAccess.ReadWrite);
MimeMessage message = A.GetMessage(i);
//reading email
//....
A.MoveTo(i, archive); //this line doesn't affect the message
}
client.Disconnect(true);
}
函数 A.MoveTo(i, archive) 不会移动电子邮件。
如果您能在这种情况下帮助我,谢谢。
问题在于您使用
MoveTo
方法的方式。 MoveTo
方法将 UniqueId
作为其第一个参数,而不是索引。
您应该使用
GetUniqueId
方法获取消息的唯一 ID,然后将其传递给 MoveTo
方法
for (int i = 0; i < A.Count; i++)
{
if (!A.IsOpen)
A.Open(FolderAccess.ReadWrite);
MimeMessage message = A.GetMessage(i);
//reading email
//....
var uid = A.GetUniqueId(i);
A.MoveTo(uid, archive);
}