2017-05-11 44 views
1

上的对话视图我正在使用MailKit库并出现问题。MailKit:消息不会从Gmail邮箱设置收件箱中删除

我的应用程序被读取在收件箱(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设置的对话视图=会话视图,即标记为删除将在收件箱中,如果有相同的电子邮件主题和发件人相同的comback消息。在下一次我计算消息时,所有的删除消息将被重新计数。如何避免它? (保存删除消息的UID是一种方式,但是当消息号增加时,处理会变慢)

非常感谢。

回答

1

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

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

或者将邮件或MoveTo()邮件自己发送到垃圾箱文件夹,以便您可以在垃圾箱文件夹中获取邮件的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 }); 
} 
+0

谢谢。我遵循你的建议并解决了这个问题。 但是当我使用雅虎电子邮件。 'var trash = client.GetFolder(SpecialFolder.Trash);'已经抛出异常 'IMAP服务器不支持SPECIAL-USE和XLIST扩展.' 使用不支持获取特殊文件夹的邮件服务器,去做? – user1234

+0

我认为在这种情况下,我会正常使用'AddFlags'和'Expunge'。现在看来工作。 – user1234

+0

pop3怎么样?我知道调用'DeleteMessage'来删除一条消息,但是当'会话视图=对话视图'时,已经被删除的消息将回到收件箱并再次计数。如何避免这一点? – user1234