rfc9394v4.txt | rfc9394.txt | |||
---|---|---|---|---|
Internet Engineering Task Force (IETF) A. Melnikov | Internet Engineering Task Force (IETF) A. Melnikov | |||
Request for Comments: 9394 Isode | Request for Comments: 9394 Isode | |||
Updates: 4731, 5267 A. P. Achuthan | Updates: 4731, 5267 A. P. Achuthan | |||
Category: Standards Track V. Nagulakonda | Category: Standards Track V. Nagulakonda | |||
ISSN: 2070-1721 Yahoo! | ISSN: 2070-1721 Yahoo! | |||
L. Alves | L. Alves | |||
May 2023 | June 2023 | |||
IMAP PARTIAL Extension for Paged SEARCH and FETCH | IMAP PARTIAL Extension for Paged SEARCH and FETCH | |||
Abstract | Abstract | |||
The PARTIAL extension of the Internet Message Access Protocol (see | The PARTIAL extension of the Internet Message Access Protocol (see | |||
RFCs 3501 and 9051) allows clients to limit the number of SEARCH | RFCs 3501 and 9051) allows clients to limit the number of SEARCH | |||
results returned, as well as to perform incremental (paged) searches. | results returned, as well as to perform incremental (paged) searches. | |||
This also helps servers to optimize resource usage when performing | This also helps servers to optimize resource usage when performing | |||
searches. | searches. | |||
skipping to change at line 171 ¶ | skipping to change at line 171 ¶ | |||
Clients need not request PARTIAL results in any particular order. | Clients need not request PARTIAL results in any particular order. | |||
Because mailboxes may change, clients might wish to use PARTIAL in | Because mailboxes may change, clients might wish to use PARTIAL in | |||
combination with UPDATE (see [RFC5267]) if the server also advertises | combination with UPDATE (see [RFC5267]) if the server also advertises | |||
the "CONTEXT=SEARCH" capability, especially if the intent is to walk | the "CONTEXT=SEARCH" capability, especially if the intent is to walk | |||
a large set of results; however, these return options do not interact | a large set of results; however, these return options do not interact | |||
-- the UPDATE will provide notifications for all matching results. | -- the UPDATE will provide notifications for all matching results. | |||
// Let's assume that the A01 SEARCH without PARTIAL would return | // Let's assume that the A01 SEARCH without PARTIAL would return | |||
// 23764 results. | // 23764 results. | |||
C: A01 UID SEARCH RETURN (PARTIAL -1:-100) UNDELETED | C: A01 UID SEARCH RETURN (PARTIAL -1:-100) UNDELETED | |||
UNKEYWORD $Junk | UNKEYWORD $Junk | |||
S: * ESEARCH (TAG "A01") UID PARTIAL (-1:-100 ...) | S: * ESEARCH (TAG "A01") UID PARTIAL (-1:-100 ...) | |||
// 100 most recent results in set syntax elided. | // 100 most recent results in set syntax elided. | |||
S: A01 OK Completed. | S: A01 OK Completed. | |||
// Let's assume that the A02 SEARCH without PARTIAL would return | // Let's assume that the A02 SEARCH without PARTIAL would return | |||
// 23764 results. | // 23764 results. | |||
C: A02 UID SEARCH RETURN (PARTIAL 23500:24000) UNDELETED | C: A02 UID SEARCH RETURN (PARTIAL 23500:24000) UNDELETED | |||
UNKEYWORD $Junk | UNKEYWORD $Junk | |||
C: A03 UID SEARCH RETURN (PARTIAL 1:500) UNDELETED | C: A03 UID SEARCH RETURN (PARTIAL 1:500) UNDELETED | |||
UNKEYWORD $Junk | UNKEYWORD $Junk | |||
C: A04 UID SEARCH RETURN (PARTIAL 24000:24500) UNDELETED | C: A04 UID SEARCH RETURN (PARTIAL 24000:24500) UNDELETED | |||
UNKEYWORD $Junk | UNKEYWORD $Junk | |||
S: * ESEARCH (TAG "A02") UID PARTIAL (23500:24000 ...) | S: * ESEARCH (TAG "A02") UID PARTIAL (23500:24000 ...) | |||
// 264 results in set syntax elided; | // 264 results in set syntax elided; | |||
// this spans the end of the results. | // this spans the end of the results. | |||
S: A02 OK Completed. | S: A02 OK Completed. | |||
S: * ESEARCH (TAG "A03") UID PARTIAL (1:500 ...) | S: * ESEARCH (TAG "A03") UID PARTIAL (1:500 ...) | |||
// 500 results in set syntax elided. | // 500 results in set syntax elided. | |||
S: A03 OK Completed. | S: A03 OK Completed. | |||
S: * ESEARCH (TAG "A04") UID PARTIAL (24000:24500 NIL) | S: * ESEARCH (TAG "A04") UID PARTIAL (24000:24500 NIL) | |||
// No results are present; this is beyond the end of the results. | // No results are present; this is beyond the end of the results. | |||
S: A04 OK Completed. | S: A04 OK Completed. | |||
skipping to change at line 289 ¶ | skipping to change at line 289 ¶ | |||
3.4. Use of "PARTIAL" and "CONDSTORE" IMAP Extensions Together | 3.4. Use of "PARTIAL" and "CONDSTORE" IMAP Extensions Together | |||
This section is informative. | This section is informative. | |||
The PARTIAL FETCH modifier can be combined with the CHANGEDSINCE | The PARTIAL FETCH modifier can be combined with the CHANGEDSINCE | |||
FETCH modifier [RFC7162]. | FETCH modifier [RFC7162]. | |||
// Returning information for the last 30 messages in the UID range | // Returning information for the last 30 messages in the UID range | |||
// that have any flags/keywords modified since MODSEQ 98305 | // that have any flags/keywords modified since MODSEQ 98305 | |||
C: 101 UID FETCH 25900:26600 (UID FLAGS | C: 101 UID FETCH 25900:26600 (UID FLAGS | |||
) (PARTIAL -1:-30 CHANGEDSINCE 98305) | ) (PARTIAL -1:-30 CHANGEDSINCE 98305) | |||
S: * 12888 FETCH (FLAGS (\Flagged \Answered | S: * 12888 FETCH (FLAGS (\Flagged \Answered | |||
) MODSEQ (98306) UID 25997) | ) MODSEQ (98306) UID 25997) | |||
S: * 12890 FETCH (FLAGS () MODSEQ (98312) UID 26600) | S: * 12890 FETCH (FLAGS () MODSEQ (98312) UID 26600) | |||
S: 101 OK FETCH completed | S: 101 OK FETCH completed | |||
The above example causes the server to first select the last 30 | The above example causes the server to first select the last 30 | |||
messages and then only return flag changes for a subset of those | messages and then only return flag changes for a subset of those | |||
messages that have MODSEQ higher than 98305. | messages that have MODSEQ higher than 98305. | |||
Note that the order of PARTIAL and CHANGEDSINCE FETCH modifiers in | Note that the order of PARTIAL and CHANGEDSINCE FETCH modifiers in | |||
End of changes. 6 change blocks. | ||||
6 lines changed or deleted | 6 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. |