主要问题是:有没有办法确定文件夹中未读邮件的数量通过额外标题而不提取所有邮件?
我们知道mailCore2为获取文件夹状态提供了这个api:
MCOIMAPSession *session = ...
NSString *folder = @"INBOX";
[[session folderStatusOperation:folder] start:^(NSError * _Nullable error, MCOIMAPFolderStatus * _Nullable status) {
NSLog(@"%d", (int)status.unseenCount);
}];
但是使用上述方法我无法指定额外的标头,结果将是所有消息的未读数。
相反,我可以只使用标题(即没有内容)获取所有邮件:
MCOIMAPMessagesRequestKind requestKind = MCOIMAPMessagesRequestKindHeaders | MCOIMAPMessagesRequestKindExtraHeaders | MCOIMAPMessagesRequestKindFlags;
MCOIndexSet *uids = [MCOIndexSet indexSetWithRange:MCORangeMake(1, UINT64_MAX)];
MCOIMAPFetchMessagesOperation *fetchOperation = [session fetchMessagesOperationWithFolder:folder
requestKind:requestKind
uids:uids];
fetchOperation.extraHeaders = @[@"MY-EXTRA-HEADER"]; //<- key part
[fetchOperation start:^(NSError * error, NSArray * fetchedMessages, MCOIndexSet * vanishedMessages) {
//loop through fetchedMessages array and check for 'flags' property
int unreadCount = 0
for (MCOIMAPMessage *message in fetchedMessages) {
if (!(message.flags & MCOMessageFlagSeen)) {
unreadCount++;
}
}
NSLog(@"%d", unreadCount);
}];
但是如果用户在该文件夹中有数千条消息,这将花费我很多时间来执行。
那么这个问题的最佳解决方案是什么?