| 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/ | ||||