rfc7162v2.txt   rfc7162_space.txt 
skipping to change at page 3, line 7 skipping to change at page 3, line 7
3.1.9. Interaction with IMAP SORT and THREAD Extensions . . 21 3.1.9. Interaction with IMAP SORT and THREAD Extensions . . 21
3.1.10. Interaction with IMAP ESORT and ESEARCH Extensions . 22 3.1.10. Interaction with IMAP ESORT and ESEARCH Extensions . 22
3.1.11. Additional Quality-of-Implementation Issues . . . . . 22 3.1.11. Additional Quality-of-Implementation Issues . . . . . 22
3.1.12. CONDSTORE Server Implementation Considerations . . . 23 3.1.12. CONDSTORE Server Implementation Considerations . . . 23
3.2. QRESYNC Extension . . . . . . . . . . . . . . . . . . . . 24 3.2. QRESYNC Extension . . . . . . . . . . . . . . . . . . . . 24
3.2.1. Impact on CONDSTORE-only Clients . . . . . . . . . . 24 3.2.1. Impact on CONDSTORE-only Clients . . . . . . . . . . 24
3.2.2. Advertising Support for QRESYNC . . . . . . . . . . . 25 3.2.2. Advertising Support for QRESYNC . . . . . . . . . . . 25
3.2.3. Use of ENABLE . . . . . . . . . . . . . . . . . . . . 25 3.2.3. Use of ENABLE . . . . . . . . . . . . . . . . . . . . 25
3.2.4. Additional Requirements on QRESYNC Servers . . . . . 26 3.2.4. Additional Requirements on QRESYNC Servers . . . . . 26
3.2.5. QRESYNC Parameter to SELECT/EXAMINE . . . . . . . . . 26 3.2.5. QRESYNC Parameter to SELECT/EXAMINE . . . . . . . . . 26
3.2.6. VANISHED UID FETCH Modifier . . . . . . . . . . . . . 30 3.2.6. VANISHED UID FETCH Modifier . . . . . . . . . . . . . 31
3.2.7. EXPUNGE Command . . . . . . . . . . . . . . . . . . . 32 3.2.7. EXPUNGE Command . . . . . . . . . . . . . . . . . . . 32
3.2.8. CLOSE Command . . . . . . . . . . . . . . . . . . . . 33 3.2.8. CLOSE Command . . . . . . . . . . . . . . . . . . . . 33
3.2.9. UID EXPUNGE Command . . . . . . . . . . . . . . . . . 33 3.2.9. UID EXPUNGE Command . . . . . . . . . . . . . . . . . 34
3.2.10. VANISHED Response . . . . . . . . . . . . . . . . . . 35 3.2.10. VANISHED Response . . . . . . . . . . . . . . . . . . 35
3.2.11. CLOSED Response Code . . . . . . . . . . . . . . . . 38 3.2.11. CLOSED Response Code . . . . . . . . . . . . . . . . 38
4. Long Command Lines (Update to RFC 2683) . . . . . . . . . . . 38 4. Long Command Lines (Update to RFC 2683) . . . . . . . . . . . 39
5. QRESYNC Server Implementation Considerations . . . . . . . . 39 5. QRESYNC Server Implementation Considerations . . . . . . . . 39
5.1. Server Implementations That Don't Store Extra State . . . 39 5.1. Server Implementations That Don't Store Extra State . . . 39
5.2. Server Implementations Storing Minimal State . . . . . . 39 5.2. Server Implementations Storing Minimal State . . . . . . 40
5.3. Additional State Required on the Server . . . . . . . . . 40 5.3. Additional State Required on the Server . . . . . . . . . 40
6. Updated Synchronization Sequence . . . . . . . . . . . . . . 41 6. Updated Synchronization Sequence . . . . . . . . . . . . . . 41
7. Formal Syntax . . . . . . . . . . . . . . . . . . . . . . . . 44 7. Formal Syntax . . . . . . . . . . . . . . . . . . . . . . . . 44
8. Security Considerations . . . . . . . . . . . . . . . . . . . 47 8. Security Considerations . . . . . . . . . . . . . . . . . . . 47
9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 48 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 48
10. References . . . . . . . . . . . . . . . . . . . . . . . . . 48 10. References . . . . . . . . . . . . . . . . . . . . . . . . . 48
10.1. Normative References . . . . . . . . . . . . . . . . . . 48 10.1. Normative References . . . . . . . . . . . . . . . . . . 48
10.2. Informative References . . . . . . . . . . . . . . . . . 49 10.2. Informative References . . . . . . . . . . . . . . . . . 49
Appendix A. Changes since RFC 4551 . . . . . . . . . . . . . . . 50 Appendix A. Changes since RFC 4551 . . . . . . . . . . . . . . . 50
Appendix B. Changes since RFC 5162 . . . . . . . . . . . . . . . 50 Appendix B. Changes since RFC 5162 . . . . . . . . . . . . . . . 50
skipping to change at page 15, line 9 skipping to change at page 15, line 9
S: * 101 FETCH (MODSEQ (303181230852)) S: * 101 FETCH (MODSEQ (303181230852))
S: b108 OK Conditional Store completed S: b108 OK Conditional Store completed
Or, the flag hasn't changed, but another has (nice server behavior. Or, the flag hasn't changed, but another has (nice server behavior.
Server implementers should also see Section 3.1.12)... Server implementers should also see Section 3.1.12)...
C: a106 STORE 100:150 (UNCHANGEDSINCE 212030000000) C: a106 STORE 100:150 (UNCHANGEDSINCE 212030000000)
+FLAGS.SILENT ($Processed) +FLAGS.SILENT ($Processed)
S: * 100 FETCH (MODSEQ (303181230852)) S: * 100 FETCH (MODSEQ (303181230852))
S: * 101 FETCH (MODSEQ (303011130956) FLAGS ($Processed \Deleted S: * 101 FETCH (MODSEQ (303011130956) FLAGS ($Processed \Deleted
\Answered)) \Answered))
S: * 102 FETCH (MODSEQ (303181230852)) S: * 102 FETCH (MODSEQ (303181230852))
... ...
S: * 150 FETCH (MODSEQ (303181230852)) S: * 150 FETCH (MODSEQ (303181230852))
S: a106 OK Conditional STORE completed S: a106 OK Conditional STORE completed
The following example is based on the example from Section 4.2.3 of The following example is based on the example from Section 4.2.3 of
[RFC2180] and demonstrates that the MODIFIED response code MAY also [RFC2180] and demonstrates that the MODIFIED response code MAY also
be returned in the tagged NO response. be returned in the tagged NO response.
The client tries to conditionally STORE flags on a mixture of The client tries to conditionally STORE flags on a mixture of
skipping to change at page 16, line 49 skipping to change at page 16, line 49
only returned for messages that have a mod-sequence bigger than only returned for messages that have a mod-sequence bigger than
<mod-sequence>. <mod-sequence>.
When the CHANGEDSINCE FETCH modifier is specified, it implicitly When the CHANGEDSINCE FETCH modifier is specified, it implicitly
adds the MODSEQ FETCH message data item (Section 3.1.4.2). adds the MODSEQ FETCH message data item (Section 3.1.4.2).
C: s100 UID FETCH 1:* (FLAGS) (CHANGEDSINCE 12345) C: s100 UID FETCH 1:* (FLAGS) (CHANGEDSINCE 12345)
S: * 1 FETCH (UID 4 MODSEQ (65402) FLAGS (\Seen)) S: * 1 FETCH (UID 4 MODSEQ (65402) FLAGS (\Seen))
S: * 2 FETCH (UID 6 MODSEQ (75403) FLAGS (\Deleted)) S: * 2 FETCH (UID 6 MODSEQ (75403) FLAGS (\Deleted))
S: * 4 FETCH (UID 8 MODSEQ (29738) FLAGS ($NoJunk $AutoJunk S: * 4 FETCH (UID 8 MODSEQ (29738) FLAGS ($NoJunk $AutoJunk
$MDNSent)) $MDNSent))
S: s100 OK FETCH completed S: s100 OK FETCH completed
Example 12 Example 12
3.1.4.2. MODSEQ Message Data Item in FETCH Command 3.1.4.2. MODSEQ Message Data Item in FETCH Command
CONDSTORE adds a MODSEQ message data item to the FETCH command. The CONDSTORE adds a MODSEQ message data item to the FETCH command. The
MODSEQ message data item allows clients to retrieve mod-sequence MODSEQ message data item allows clients to retrieve mod-sequence
values for a range of messages in the currently selected mailbox. values for a range of messages in the currently selected mailbox.
skipping to change at page 27, line 13 skipping to change at page 27, line 13
changed. The client can discover this situation by comparing the changed. The client can discover this situation by comparing the
UIDVALIDITY value returned by the server. This behavior allows the UIDVALIDITY value returned by the server. This behavior allows the
client not to synchronize the mailbox or decide on the best client not to synchronize the mailbox or decide on the best
synchronization strategy. synchronization strategy.
Example: Attempting to resynchronize INBOX, but the provided Example: Attempting to resynchronize INBOX, but the provided
UIDVALIDITY parameter doesn't match the current UIDVALIDITY UIDVALIDITY parameter doesn't match the current UIDVALIDITY
value. value.
C: A02 SELECT INBOX (QRESYNC (67890007 20050715194045000 C: A02 SELECT INBOX (QRESYNC (67890007 20050715194045000
41,43:211,214:541)) 41,43:211,214:541))
S: * 464 EXISTS S: * 464 EXISTS
S: * 3 RECENT S: * 3 RECENT
S: * OK [UIDVALIDITY 3857529045] UIDVALIDITY S: * OK [UIDVALIDITY 3857529045] UIDVALIDITY
S: * OK [UIDNEXT 550] Predicted next UID S: * OK [UIDNEXT 550] Predicted next UID
S: * OK [HIGHESTMODSEQ 90060128194045007] Highest mailbox S: * OK [HIGHESTMODSEQ 90060128194045007] Highest mailbox
mod-sequence mod-sequence
S: * OK [UNSEEN 12] Message 12 is first unseen S: * OK [UNSEEN 12] Message 12 is first unseen
S: * FLAGS (\Answered \Flagged \Draft \Deleted \Seen) S: * FLAGS (\Answered \Flagged \Draft \Deleted \Seen)
S: * OK [PERMANENTFLAGS (\Answered \Flagged \Draft S: * OK [PERMANENTFLAGS (\Answered \Flagged \Draft
\Deleted \Seen \*)] Permanent flags \Deleted \Seen \*)] Permanent flags
skipping to change at page 28, line 18 skipping to change at page 28, line 18
equivalent to the client issuing: equivalent to the client issuing:
tag1 UID FETCH "known-uids" (FLAGS) (CHANGEDSINCE "mod-sequence- tag1 UID FETCH "known-uids" (FLAGS) (CHANGEDSINCE "mod-sequence-
value" VANISHED) value" VANISHED)
In particular, this means that all requirements specified in In particular, this means that all requirements specified in
Section 3.2.6 apply. Section 3.2.6 apply.
Example: Example:
C: A03 SELECT INBOX (QRESYNC (67890007 C: A03 SELECT INBOX (QRESYNC (67890007
90060115194045000 41:211,214:541)) 90060115194045000 41:211,214:541))
S: * OK [CLOSED] S: * OK [CLOSED]
S: * 100 EXISTS S: * 100 EXISTS
S: * 11 RECENT S: * 11 RECENT
S: * OK [UIDVALIDITY 67890007] UIDVALIDITY S: * OK [UIDVALIDITY 67890007] UIDVALIDITY
S: * OK [UIDNEXT 600] Predicted next UID S: * OK [UIDNEXT 600] Predicted next UID
S: * OK [HIGHESTMODSEQ 90060115205545359] Highest S: * OK [HIGHESTMODSEQ 90060115205545359] Highest
mailbox mod-sequence mailbox mod-sequence
S: * OK [UNSEEN 7] There are some unseen S: * OK [UNSEEN 7] There are some unseen
messages in the mailbox messages in the mailbox
S: * FLAGS (\Answered \Flagged \Draft \Deleted \Seen) S: * FLAGS (\Answered \Flagged \Draft \Deleted \Seen)
S: * OK [PERMANENTFLAGS (\Answered \Flagged \Draft S: * OK [PERMANENTFLAGS (\Answered \Flagged \Draft
\Deleted \Seen \*)] Permanent flags \Deleted \Seen \*)] Permanent flags
S: * VANISHED (EARLIER) 41,43:116,118,120:211,214:540 S: * VANISHED (EARLIER) 41,43:116,118,120:211,214:540
S: * 49 FETCH (UID 117 FLAGS (\Seen \Answered) MODSEQ S: * 49 FETCH (UID 117 FLAGS (\Seen \Answered) MODSEQ
(90060115194045001)) (90060115194045001))
S: * 50 FETCH (UID 119 FLAGS (\Draft $MDNSent) MODSEQ S: * 50 FETCH (UID 119 FLAGS (\Draft $MDNSent) MODSEQ
(90060115194045308)) (90060115194045308))
S: * 51 FETCH (UID 541 FLAGS (\Seen $Forwarded) MODSEQ S: * 51 FETCH (UID 541 FLAGS (\Seen $Forwarded) MODSEQ
(90060115194045001)) (90060115194045001))
S: A03 OK [READ-WRITE] mailbox selected S: A03 OK [READ-WRITE] mailbox selected
In the above example, flag information for UID 42 is not returned, In the above example, flag information for UID 42 is not returned,
presumably because its flags haven't changed since the MODSEQ presumably because its flags haven't changed since the MODSEQ
90060115194045000. 90060115194045000.
3.2.5.2. Message Sequence Match Data 3.2.5.2. Message Sequence Match Data
A client MAY provide a parenthesized list of a message sequence set A client MAY provide a parenthesized list of a message sequence set
and the corresponding UID sets. Both MUST be provided in ascending and the corresponding UID sets. Both MUST be provided in ascending
skipping to change at page 29, line 29 skipping to change at page 30, line 6
In the following two examples, the server is unable to remember In the following two examples, the server is unable to remember
expunges at all, and only UIDs with messages divisible by three are expunges at all, and only UIDs with messages divisible by three are
present in the mailbox. In the first example, the client does not present in the mailbox. In the first example, the client does not
use the fourth parameter; in the second, it provides it. This use the fourth parameter; in the second, it provides it. This
example is somewhat extreme, but it shows that judicious usage of the example is somewhat extreme, but it shows that judicious usage of the
sequence match data can save a substantial amount of bandwidth. sequence match data can save a substantial amount of bandwidth.
Example: Example:
C: A04 SELECT INBOX (QRESYNC (67890007 C: A04 SELECT INBOX (QRESYNC (67890007
90060115194045000 1:29997)) 90060115194045000 1:29997))
S: * 10003 EXISTS S: * 10003 EXISTS
S: * 4 RECENT S: * 4 RECENT
S: * OK [UIDVALIDITY 67890007] UIDVALIDITY S: * OK [UIDVALIDITY 67890007] UIDVALIDITY
S: * OK [UIDNEXT 30013] Predicted next UID S: * OK [UIDNEXT 30013] Predicted next UID
S: * OK [HIGHESTMODSEQ 90060115205545359] Highest mailbox mod- S: * OK [HIGHESTMODSEQ 90060115205545359] Highest mailbox
sequence mod-sequence
S: * OK [UNSEEN 7] There are some unseen messages in the mailbox S: * OK [UNSEEN 7] There are some unseen messages in the mailbox
S: * FLAGS (\Answered \Flagged \Draft \Deleted \Seen) S: * FLAGS (\Answered \Flagged \Draft \Deleted \Seen)
S: * OK [PERMANENTFLAGS (\Answered \Flagged \Draft S: * OK [PERMANENTFLAGS (\Answered \Flagged \Draft
\Deleted \Seen \*)] Permanent flags \Deleted \Seen \*)] Permanent flags
S: * VANISHED (EARLIER) 1:2,4:5,7:8,10:11,13:14,[...], S: * VANISHED (EARLIER) 1:2,4:5,7:8,10:11,13:14,[...],
29668:29669,29671:29996 29668:29669,29671:29996
S: * 1 FETCH (UID 3 FLAGS (\Seen \Answered $Important) MODSEQ S: * 1 FETCH (UID 3 FLAGS (\Seen \Answered $Important) MODSEQ
(90060115194045001)) (90060115194045001))
S: ... S: ...
S: * 9889 FETCH (UID 29667 FLAGS (\Seen \Answered) MODSEQ S: * 9889 FETCH (UID 29667 FLAGS (\Seen \Answered) MODSEQ
(90060115194045027)) (90060115194045027))
S: * 9890 FETCH (UID 29670 FLAGS (\Draft $MDNSent) MODSEQ S: * 9890 FETCH (UID 29670 FLAGS (\Draft $MDNSent) MODSEQ
(90060115194045028)) (90060115194045028))
S: ... S: ...
S: * 9999 FETCH (UID 29997 FLAGS (\Seen $Forwarded) MODSEQ S: * 9999 FETCH (UID 29997 FLAGS (\Seen $Forwarded) MODSEQ
(90060115194045031)) (90060115194045031))
S: A04 OK [READ-WRITE] mailbox selected S: A04 OK [READ-WRITE] mailbox selected
Example: Example:
C: B04 SELECT INBOX (QRESYNC (67890007 C: B04 SELECT INBOX (QRESYNC (67890007
90060115194045000 1:29997 (5000,7500,9000,9990:9999 15000, 90060115194045000 1:29997 (5000,7500,9000,9990:9999 15000,
22500,27000,29970,29973,29976,29979,29982,29985,29988,29991, 22500,27000,29970,29973,29976,29979,29982,29985,29988,29991,
29994,29997))) 29994,29997)))
S: * 10003 EXISTS S: * 10003 EXISTS
S: * 4 RECENT S: * 4 RECENT
skipping to change at page 38, line 37 skipping to change at page 38, line 46
The CLOSED response code has no parameters. A server implementing The CLOSED response code has no parameters. A server implementing
the extension defined in this document MUST return the CLOSED the extension defined in this document MUST return the CLOSED
response code when the currently selected mailbox is closed response code when the currently selected mailbox is closed
implicitly using the SELECT/EXAMINE command on another mailbox. The implicitly using the SELECT/EXAMINE command on another mailbox. The
CLOSED response code serves as a boundary between responses for the CLOSED response code serves as a boundary between responses for the
previously opened mailbox (which was closed) and the newly selected previously opened mailbox (which was closed) and the newly selected
mailbox; all responses before the CLOSED response code relate to the mailbox; all responses before the CLOSED response code relate to the
mailbox that was closed, and all subsequent responses relate to the mailbox that was closed, and all subsequent responses relate to the
newly opened mailbox. newly opened mailbox.
Note that the CLOSED response code must be returned whether or not a
"CONDSTORE enabling command" was issued.
There is no need to return the CLOSED response code on completion of There is no need to return the CLOSED response code on completion of
the CLOSE or the UNSELECT [UNSELECT] command (or similar), whose the CLOSE or the UNSELECT [UNSELECT] command (or similar), whose
purpose is to close the currently selected mailbox without opening a purpose is to close the currently selected mailbox without opening a
new one. new one.
4. Long Command Lines (Update to RFC 2683) 4. Long Command Lines (Update to RFC 2683)
While [RFC3501] doesn't specify a specific line-length limit, several While [RFC3501] doesn't specify a specific line-length limit, several
server implementations chose to implement the recommended line-length server implementations chose to implement the recommended line-length
limit suggested in Section 3.2.1.5 of [RFC2683] in order to protect limit suggested in Section 3.2.1.5 of [RFC2683] in order to protect
 End of changes. 23 change blocks. 
24 lines changed or deleted 26 lines changed or added

This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/