Mailkit会传输大量消息并将其删除

时间:2017-04-18 12:54:03

标签: c# imap mailkit

我想将gmail消息导出到文件中,每个文件都有消息。对此最好的策略是什么?

for (int i = 0; i < inbox.Count; i++)
   {
        var message = inbox.GetMessage(i);
        // export message
        inbox.AddFlags (i, MessageFlags.Deleted);
   }

我担心的是如果我在循环中删除消息,不会破坏订单索引。 我不能使用2个单独的循环进行读取和删除,因为gmail读取速度慢,如果读取循环在某些时候失败,那么我必须重新开始整个过程​​。

1 个答案:

答案 0 :(得分:3)

对于标准IMAP服务器,在消息上设置\Deleted标志不会从文件夹中删除消息,它只是设置一个标志,未来EXPUNGE命令将使用该标志来决定要清除哪些消息

也就是说,像GMail这样的服务器默认使用非标准行为,因此您的担忧是有效的。

为了避免这种类型的问题,我建议使用uids代替。我强烈建议完全避免使用基于索引的API。

var uids = folder.Search (SearchQuery.All);
foreach (var uid in uids) {
    var message = folder.GetMessage (uid);
    folder.AddFlags (uid, MessageFlags.Deleted);
}