MailKit:当 gmail 设置对话视图时,邮件不会从收件箱中删除

MailKit: Message not delete from Inbox when gmail setting Conversation view on

我在使用 MailKit 库时遇到了问题。

我的应用程序已读取收件箱 (Gmail) 中指定的电子邮件,并将其删除。

IList<UniqueId> listUid = inbox.Search(query);
for (int i = 0; i < listUid.Count; i++)
{
  var message = inbox.GetMessage(listUid[i]);
  inbox.AddFlags(msg.Uid, MessageFlags.Deleted, true);
  inbox.Expunge();
}

它 运行 好的,但是当 Gmail 设置 Conversation View = Conversation view on 时,如果具有相同的电子邮件主题和相同的发件人,则标记为删除的邮件将在收件箱中返回。下次统计消息时,所有删除的消息都会重新统计。如何避免? (保存删除消息的Uid是一种方式,但是当消息数量增加时,处理会变慢)

非常感谢。

不幸的是,GMail 的行为方式与大多数其他 IMAP 服务器的行为方式不同,因此当您将邮件标记为 \Deleted 时,它会自动移至“垃圾箱”文件夹,因此“删除”不会执行任何操作。

您需要做的是转到您的 GMail 设置并更改您的 IMAP 帐户的行为,这样它就不会将邮件移至垃圾箱。

自己将邮件或 MoveTo() 发送到垃圾箱文件夹,这样您就可以获得垃圾箱文件夹中邮件的 UID(提示:使用 MoveTo() 方法的 return 值)和然后打开“垃圾箱”文件夹并清除那里的邮件。

注意:此代码未经测试,但应如下所示:

var trash = client.GetFolder (SpecialFolder.Trash);
var moved = client.Inbox.MoveTo (uid, trash);
if (moved.HasValue) {
    trash.Open (FolderAccess.ReadWrite);
    trash.AddFlags (moved.Value, MessageFlags.Deleted, true);
    trash.Expunge (new [] { moved.Value });
}