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

时间:2017-05-11 04:20:37

标签: c# imap mailkit

我正在使用MailKit lib并遇到问题。

我的应用程序已在Inbox(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设置对话视图=对话视图时,如果有相同的电子邮件主题和相同的发件人,则标记为删除的邮件将在收件箱中进行混搭。在下一次计数消息时,所有删除消息都将重新计数。怎么避免呢? (保存Uid的删除消息是单向的,但是当消息号增加时,处理会很慢)

非常感谢。

1 个答案:

答案 0 :(得分:1)

遗憾的是,GMail的行为与大多数其他IMAP服务器的行为方式不同,因此当您将邮件标记为\ Deleted时,它会自动移动到“废纸篓”文件夹,因此Expunge不执行任何操作。

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

要么将消息移动到Trash文件夹中,要么将MoveTo()传递给Trash文件夹,以便在Trash文件夹中获取消息的UID(提示:使用MoveTo()方法的返回值),然后打开“废纸篓”文件夹,从那里删除消息。

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

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 });
}