Ios 使用MailCore2检索最新电子邮件

Ios 使用MailCore2检索最新电子邮件,ios,mailcore2,Ios,Mailcore2,我正在加载我最新的电子邮件并保存最新的UID,因为稍后如果用户重新加载电子邮件列表,我希望从该UID获取到现在的所有电子邮件。。。为此,我使用 UInt64 start = lUid; UInt64 end = UINT64_MAX; MCOIMAPMessagesRequestKind requestKind = MCOIMAPMessagesRequestKindHeaders; MCOIndexSet *uids = [MCOIndexSet indexSetWithRange:MCOR

我正在加载我最新的电子邮件并保存最新的UID,因为稍后如果用户重新加载电子邮件列表,我希望从该UID获取到现在的所有电子邮件。。。为此,我使用

UInt64 start = lUid;
UInt64 end = UINT64_MAX;

MCOIMAPMessagesRequestKind requestKind = MCOIMAPMessagesRequestKindHeaders;
MCOIndexSet *uids = [MCOIndexSet indexSetWithRange:MCORangeMake(start, end)];

MCOIMAPFetchMessagesOperation *fetchOperation = [imapSession fetchMessagesOperationWithFolder:@"INBOX"
                                                                                  requestKind:requestKind
                                                                                         uids:uids];
此操作总是返回结果,但我收到了最新的电子邮件。。。所以我试着

UInt64 start = lUid + 1;
但事实完全一样

编辑

我正在查看记录器,最后一个UID是34038,所以当我调用时,开始参数是34039。。。那么为什么我会收到id为34038的电子邮件呢

2015-01-20 18:33:06.852 App[25022:730644] mailcore - IMAP: 8 UID FETCH 34039:* (UID ENVELOPE BODY.PEEK[HEADER.FIELDS (References)])
有人知道发生了什么吗

编辑2: 这是我的代码

UInt64 start = lUid + 1;
UInt64 end = UINT64_MAX;

MCOIMAPMessagesRequestKind requestKind = MCOIMAPMessagesRequestKindHeaders;
MCOIndexSet *uids = [MCOIndexSet indexSetWithRange:MCORangeMake(start, end)];

MCOIMAPFetchMessagesOperation *fetchOperation = [imapSession fetchMessagesOperationWithFolder:@"INBOX"
                                                                                  requestKind:requestKind
                                                                                         uids:uids];

void(^fetchHandler)(NSError *, NSArray *, MCOIndexSet *) = ^(NSError *error, NSArray *fetchedMessages, MCOIndexSet *vanishedMessages) {

    if( error ) {
        completionHandler(UIBackgroundFetchResultFailed);

        NSLog(@"Error downloading message headers:%@", error);
    }

    NSMutableArray *currentMessages = [NSMutableArray arrayWithArray:fetchedMessages];

    if( [currentMessages count] > 0 ) {

        MCOIMAPMessage *lastMessage = [fetchedMessages lastObject];
        NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults];
        [defaults setObject:@(lastMessage.uid) forKey:@"lastUID"];
        [defaults synchronize];

        completionHandler(UIBackgroundFetchResultNewData);

    }
    else {
        completionHandler(UIBackgroundFetchResultNoData);
    }

};

[fetchOperation start:fetchHandler];
这是我执行该调用时的记录器

2015-01-21 18:02:46.723 App[5021:473470] mailcore - IMAP: * OK Gimap     ready for requests from 181.167.207.42 b69mb75112208qhb
2015-01-21 18:02:46.725 App[5021:473470] mailcore - IMAP: 1 CAPABILITY
2015-01-21 18:02:46.955 App[5021:473470] mailcore - IMAP: * CAPABILITY IMAP4rev1 UNSELECT IDLE NAMESPACE QUOTA ID XLIST CHILDREN X-GM-EXT-1 XYZZY SASL-IR AUTH=XOAUTH AUTH=XOAUTH2 AUTH=PLAIN AUTH=PLAIN-CLIENTTOKEN
1 OK Thats all she wrote! b69mb75112208qhb
2015-01-21 18:02:46.955 App[5021:473470] mailcore - IMAP: 2     AUTHENTICATE XOAUTH2     dXNlcj1zYW50b21lZ29uemFsb0BnbWFpbC5jb20BYXV0aD1CZWFyZXIgeWEyOS5BZ0VQNnBQNFRJN1ZEMHlwempRNm01bTMwS2J0b0F6VzN6REdBbXc2dmh0VEF1TUJISVVaN3BobEtwY0M4dDlQRVFHcVhETHRlMU5VaFEBAQ==
2015-01-21 18:02:47.267 App[5021:473470] mailcore - IMAP: * CAPABILITY IMAP4rev1 UNSELECT IDLE NAMESPACE QUOTA ID XLIST CHILDREN X-GM-EXT-1 UIDPLUS COMPRESS=DEFLATE ENABLE MOVE CONDSTORE ESEARCH UTF8=ACCEPT
2 OK santomegonzalo@gmail.com authenticated (Success)
2015-01-21 18:02:47.267 App[5021:473470] mailcore - IMAP: 3 COMPRESS DEFLATE
2015-01-21 18:02:47.518 App[5021:473470] mailcore - IMAP: 3 OK Success
2015-01-21 18:02:47.518 App[5021:473470] mailcore - IMAP: 4 ENABLE CONDSTORE
2015-01-21 18:02:47.767 App[5021:473470] mailcore - IMAP: * ENABLED CONDSTORE
4 OK Success
2015-01-21 18:02:47.767 App[5021:473470] mailcore - IMAP: 5 NAMESPACE
2015-01-21 18:02:48.016 App[5021:473470] mailcore - IMAP: * NAMESPACE (("" "/")) NIL NIL
5 OK Success
2015-01-21 18:02:48.017 App[5021:473470] mailcore - IMAP: 6 ID NIL
2015-01-21 18:02:48.267 App[5021:473470] mailcore - IMAP: * ID ("name"     "GImap" "vendor" "Google, Inc." "support-url"     "http://support.google.com/mail" "version" "gmail_imap_150113.07_p0"     "remote-host" "181.167.207.42")
6 OK Success
2015-01-21 18:02:48.268 App[5021:473470] mailcore - IMAP: 7 SELECT INBOX
2015-01-21 18:02:48.770 App[5021:473470] mailcore - IMAP: * FLAGS     (\Answered \Flagged \Draft \Deleted \Seen $MailFlagBit1 $MailFlagBit0     $Phishing $Forwarded $MailFlagBit2 JunkRecorded $NotJunk NotJunk     $NotPhishing $Junk)
* OK [PERMANENTFLAGS (\Answered \Flagged \Draft \Deleted \Seen     $MailFlagBit1 $MailFlagBit0 $Phishing $Forwarded $MailFlagBit2 JunkRecorded $NotJunk NotJunk $NotPhishing $Junk \*)] Flags permitted.
* OK [UIDVALIDITY 617846230] UIDs valid.
* 20472 EXISTS
* 0 RECENT
* OK [UIDNEXT 34091] Predicted next UID.
* OK [HIGHESTMODSEQ 4668463]
7 OK [READ-WRITE] INBO
2015-01-21 18:02:48.771 App[5021:473470] mailcore - IMAP: X selected.     (Success)
2015-01-21 18:02:48.771 App[5021:473470] mailcore - IMAP: 8 UID FETCH     34092:* (UID ENVELOPE BODY.PEEK[HEADER.FIELDS (References)])
2015-01-21 18:02:49.405 App[5021:473470] mailcore - IMAP: * 20472 FETCH     (UID 34090 MODSEQ (4668387) ENVELOPE ("Wed, 21 Jan 2015 20:31:46 -0000"     "Subject" (("User" NIL "pullrequests-reply" "company.org")) (("User" NIL     "toreply" "company.org")) (("User" NIL "toreply" "company.org")) ((NIL NIL     "santomegonzalo" "gmail.com")) NIL NIL "<toreply@company.com>" "    <toreply@company.com>") BODY[HEADER.FIELDS (References)] {52}
References: <toreply@company.com

)
8 OK Success
2015-01-21 18:02:46.723 App[5021:473470]mailcore-IMAP:*OK Gimap准备好接受181.167.207.42 b69mb75112208qhb的请求
2015-01-21 18:02:46.725应用程序[5021:473470]邮件核心-IMAP:1功能
2015-01-21 18:02:46.955 App[5021:473470]mailcore-IMAP:*功能IMAP4rev1取消选择空闲命名空间配额ID XLIST CHILDREN X-GM-EXT-1 xyzy SASL-IR AUTH=XOAUTH AUTH=XOAUTH=XOAUTH2 AUTH=PLAIN AUTH=PLAIN-CLIENTTOKEN
1好的,她就写这些!b69mb75112208qhb
2015-01-21 18:02:46.955 App[5021:473470]mailcore-IMAP:2认证XOAUTH2 DXNLCJ1ZYW50B21LZ29UEMFSB0BNBWFFPBC5JB20BYV0AD1CZWFYZXIGEWEYOS5BZ0VQNNBQNFRJN1ZEMHLWEMPRNM01BTMWS2J0B0F6VZN6REDx2dMH0VEF1TUJISVAN3BOBEBEBetWY0M4DDLQRVHTHRLMU5VAFEBAQ==
2015-01-21 18:02:47.267应用程序[5021:473470]邮件核心-IMAP:*功能IMAP4rev1取消选择空闲命名空间配额ID XLIST CHILDREN X-GM-EXT-1 UIDPLUS COMPRESS=DEFLATE启用移动条件存储ESEARCH UTF8=ACCEPT
2好的santomegonzalo@gmail.com认证(成功)
2015-01-21 18:02:47.267应用程序[5021:473470]邮件核心-IMAP:3压缩放气
2015-01-21 18:02:47.518应用程序[5021:473470]邮件核心-IMAP:3正常成功
2015-01-21 18:02:47.518应用程序[5021:473470]邮件核心-IMAP:4启用CONDSTORE
2015-01-21 18:02:47.767应用程序[5021:473470]邮件核心-IMAP:*已启用的CONDSTORE
4 OK成功
2015-01-21 18:02:47.767应用程序[5021:473470]邮件核心-IMAP:5名称空间
2015-01-21 18:02:48.016应用程序[5021:473470]邮件核心-IMAP:*名称空间(“/”)无无无
5 OK成功
2015-01-21 18:02:48.017应用程序[5021:473470]邮件核心-IMAP:6 ID无
2015-01-21 18:02:48.267应用程序[5021:473470]邮件核心-IMAP:*ID(“名称”“GImap”“供应商”“谷歌公司”“支持url”http://support.google.com/mail“版本”“gmail\u imap\u 150113.07\u p0”“远程主机”“181.167.207.42”)
6 OK成功
2015-01-21 18:02:48.268应用程序[5021:473470]邮件核心-IMAP:7选择收件箱
2015-01-21 18:02:48.770应用程序[5021:473470]mailcore-IMAP:*标志(\responsed\Flagged\Draft\Deleted\Seen$mailsflagbit1$mailsflagbit0$Phishing$Forwarded$mailsflagbit2 JunkRecorded$NotJunk$NotPhishing$Junk)
*确定[PERMANENTFLAGS(\Answeed\Flagged\Draft\Deleted\Seen$MailFlagBit1$MailFlagBit0$Phishing$Forwarded$MailFlagBit2 JunkRecorded$NotJunk NotJunk$NotPhishing$Junk\*)允许使用标志。
*确定[UID有效性617846230]UID有效。
*20472存在
*0最近
*正常[UIDNEXT 34091]预测下一个UID。
*正常[最高ModSeq 4668463]
7正常[读写]INBO
2015-01-21 18:02:48.771应用程序[5021:473470]邮件核心-IMAP:X已选定。(成功)
2015-01-21 18:02:48.771应用程序[5021:473470]邮件核心-IMAP:8 UID FETCH 34092:*(UID信封正文.PEEK[标题.字段(参考)])
2015-01-21 18:02:49.405 App[5021:473470]mailcore-IMAP:*20472取回(UID 34090 MODSEQ(4668387)信封(“Wed,2015年1月21日20:31:46-0000”“Subject”(“User”NIL“pullrequests reply”“company.org”)(“User”NIL“toreply”“company.org”)(“User”NIL“toreply”“company.org”)(“User”NIL“NIL”toreply”“company.org”)(“NIL NIL”santomegonzalo”“gmail.com”)NIL”“”)正文[HEADER.FIELDS(References)]{52}

参考:你能显示代码的结果、参数的值和连接日志吗?@DinhViêtHoá我刚刚添加了我的代码和记录器,当我从后台访问时,我正在使用这些代码。你知道发生了什么吗?fetchedMessages包括日志中提到的消息?遵循IMAP规范,34039:*表示从34039到最后一个uid。如果最后一个uid是34038,它将等同于34039:34038,在这种情况下,IMAP说它应该被解释为34038:34039。因此,电子邮件34038被提取。@DinhViêtHoá因此我需要检查最后一封电子邮件是否是34038,并且是e邮件存在于我的fetchedMessages中我需要跳过该电子邮件?或者您有更好的主意从34038 UID获取最新电子邮件…因为在我看来IMAP需要返回空的fetchedMessages…谢谢!我可能需要在该操作的实现中对其进行改进。作为一种解决方法,现在,您可以从列表中筛选它们。