MailCore2:确定文件夹的未读邮件数

时间:2017-03-02 13:33:43

标签: ios objective-c swift email mailcore2

主要问题是:有没有办法确定文件夹中未读邮件的数量通过额外标题而不提取所有邮件?

我们知道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);
}];

但是如果用户在该文件夹中有数千条消息,这将花费我很多时间来执行。

那么这个问题的最佳解决方案是什么?

0 个答案:

没有答案