rfc9394xml2.original.xml   rfc9394.xml 
<?xml version="1.0"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
<!ENTITY rfc2119 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/referenc
e.RFC.2119.xml'>
<!ENTITY rfc3501 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/referenc
e.RFC.3501.xml'>
<!ENTITY rfc4731 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/referenc
e.RFC.4731.xml'>
<!ENTITY rfc5267 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/referenc
e.RFC.5267.xml'>
<!ENTITY rfc8174 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/referenc
e.RFC.8174.xml'>
<!ENTITY rfc9051 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/referenc
e.RFC.9051.xml'>
<!-- [CS] updated by Chris 01/23/23 -->
<!DOCTYPE rfc [
<!ENTITY nbsp "&#160;">
<!ENTITY zwsp "&#8203;">
<!ENTITY nbhy "&#8209;">
<!ENTITY wj "&#8288;">
]> ]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt"?>
<rfc category="std" ipr="pre5378Trust200902" updates="5267, 4731" docName="draft
-ietf-extra-imap-partial-04">
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<?rfc toc="yes" ?>
<?rfc symrefs="yes" ?>
<?rfc sortrefs="yes"?>
<?rfc iprnotified="no" ?>
<?rfc strict="yes" ?>
<?rfc comments="yes" ?>
<?rfc inline="yes" ?>
<?rfc compact="yes"?>
<?rfc subcompact="no"?>
<front>
<title abbrev="IMAP PARTIAL">
IMAP Paged SEARCH &amp; FETCH Extension
</title>
<author initials="A." surname="Melnikov" fullname="Alexey Melniko
v">
<organization abbrev="Isode">
Isode Limited
</organization>
<address>
<email>alexey.melnikov@isode.com</email>
<uri>https://www.isode.com</uri>
</address>
</author>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" submissionType="IETF" category="
std" consensus="true" docName="draft-ietf-extra-imap-partial-04" number="9394" i
pr="pre5378Trust200902" updates="4731, 5267" obsoletes="" xml:lang="en" tocInclu
de="true" symRefs="true" sortRefs="true" version="3">
<!-- xml2rfc v2v3 conversion 3.15.3 -->
<front>
<title abbrev="IMAP PARTIAL Extension">
IMAP PARTIAL Extension for Paged SEARCH and FETCH
</title>
<seriesInfo name="RFC" value="9394"/>
<author initials="A." surname="Melnikov" fullname="Alexey Melnikov">
<organization abbrev="Isode">Isode Limited</organization>
<address>
<email>alexey.melnikov@isode.com</email>
<uri>https://www.isode.com</uri>
</address>
</author>
<author initials="A. P." surname="Achuthan" fullname="Arun Prakash Achuthan" > <author initials="A. P." surname="Achuthan" fullname="Arun Prakash Achuthan" >
<organization abbrev="Yahoo!"> <organization abbrev="Yahoo!">Yahoo!</organization>
Yahoo!
</organization>
<address> <address>
<email>arunprakash@myyahoo.com</email> <email>arunprakash@myyahoo.com</email>
</address> </address>
</author> </author>
<author initials="V." surname="Nagulakonda" fullname="Vikram Nagulakonda"> <author initials="V." surname="Nagulakonda" fullname="Vikram Nagulakonda">
<organization abbrev="Yahoo!"> <organization abbrev="Yahoo!">Yahoo!</organization>
Yahoo!
</organization>
<address> <address>
<email>nvikram_imap@yahoo.com</email> <email>nvikram_imap@yahoo.com</email>
</address> </address>
</author> </author>
<author initials="L." surname="Alves" fullname="Luis Alves"> <author initials="L." surname="Alves" fullname="Luis Alves">
<address> <address>
<email>luis.alves@lafaspot.com</email> <email>luis.alves@lafaspot.com</email>
</address> </address>
</author> </author>
<date year="2023" month="June" />
<date year="2022"/> <area>art</area>
<abstract> <workgroup>extra</workgroup>
<t>The PARTIAL extension of the Internet Message Access P <abstract>
rotocol (RFC 3501/RFC 9051) <t>The PARTIAL extension of the Internet Message Access Protocol (see RFCs
allows clients to limit the number of search results retu 3501 and 9051)
rned, as well as to perform incremental (paged) searches. allows clients to limit the number of SEARCH results ret
urned, as well as to perform incremental (paged) searches.
This also helps servers to optimize resource usage when performing searche s. This also helps servers to optimize resource usage when performing searche s.
</t> </t>
<t>This document extends the PARTIAL SEARCH return option originally speci
fied in RFC 5267.
It also clarifies some interactions between RFC 5267 and RFCs 4731 and 905
1.</t>
<t>This document extends PARTIAL SEARCH return option originally specified <t>This document updates RFCs 4731 and 5267.</t>
in RFC 5267.
It also clarifies some interactions between RFC 5267 and RFC 4731/RFC 9051
.</t>
</abstract> </abstract>
</front> </front>
<middle> <middle>
<section numbered="true" toc="default">
<section title="Introduction and Overview"> <name>Introduction and Overview</name>
<t>This document defines an extension to the Internet Message Access Proto
<t>This document defines an extension to the Internet Message Access Proto col <xref target="RFC3501" format="default"/> <xref target="RFC9051" format="def
col <xref target="RFC3501"/> ault"/>
for performing incremental searches and fetches. for performing incremental searches and fetches.
This extension is compatible with both IMAP4rev1 <xref target="RFC3501"/> This extension is compatible with both IMAP4rev1 <xref target="RFC3501" fo
and IMAP4rev2 <xref target="RFC9051"/>.</t> rmat="default"/> and IMAP4rev2 <xref target="RFC9051" format="default"/>.
This extension uses IMAP extensibility rules defined in <xref target="RFC4
466"/>.</t>
<t> <t>
The PARTIAL extension of the Internet Message Access Protocol (RFC 3501/RF The PARTIAL extension of the Internet Message Access Protocol
C 9051) allows clients to limit the number of SEARCH results returned, as well as
allows clients to limit the number of search results returned, as well as to perform incremental (paged) searches.
to perform incremental (paged) searches.
This also helps servers to optimize resource usage when performing searche s. This also helps servers to optimize resource usage when performing searche s.
</t> </t>
<t>This document extends the PARTIAL SEARCH return option originally speci
<t>This document extends PARTIAL SEARCH return option originally specified fied in RFC 5267.
in RFC 5267. It also clarifies some interactions between RFC 5267 and RFCs 4731 and 905
It also clarifies some interactions between RFC 5267 and RFC 4731/RFC 9051 1.</t>
.</t> </section>
<section numbered="true" toc="default">
</section> <name>Document Conventions</name>
<t>In protocol examples, this document uses a prefix of "C: " to denote li
<section title="Document Conventions"> nes sent by the client to the server and
<t>In protocol examples, this document uses a prefix of " "S: " for lines sent by the server to the client. Lines
C: " to denote lines sent by the client to the server, and prefixed with "// " are comments explaining the previous protocol line.
"S: " for lines sent by the server to the client. Lines p These prefixes and comments are not part of the protocol
refixed with "// " are comments explaining the previous protocol line. . Lines without any of these prefixes are continuations of the previous line,
These prefixes and comments are not part of the protocol. and no line breaks are present in the protocol unless sp
Lines without any of these prefixes are continuations of the previous line, ecifically mentioned.</t>
and no line break is present in the protocol unless speci <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>",
fically mentioned.</t> "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>",
"<bcp14>SHALL NOT</bcp14>", "<bcp14>SHOULD</bcp14>",
<t> "<bcp14>SHOULD NOT</bcp14>",
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document
"OPTIONAL" in this document are to be interpreted as described in BC are to be interpreted as described in BCP&nbsp;14
P <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only
14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, they appear in all capitals, as shown here.</t>
when, and only when, they appear in all capitals, as shown here. <t>Other capitalized words are IMAP key words <xref target="RFC3501"
</t> format="default"/> <xref target="RFC9051" format="default"/>
or key words from this document.</t>
<!--///Confusion: IMAP keyword is something else. Use "Protocol elements" </section>
instead?--> <section anchor="imap-partial" numbered="true" toc="default">
<t>Other capitalised words are IMAP keywords <xref target="RFC3501"/ <name>The PARTIAL Extension</name>
><xref target="RFC9051"/> <t>An IMAP server advertises support for the PARTIAL extension
or keywords from this document.</t> by including the "PARTIAL" capability in the CAPABILITY response / respo
nse code.</t>
</section> <section anchor="partial-def" numbered="true" toc="default">
<name>Incremental SEARCH and Partial Results</name>
<section title="The PARTIAL extension" anchor="imap-partial"> <t>
<t>An IMAP server advertises support for the PARTIAL extension
by including the "PARTIAL" capability in the CAPABILITY response/respons
e code.</t>
<section title="Incremental SEARCH and partial results" anchor="partial-de
f">
<t>
The PARTIAL SEARCH return option causes the server to provide in an The PARTIAL SEARCH return option causes the server to provide in an
ESEARCH <xref target="RFC4731"/><xref target="RFC9051"/> response a subset of the results denoted by the sequence ESEARCH response <xref target="RFC4731" format="default"/> <xref target="R FC9051" format="default"/> a subset of the results denoted by the sequence
range given as the mandatory argument. range given as the mandatory argument.
The first result (message with the lowest matching UID) is 1; The first result (message with the lowest matching Unique
Identifier (UID)) is 1;
thus, the first 500 results would be obtained by a return option of thus, the first 500 results would be obtained by a return option of
"PARTIAL 1:500", and the second 500 by "PARTIAL 501:1000". This "PARTIAL 1:500" and the second 500 by "PARTIAL 501:1000". This
intentionally mirrors message sequence numbers. intentionally mirrors message sequence numbers.
</t> </t>
<t>
<t> It is also possible to direct the server to start the SEARCH from the late
It is also possible to direct the server to start SEARCH from the latest st
matching (with the highest UID) message. This can be done by prepending "- " matching (with the highest UID) message. This can be done by prepending "- "
to the index. For example -1 is the last message, -2 is next to the last a nd so on. to the index. For example, -1 is the last message, -2 is next to the last, and so on.
Using this syntax helps server implementations to optimize their SEARCHes. Using this syntax helps server implementations to optimize their SEARCHes.
</t> </t>
<t>
<t> A single command <bcp14>MUST NOT</bcp14> contain more than one PARTIAL or
A single command MUST NOT contain more than one PARTIAL or ALL search ALL search
return option -- that is, either one PARTIAL, one ALL, or neither return option; that is, either one PARTIAL, one ALL, or neither
PARTIAL nor ALL is allowed. PARTIAL nor ALL is allowed.
</t> </t>
<t>
<t> For SEARCH results, the entire list of results <bcp14>MUST</bcp14> be orde
For SEARCH results, the entire result list MUST be ordered in mailbox red in mailbox
order, that is, in UID or message sequence number order. order -- that is, in UID or message sequence number order.
</t> </t>
<t>
<t> In cases where a PARTIAL SEARCH return option references results that do n
Where a PARTIAL SEARCH return option references results that do not ot
exist, by using a range which starts or ends higher (or lower<!--In case " exist by using a range that starts or ends higher (or lower) than the curr
-N" syntax is used-->) than the current ent
number of results, then the server returns the results that are in number of results, the server returns the results that are in
the set. This yields a PARTIAL return data item that has, as the set. This yields a PARTIAL return data item that has, as
payload, the original range and a potentially missing set of results payload, the original range and a potentially missing set of results
that may be shorter than the extent of the range. that may be shorter than the extent of the range.
If the whole range references results that do not exist, If the whole range references results that do not exist,
a special value "NIL" is returned by the server instead of the sequence se t. a special value "NIL" is returned by the server instead of the sequence se t.
</t> </t>
<t>
<t>
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 Because mailboxes may change, clients might wish to use PARTIAL
in combination with UPDATE (see <xref target="RFC5267"/>) if the server in combination with UPDATE (see <xref target="RFC5267" format="default"/>)
also advertises CONTEXT=SEARCH capability, especially if the intent is to if the server
walk a also advertises the "CONTEXT=SEARCH" capability, especially if the intent
is to walk a
large set of results; however, these return options do not interact 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.
</t> </t>
<artwork name="" type="" align="left" alt=""><![CDATA[
<figure><artwork><![CDATA[
// 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.
]]></artwork></figure> ]]></artwork>
<artwork name="" type="" align="left" alt=""><![CDATA[
<figure><artwork><![CDATA[
// 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.
]]></artwork></figure> ]]></artwork>
</section>
</section> <section numbered="true" toc="default">
<name>Interaction between PARTIAL, MIN, MAX, and SAVE SEARCH Return Opti
<section title="Interaction between PARTIAL, MIN, MAX and SAVE SEARCH re ons</name>
turn options"> <t>This section only applies if the server advertises the "PARTIAL" IMAP
capability or "CONTEXT=SEARCH" <xref target="RFC5267" format="default"/>,
<t>This section only applies if the server advertises PARTIAL IMAP capabil together with "ESEARCH" <xref target="RFC4731" format="default"/> and/or I
ity or CONTEXT=SEARCH <xref target="RFC5267"/>, MAP4rev2 <xref target="RFC9051" format="default"/>.</t>
together with ESEARCH <xref target="RFC4731"/> and/or IMAP4rev2 <xref targ <t>
et="RFC9051"/>.</t>
<t>
The SAVE result option doesn't change whether the server would return The SAVE result option doesn't change whether the server would return
items corresponding to PARTIAL SEARCH result options. items corresponding to PARTIAL SEARCH result options.
</t> </t>
<t>
<t> As specified in <xref target="partial-def" format="default"/>, it is an er
As specified in <xref target="partial-def"/>, it is an error to specify bo ror to specify both the
th
PARTIAL and ALL result options in the same SEARCH command. PARTIAL and ALL result options in the same SEARCH command.
</t> </t>
<t>
<t>
When the SAVE result option is combined with the PARTIAL When the SAVE result option is combined with the PARTIAL
result option, and none of MIN/MAX/COUNT result options is result option and none of the MIN/MAX/COUNT result options are
present, the corresponding PARTIAL is returned, present, the corresponding PARTIAL is returned,
and the "$" marker would contain <!--references to-->all and the "$" marker would contain references to all
messages returned by the PARTIAL result option. messages returned by the PARTIAL result option.
</t> </t>
<t>
<t> When the SAVE and PARTIAL result options are combined with the MIN or MAX
When the SAVE and PARTIAL result options are combined with the MIN or the result option and the COUNT result option is
MAX absent, the corresponding PARTIAL result and MIN/MAX are returned (if the
result option, and the COUNT result option is SEARCH result
absent, the corresponding PARTIAL result and MIN/MAX is returned (if the s is not empty), and the "$" marker would contain references to all
earch result
is not empty), and the "$" marker would contain <!--references to-->all
messages returned by the PARTIAL result option together with the correspon ding MIN/MAX message. messages returned by the PARTIAL result option together with the correspon ding MIN/MAX message.
</t> </t>
<t>
<t> If the SAVE and PARTIAL result options are combined with both the MIN and
If the SAVE and PARTIAL result options are combined with both MIN and MAX MAX result
result options and the COUNT result option is absent,
options, and the COUNT result options is absent, the PARTIAL, MIN, and MAX result options are returned (if the SEARCH resul
the PARTIAL, MIN and MAX are returned (if the search result is not empty), t is not empty),
and the "$" marker would contain <!--references to-->all and the "$" marker would contain references to all
messages returned by the PARTIAL result option together with the MIN and t messages returned by the PARTIAL result option together with the MIN and M
he MAX messages. AX messages.
</t> </t>
<t>
<t>
If the SAVE and PARTIAL result options are combined with the COUNT If the SAVE and PARTIAL result options are combined with the COUNT
result option, the PARTIAL and COUNT are returned, result option, the PARTIAL and COUNT result options are returned,
and the "$" marker would always contain all messages and the "$" marker would always contain references to all messages
found by the SEARCH or UID SEARCH command. found by the SEARCH or UID SEARCH command.
</t> </t>
<t keepWithNext="true">
<texttable> <xref target="tab1"/> summarizes additional requirements for ESEARCH
<preamble>
The following table summarizes the additional requirement on ESEARCH
server implementations described in this section. server implementations described in this section.
</preamble> </t>
<t>
<ttcol align='center'>Combination of Result option</ttcol> Note regarding <xref target="tab1"/>: "[m]" means optional "MIN" and/o
<ttcol align='center'>"$" marker value</ttcol> r "MAX".
</t>
<c>SAVE PARTIAL</c>
<c>PARTIAL</c>
<c>SAVE PARTIAL MIN</c>
<c>PARTIAL &amp; MIN</c>
<c>SAVE PARTIAL MAX</c>
<c>PARTIAL &amp; MAX</c>
<c>SAVE PARTIAL MIN MAX</c>
<c>PARTIAL &amp; MIN &amp; MAX</c>
<c>SAVE PARTIAL COUNT [m]</c>
<c>all found messages</c>
<postamble>
Note for the table: '[m]' means optional "MIN" and/or "MAX"
</postamble>
</texttable>
</section>
<section title="Extension to UID FETCH">
<t>The PARTIAL extension also extends the UID FETCH command with a PARTIAL <table anchor="tab1" align="center">
FETCH modifier. <thead>
<tr>
<th align="center">Combination of Result Options</th>
<th align="center">"$" Marker Value</th>
</tr>
</thead>
<tbody>
<tr>
<td align="center">SAVE PARTIAL</td>
<td align="center">PARTIAL</td>
</tr>
<tr>
<td align="center">SAVE PARTIAL MIN</td>
<td align="center">PARTIAL &amp; MIN</td>
</tr>
<tr>
<td align="center">SAVE PARTIAL MAX</td>
<td align="center">PARTIAL &amp; MAX</td>
</tr>
<tr>
<td align="center">SAVE PARTIAL MIN MAX</td>
<td align="center">PARTIAL &amp; MIN &amp; MAX</td>
</tr>
<tr>
<td align="center">SAVE PARTIAL COUNT [m]</td>
<td align="center">all found messages</td>
</tr>
</tbody>
</table>
</section>
<section numbered="true" toc="default">
<name>Extension to UID FETCH</name>
<t>The PARTIAL extension also extends the UID FETCH command with a PARTI
AL FETCH modifier.
The PARTIAL FETCH modifier has the same syntax as the PARTIAL SEARCH resul t option. The PARTIAL FETCH modifier has the same syntax as the PARTIAL SEARCH resul t option.
Presence of the PARTIAL FETCH modifier instructs the server to only return The presence of the PARTIAL FETCH modifier instructs the server to only re
FETCH results turn FETCH results
for messages in the specified range. It is useful when the sequence-set (f for messages in the specified range. It is useful when the sequence-set (f
irst) parameter to irst) parameter in
the UID FETCH command includes unknown number of messages.</t> the UID FETCH command includes an unknown number of messages.</t>
<artwork name="" type="" align="left" alt=""><![CDATA[
<figure><artwork><![CDATA[
// Returning information for the last 3 messages in the UID range // Returning information for the last 3 messages in the UID range
C: 10 UID FETCH 25900:26600 (UID FLAGS) (PARTIAL -1:-3) C: 10 UID FETCH 25900:26600 (UID FLAGS) (PARTIAL -1:-3)
S: * 12888 FETCH (FLAGS (\Seen) UID 25996) S: * 12888 FETCH (FLAGS (\Seen) UID 25996)
S: * 12889 FETCH (FLAGS (\Flagged \Answered) UID 25997) S: * 12889 FETCH (FLAGS (\Flagged \Answered) UID 25997)
S: * 12890 FETCH (FLAGS () UID 26600) S: * 12890 FETCH (FLAGS () UID 26600)
S: 10 OK FETCH completed S: 10 OK FETCH completed
]]></artwork></figure> ]]></artwork>
<artwork name="" type="" align="left" alt=""><![CDATA[
<figure><artwork><![CDATA[
// Returning information for the first 5 messages in the UID range // Returning information for the first 5 messages in the UID range
C: 11 UID FETCH 25900:26600 (UID FLAGS) (PARTIAL 1:5) C: 11 UID FETCH 25900:26600 (UID FLAGS) (PARTIAL 1:5)
S: * 12591 FETCH (FLAGS (\Seen) UID 25900) S: * 12591 FETCH (FLAGS (\Seen) UID 25900)
S: * 12592 FETCH (FLAGS (\Flagged) UID 25902) S: * 12592 FETCH (FLAGS (\Flagged) UID 25902)
S: * 12593 FETCH (FLAGS (\Answered) UID 26310) S: * 12593 FETCH (FLAGS (\Answered) UID 26310)
S: * 12594 FETCH (FLAGS () UID 26311) S: * 12594 FETCH (FLAGS () UID 26311)
S: * 12595 FETCH (FLAGS (\Answered) UID 26498) S: * 12595 FETCH (FLAGS (\Answered) UID 26498)
S: 11 OK FETCH completed S: 11 OK FETCH completed
]]></artwork></figure> ]]></artwork>
</section>
</section> <section numbered="true" toc="default">
<name>Use of &quot;PARTIAL&quot; and &quot;CONDSTORE&quot; IMAP Extensio
<section title="Use of PARTIAL and CONDSTORE IMAP extensions together"> ns Together</name>
<t>This section is informative.</t>
<t>This section is informative.</t> <t>The PARTIAL FETCH modifier can be combined with the CHANGEDSINCE FETC
H modifier <xref target="RFC7162"/>.</t>
<t>The PARTIAL FETCH modifier can be combined with the CHANGEDSINCE <artwork name="" type="" align="left" alt=""><![CDATA[
FETCH modifier.</t>
<figure><artwork><![CDATA[
// 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 flag/keyword modified since modseq 98305 // that have any flags/keywords modified since MODSEQ 98305
C: 101 UID FETCH 25900:26600 (UID FLAGS) (PARTIAL -1:-30 CHANGEDSINCE 98305) C: 101 UID FETCH 25900:26600 (UID FLAGS
S: * 12888 FETCH (FLAGS (\Flagged \Answered) MODSEQ (98306) UID 25997) ) (PARTIAL -1:-30 CHANGEDSINCE 98305)
S: * 12888 FETCH (FLAGS (\Flagged \Answered
) 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
]]></artwork></figure> ]]></artwork>
<t>The above example causes the server to first select the last 30 m <t>The above example causes the server to first select the last 30 messa
essages ges
and then only return flag changes for subset of these messages which and then only return flag changes for a subset of those messages tha
t
have MODSEQ higher than 98305.</t> have MODSEQ higher than 98305.</t>
<t>Note that the order of PARTIAL and CHANGEDSINCE FETCH modifiers in th
<t>Note that the order of PARTIAL and CHANGEDSINCE FETCH modifiers i e UID FETCH command
n the UID FETCH command is not important, i.e., the above example can also use the
is not important, i.e. the above example can also use
"UID FETCH 25900:26600 (UID FLAGS) (CHANGEDSINCE 98305 PARTIAL -1:-3 0)" "UID FETCH 25900:26600 (UID FLAGS) (CHANGEDSINCE 98305 PARTIAL -1:-3 0)"
command and it would result in the same responses.</t> command and it would result in the same responses.</t>
</section>
</section>
</section> </section>
<section numbered="true" toc="default">
<name>Formal Syntax</name>
<t>The following syntax specification uses the Augmented Backus-Naur Form
(ABNF) notation as specified in <xref target="RFC5234" format="default"/>.</t>
<t>Non-terminals referenced but not defined below are as defined by <xref
target="RFC3501" format="default">IMAP4rev1</xref> or <xref target="RFC9051" for
mat="default">IMAP4rev2</xref>.</t>
<t>Except as noted otherwise, all alphabetic characters are case insensiti
ve.
The use of uppercase or lowercase characters to define token strings is fo
r editorial clarity only.
Implementations <bcp14>MUST</bcp14> accept these strings in a case-insensi
tive fashion.</t>
<section title="Formal syntax"> <sourcecode type="abnf"><![CDATA[
<t>The following syntax specification uses the Augmented
Backus-Naur Form (ABNF) notation as specified in <xref target="ABNF"/>.</t>
<t>Non-terminals referenced but not defined below are as
defined by <xref target="RFC3501">IMAP4rev1</xref> or <xref target="RFC9051">IMA
P4rev2</xref>.</t>
<t>Except as noted otherwise, all alphabetic characters a
re case-insensitive.
The use of upper or lower case characters to define token strings is for e
ditorial clarity only.
Implementations MUST accept these strings in a case-insensitive fashion.</
t>
<figure><artwork>
<![CDATA[
SP = <Defined in RFC 5234> SP = <Defined in RFC 5234>
MINUS = "-" MINUS = "-"
capability =/ "PARTIAL" capability =/ "PARTIAL"
;; <capability> from [RFC3501] ;; <capability> from [RFC3501].
modifier-partial = "PARTIAL" SP partial-range modifier-partial = "PARTIAL" SP partial-range
partial-range-first = nz-number ":" nz-number partial-range-first = nz-number ":" nz-number
;; Request to search from oldest (lowest UIDs) to ;; Request to search from oldest (lowest UIDs) to
;; more recent messages. ;; more recent messages.
;; A range 500:400 is the same as 400:500. ;; A range 500:400 is the same as 400:500.
;; This is similar to <seq-range> from [RFC3501], ;; This is similar to <seq-range> from [RFC3501]
;; but cannot contain "*". ;; but cannot contain "*".
partial-range-last = MINUS nz-number ":" MINUS nz-number partial-range-last = MINUS nz-number ":" MINUS nz-number
;; Request to search from newest (highest UIDs) to ;; Request to search from newest (highest UIDs) to
;; oldest messages. ;; oldest messages.
;; A range -500:-400 is the same as -400:-500. ;; A range -500:-400 is the same as -400:-500.
partial-range = partial-range-first / partial-range-last partial-range = partial-range-first / partial-range-last
search-return-opt =/ modifier-partial search-return-opt =/ modifier-partial
;; All conform to <search-return-opt>, from [IMAP-ABNF]/[RFC9051] ;; All conform to <search-return-opt> from
;; [RFC4466] and [RFC9051].
search-return-data =/ ret-data-partial search-return-data =/ ret-data-partial
ret-data-partial = "PARTIAL" ret-data-partial = "PARTIAL"
SP "(" partial-range SP partial-results ")" SP "(" partial-range SP partial-results ")"
;; <partial-range> is the requested range. ;; <partial-range> is the requested range.
partial-results = sequence-set / "NIL" partial-results = sequence-set / "NIL"
;; <sequence-set> from [RFC3501]. ;; <sequence-set> from [RFC3501].
;; NIL indicates no results correspond to the requested range. ;; NIL indicates that no results correspond to
;; the requested range.
tagged-ext-simple =/ partial-range-last tagged-ext-simple =/ partial-range-last
fetch-modifier =/ modifier-partial fetch-modifier =/ modifier-partial
]]></artwork></figure> ;; <fetch-modifier> from [RFC4466].
]]></sourcecode>
</section>
<section title="Security Considerations">
</section>
<section numbered="true" toc="default">
<name>Security Considerations</name>
<t> <t>
This document defines an additional IMAP4 capability. As such, it This document defines an additional IMAP4 capability. As such, it
does not change the underlying security considerations of <xref target="RF does not change the underlying security considerations of IMAP4rev1
C3501"/> and IMAP4rev2 <xref target="RFC9051"/>. <xref target="RFC3501" format="default"/> and IMAP4rev2 <xref target="RFC9051" f
ormat="default"/>.
The authors and reviewers believe that no new security issues are The authors and reviewers believe that no new security issues are
introduced with these additional IMAP4 capabilities. introduced with these additional IMAP4 capabilities.
</t> </t>
<t> <t>
This document defines an optimization that can both reduce the amount of w This document defines an optimization that can reduce both the amount of w
ork ork
performed by the server, as well at the amount of data returned to the cli performed by the server and the amount of data returned to the client.
ent.
Use of this extension is likely to cause the server and the client to use less memory Use of this extension is likely to cause the server and the client to use less memory
than when the extension is not used. However, as this is going than when the extension is not used. However, as this is going
to be new code in both the client and the server, rigorous testing of such code to be new code in both the client and the server, rigorous testing of such code
is required in order to avoid introducing of new implementation bugs. is required in order to avoid introducing new implementation bugs.
</t> </t>
</section> </section>
<section numbered="true" toc="default">
<section title="IANA Considerations"> <name>IANA Considerations</name>
<section numbered="true" toc="default">
<section title="Changes/additions to the IMAP4 capabilities registry"> <name>Changes/Additions to the IMAP Capabilities Registry</name>
<t>
<t> IMAP4 capabilities are registered by publishing
IMAP4 capabilities are registered by publishing a a Standards Track or
standards track or IESG-approved Informational or Experimental RFC.
IESG approved Informational or Experimental RFC. The registry is currently located at
The registry is currently located at: <eref target="https://www.iana.org/assignments/imap-capabilities" brackets="a
</t> ngle"/>.
</t>
<figure><artwork><![CDATA[ <t>IANA has added the PARTIAL extension to the "IMAP Capabilities" regis
https://www.iana.org/assignments/imap4-capabilities try
]]></artwork></figure> with RFC 9394 as the reference.
</t>
<t>IANA is requested to add definition of the PARTIAL ext
ension
with RFC XXXX as the reference.
</t>
</section> </section>
</section> </section>
</middle>
<back>
<section title="Acknowledgments"> <displayreference target="RFC5234" to="ABNF"/>
<t>This document was motivated by Yahoo! team and their questions
about best client practices for dealing with large mailboxes.</t>
<t>
Editor of this document would like to thank the following
people
who provided useful comments or participated in discussio
ns of
this document: Timo Sirainen and Barry Leiba.
</t>
<t>This document uses lots of text from RFC 5267. Thus work of
the RFC 5267 authors Dave Cridland and Curtis King is appreciated.
</t>
</section>
</middle>
<back>
<references title="Normative References">
&rfc2119;
&rfc8174;
&rfc3501;
&rfc4731;
&rfc5267;
<reference anchor="ABNF">
<front>
<title>Augmented BNF for Syntax Specifica
tions: ABNF</title>
<author initials="D" surname="Crocker" fu
llname="Dave Crocker" role="editor">
<organization />
</author>
<author initials="P" surname="Overell" fu
llname="Paul Overell" role="editor">
<organization />
</author>
<date year="2008" month="January"/>
</front>
<seriesInfo name="RFC" value="5234" />
<format type="TXT" target="https://www.rfc-editor
.org/info/rfc5234" />
</reference>
&rfc9051; <references>
<name>References</name>
<references>
<name>Normative References</name>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.211
9.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.817
4.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.350
1.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.446
6.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.473
1.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.526
7.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.523
4.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.905
1.xml"/>
</references> </references>
<references>
<!-- <name>Informative References</name>
<references title="Informative References"> <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.716
2.xml"/>
</references> </references>
--> </references>
</back> <section numbered="false" toc="default">
<name>Acknowledgments</name>
<t>This document was motivated by the Yahoo! team and their questions
about best client practices for dealing with large mailboxes.</t>
<t>
The authors of this document would like to thank the fol
lowing people,
who provided useful comments or participated in discussi
ons of
this document: <contact fullname="Timo Sirainen"/> and <contact fullname="
Barry Leiba"/>.
</t>
<t>This document uses a lot of text from RFC 5267. Thus, the work of
the RFC 5267 authors -- <contact fullname="Dave Cridland"/> and <contact f
ullname="Curtis King"/> -- is appreciated.
</t>
</section>
</back>
</rfc> </rfc>
 End of changes. 73 change blocks. 
388 lines changed or deleted 342 lines changed or added

This html diff was produced by rfcdiff 1.48.