如何使用MailKit删除Gmail中的邮件(而不是移动到垃圾邮件文件夹)

4

我正在尝试使用MailKit库开发一个ImapClient。

我该如何永久性地从Gmail账户中删除邮件,而不仅仅是将其移动到垃圾箱?

1个回答

12

在大多数IMAP服务器上,您可以这样做:

folder.AddFlags (uids, MessageFlags.Deleted, true);

这将在邮件中设置\Deleted标志。下一步是:

folder.Expunge (uids);

这将从文件夹中清除消息。

假设在Gmail上这种方法不起作用,很可能是因为当你在Gmail的IMAP服务器上向一条消息添加\Deleted标记时,它会将其移动到垃圾邮件文件夹(超出了IMAP客户端的控制范围)。

然而,这里有一个可能有效的想法...

// First, get the globally unique message id(s) for the message(s).
var summaries = folder.Fetch (uids, MessageSummaryItems.GMailMessageId);

// Next, mark them for deletion...
folder.AddFlags (uids, MessageFlags.Deleted, true);

// At this point, the messages have been moved to the Trash folder.
// So open the Trash folder...
folder = client.GetFolder (SpecialFolder.Trash);
folder.Open (FolderAccess.ReadWrite);

// Build a search query for the messages that we just deleted...
SearchQuery query = null;
foreach (var message in summaries) {
    var id = SearchQuery.GMailMessageId (message.GMailMessageId);
    query = query != null ? query.Or (id) : id;
}

// Search the Trash folder for these messages...
var matches = folder.Search (query);

// Not sure if you need to mark them for deletion again...
folder.AddFlags (matches, MessageFlags.Deleted, true);

// Now purge them from the Trash folder...
folder.Expunge (matches);

完成了...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接