我想将gmail消息导出到文件中,每个文件都有消息。对此最好的策略是什么?
for (int i = 0; i < inbox.Count; i++)
{
var message = inbox.GetMessage(i);
// export message
inbox.AddFlags (i, MessageFlags.Deleted);
}
我担心的是如果我在循环中删除消息,不会破坏订单索引。 我不能使用2个单独的循环进行读取和删除,因为gmail读取速度慢,如果读取循环在某些时候失败,那么我必须重新开始整个过程。
答案 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);
}