rfc5162.IMAP4_Extensions_for_Quick_Mailbox_resync.txt 50 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291
  1. Network Working Group A. Melnikov
  2. Request for Comments: 5162 D. Cridland
  3. Category: Standards Track Isode Ltd
  4. C. Wilson
  5. Nokia
  6. March 2008
  7. IMAP4 Extensions for Quick Mailbox Resynchronization
  8. Status of This Memo
  9. This document specifies an Internet standards track protocol for the
  10. Internet community, and requests discussion and suggestions for
  11. improvements. Please refer to the current edition of the "Internet
  12. Official Protocol Standards" (STD 1) for the standardization state
  13. and status of this protocol. Distribution of this memo is unlimited.
  14. Abstract
  15. This document defines an IMAP4 extension, which gives an IMAP client
  16. the ability to quickly resynchronize any previously opened mailbox as
  17. part of the SELECT command, without the need for server-side state or
  18. additional client round-trips. This extension also introduces a new
  19. response that allows for a more compact representation of a list of
  20. expunged messages (and always includes the Unique Identifiers (UIDs)
  21. expunged).
  22. Melnikov, et al. Standards Track [Page 1]
  23. RFC 5162 IMAP Quick Mailbox Resync March 2008
  24. Table of Contents
  25. 1. Introduction and Overview . . . . . . . . . . . . . . . . . . 2
  26. 2. Requirements Notation . . . . . . . . . . . . . . . . . . . . 4
  27. 3. IMAP Protocol Changes . . . . . . . . . . . . . . . . . . . . 4
  28. 3.1. QRESYNC Parameter to SELECT/EXAMINE . . . . . . . . . . . 4
  29. 3.2. VANISHED UID FETCH Modifier . . . . . . . . . . . . . . . 8
  30. 3.3. EXPUNGE Command . . . . . . . . . . . . . . . . . . . . . 10
  31. 3.4. CLOSE Command . . . . . . . . . . . . . . . . . . . . . . 11
  32. 3.5. UID EXPUNGE Command . . . . . . . . . . . . . . . . . . . 11
  33. 3.6. VANISHED Response . . . . . . . . . . . . . . . . . . . . 12
  34. 3.7. CLOSED Response Code . . . . . . . . . . . . . . . . . . . 15
  35. 4. Server Implementation Considerations . . . . . . . . . . . . . 15
  36. 4.1. Server Implementations That Don't Store Extra State . . . 15
  37. 4.2. Server Implementations Storing Minimal State . . . . . . . 16
  38. 4.3. Additional State Required on the Server . . . . . . . . . 16
  39. 5. Updated Synchronization Sequence . . . . . . . . . . . . . . . 17
  40. 6. Formal Syntax . . . . . . . . . . . . . . . . . . . . . . . . 19
  41. 7. Security Considerations . . . . . . . . . . . . . . . . . . . 20
  42. 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 21
  43. 9. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 21
  44. 10. References . . . . . . . . . . . . . . . . . . . . . . . . . . 21
  45. 10.1. Normative References . . . . . . . . . . . . . . . . . . . 21
  46. 10.2. Informative References . . . . . . . . . . . . . . . . . . 22
  47. 1. Introduction and Overview
  48. The [CONDSTORE] extension gives a disconnected client the ability to
  49. quickly resynchronize IMAP flag changes for previously seen messages.
  50. This can be done using the CHANGEDSINCE FETCH modifier once a mailbox
  51. is opened. In order for the client to discover which messages have
  52. been expunged, the client still has to issue a UID FETCH or a UID
  53. SEARCH command. This document defines an extension to [CONDSTORE]
  54. that allows a reconnecting client to perform full resynchronization,
  55. including discovery of expunged messages, in a single round-trip.
  56. This extension also introduces a new response, VANISHED, that allows
  57. for a more compact representation of a list of expunged messages.
  58. This extension can be useful for mobile clients that can experience
  59. frequent disconnects caused by environmental factors (battery life,
  60. signal strength, etc.). Such clients need a way to quickly reconnect
  61. to the IMAP server, while minimizing delay experienced by the user as
  62. well as the amount of traffic (and hence the expense) generated by
  63. resynchronization.
  64. Melnikov, et al. Standards Track [Page 2]
  65. RFC 5162 IMAP Quick Mailbox Resync March 2008
  66. By extending the SELECT command to perform the additional
  67. resynchronization, this also allows clients to reduce concurrent
  68. connections to the IMAP server held purely for the sake of avoiding
  69. the resynchronization.
  70. The quick resync IMAP extension is present if an IMAP4 server returns
  71. "QRESYNC" as one of the supported capabilities to the CAPABILITY
  72. command.
  73. Servers supporting this extension MUST implement and advertise
  74. support for the [ENABLE] IMAP extension. Also, the presence of the
  75. "QRESYNC" capability implies support for the [CONDSTORE] IMAP
  76. extension even if the CONDSTORE capability isn't advertised. A
  77. server compliant with this specification is REQUIREd to support
  78. "ENABLE QRESYNC" and "ENABLE QRESYNC CONDSTORE" (which are "CONDSTORE
  79. enabling commands", as defined in [CONDSTORE], and have identical
  80. results), but there is no requirement for a compliant server to
  81. support "ENABLE CONDSTORE" by itself. The "ENABLE QRESYNC"/"ENABLE
  82. QRESYNC CONDSTORE" command also tells the server that it SHOULD start
  83. sending VANISHED responses (see Section 3.6) instead of EXPUNGE
  84. responses. This change remains in effect until the connection is
  85. closed.
  86. For compatibility with clients that only support the [CONDSTORE] IMAP
  87. extension, servers SHOULD advertise CONDSTORE in the CAPABILITY
  88. response as well.
  89. A client making use of this extension MUST issue "ENABLE QRESYNC"
  90. once it is authenticated. A server MUST respond with a tagged BAD
  91. response if the QRESYNC parameter to the SELECT/EXAMINE command or
  92. the VANISHED UID FETCH modifier is specified and the client hasn't
  93. issued "ENABLE QRESYNC" in the current connection.
  94. This document puts additional requirements on a server implementing
  95. the [CONDSTORE] extension. Each mailbox that supports persistent
  96. storage of mod-sequences, i.e., for which the server has sent a
  97. HIGHESTMODSEQ untagged OK response code on a successful SELECT/
  98. EXAMINE, MUST increment the per-mailbox mod-sequence when one or more
  99. messages are expunged due to EXPUNGE, UID EXPUNGE or CLOSE; the
  100. server MUST associate the incremented mod-sequence with the UIDs of
  101. the expunged messages.
  102. A client that supports CONDSTORE but not this extension might
  103. resynchronize a mailbox and discover that its HIGHESTMODSEQ has
  104. increased from the value cached by the client. If the increase is
  105. only due to messages having been expunged since the client last
  106. synchronized, the client is likely to send a FETCH ... CHANGEDSINCE
  107. command that returns no data. Thus, a client that supports CONDSTORE
  108. Melnikov, et al. Standards Track [Page 3]
  109. RFC 5162 IMAP Quick Mailbox Resync March 2008
  110. but not this extension might incur a penalty of an unneeded round-
  111. trip when resynchronizing some mailboxes (those that have had
  112. messages expunged but no flag changes since the last
  113. synchronization).
  114. This extra round-trip is only incurred by clients that support
  115. CONDSTORE but not this extension, and only when a mailbox has had
  116. messages expunged but no flag changes to non-expunged messages.
  117. Since CONDSTORE is a relatively new extension, it is thought likely
  118. that clients that support it will also support this extension.
  119. 2. Requirements Notation
  120. The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
  121. "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
  122. document are to be interpreted as described in [RFC2119].
  123. In examples, "C:" and "S:" indicate lines sent by the client and
  124. server respectively. If a single "C:" or "S:" label applies to
  125. multiple lines, then the line breaks between those lines are for
  126. editorial clarity only and are not part of the actual protocol
  127. exchange. The five characters [...] means that something has been
  128. elided.
  129. Understanding of the IMAP message sequence numbers and UIDs and the
  130. EXPUNGE response [RFC3501] is essential when reading this document.
  131. 3. IMAP Protocol Changes
  132. 3.1. QRESYNC Parameter to SELECT/EXAMINE
  133. The Quick Resynchronization parameter to SELECT/EXAMINE commands has
  134. four arguments:
  135. o the last known UIDVALIDITY,
  136. o the last known modification sequence,
  137. o the optional set of known UIDs, and
  138. o an optional parenthesized list of known sequence ranges and their
  139. corresponding UIDs.
  140. A server MUST respond with a tagged BAD response if the Quick
  141. Resynchronization parameter to SELECT/EXAMINE command is specified
  142. and the client hasn't issued "ENABLE QRESYNC" in the current
  143. connection.
  144. Melnikov, et al. Standards Track [Page 4]
  145. RFC 5162 IMAP Quick Mailbox Resync March 2008
  146. Before opening the specified mailbox, the server verifies all
  147. arguments for syntactic validity. If any parameter is not
  148. syntactically valid, the server returns the tagged BAD response, and
  149. the mailbox remains unselected. Once the check is done, the server
  150. opens the mailbox as if no SELECT/EXAMINE parameters are specified
  151. (this is subject to processing of other parameters as defined in
  152. other extensions). In particular this means that the server MUST
  153. send all untagged responses as specified in Sections 6.3.1 and 6.3.2
  154. of [RFC3501].
  155. After that, the server checks the UIDVALIDITY value provided by the
  156. client. If the provided UIDVALIDITY doesn't match the UIDVALIDITY
  157. for the mailbox being opened, then the server MUST ignore the
  158. remaining parameters and behave as if no dynamic message data
  159. changed. The client can discover this situation by comparing the
  160. UIDVALIDITY value returned by the server. This behavior allows the
  161. client not to synchronize the mailbox or decide on the best
  162. synchronization strategy.
  163. Example: Attempting to resynchronize INBOX, but the provided
  164. UIDVALIDITY parameter doesn't match the current UIDVALIDITY
  165. value.
  166. C: A02 SELECT INBOX (QRESYNC (67890007 20050715194045000
  167. 41,43:211,214:541))
  168. S: * 464 EXISTS
  169. S: * 3 RECENT
  170. S: * OK [UIDVALIDITY 3857529045] UIDVALIDITY
  171. S: * OK [UIDNEXT 550] Predicted next UID
  172. S: * OK [HIGHESTMODSEQ 90060128194045007]
  173. S: * OK [UNSEEN 12] Message 12 is first unseen
  174. S: * FLAGS (\Answered \Flagged \Draft \Deleted \Seen)
  175. S: * OK [PERMANENTFLAGS (\Answered \Flagged \Draft
  176. \Deleted \Seen \*)] Permanent flags
  177. S: A02 OK [READ-WRITE] Sorry, UIDVALIDITY mismatch
  178. Modification Sequence and UID Parameters:
  179. A server that doesn't support the persistent storage of mod-sequences
  180. for the mailbox MUST send the OK untagged response including the
  181. NOMODSEQ response code with every successful SELECT or EXAMINE
  182. command, as described in [CONDSTORE]. Such a server doesn't need to
  183. remember mod-sequences for expunged messages in the mailbox. It MUST
  184. ignore the remaining parameters and behave as if no dynamic message
  185. data changed.
  186. If the provided UIDVALIDITY matches that of the selected mailbox, the
  187. server then checks the last known modification sequence.
  188. Melnikov, et al. Standards Track [Page 5]
  189. RFC 5162 IMAP Quick Mailbox Resync March 2008
  190. The server sends the client any pending flag changes (using FETCH
  191. responses that MUST contain UIDs) and expunges those that have
  192. occurred in this mailbox since the provided modification sequence.
  193. If the list of known UIDs was also provided, the server should only
  194. report flag changes and expunges for the specified messages. If the
  195. client did not provide the list of UIDs, the server acts as if the
  196. client has specified "1:<maxuid>", where <maxuid> is the mailbox's
  197. UIDNEXT value minus 1. If the mailbox is empty and never had any
  198. messages in it, then lack of the list of UIDs is interpreted as an
  199. empty set of UIDs.
  200. Thus, the client can process just these pending events and need not
  201. perform a full resynchronization. Without the message sequence
  202. number matching information, the result of this step is semantically
  203. equivalent to the client issuing:
  204. tag1 UID FETCH "known-uids" (FLAGS) (CHANGEDSINCE
  205. "mod-sequence-value" VANISHED)
  206. Example:
  207. C: A03 SELECT INBOX (QRESYNC (67890007
  208. 90060115194045000 41,43:211,214:541))
  209. S: * OK [CLOSED]
  210. S: * 314 EXISTS
  211. S: * 15 RECENT
  212. S: * OK [UIDVALIDITY 67890007] UIDVALIDITY
  213. S: * OK [UIDNEXT 567] Predicted next UID
  214. S: * OK [HIGHESTMODSEQ 90060115205545359]
  215. S: * OK [UNSEEN 7] There are some unseen messages in the mailbox
  216. S: * FLAGS (\Answered \Flagged \Draft \Deleted \Seen)
  217. S: * OK [PERMANENTFLAGS (\Answered \Flagged \Draft
  218. \Deleted \Seen \*)] Permanent flags
  219. S: * VANISHED (EARLIER) 41,43:116,118,120:211,214:540
  220. S: * 49 FETCH (UID 117 FLAGS (\Seen \Answered) MODSEQ
  221. (90060115194045001))
  222. S: * 50 FETCH (UID 119 FLAGS (\Draft $MDNSent) MODSEQ
  223. (90060115194045308))
  224. S: ...
  225. S: * 100 FETCH (UID 541 FLAGS (\Seen $Forwarded) MODSEQ
  226. (90060115194045001))
  227. S: A03 OK [READ-WRITE] mailbox selected
  228. Message sequence match data:
  229. A client MAY provide a parenthesized list of a message sequence set
  230. and the corresponding UID sets. Both MUST be provided in ascending
  231. order. The server uses this data to restrict the range for which it
  232. provides expunged message information.
  233. Melnikov, et al. Standards Track [Page 6]
  234. RFC 5162 IMAP Quick Mailbox Resync March 2008
  235. Conceptually, the client provides a small sample of sequence numbers
  236. for which it knows the corresponding UIDs. The server then compares
  237. each sequence number and UID pair the client provides with the
  238. current state of the mailbox. If a pair matches, then the client
  239. knows of any expunges up to, and including, the message, and thus
  240. will not include that range in the VANISHED response, even if the
  241. "mod-sequence-value" provided by the client is too old for the server
  242. to have data of when those messages were expunged.
  243. Thus, if the Nth message number in the first set in the list is 4,
  244. and the Nth UID in the second set in the list is 8, and the mailbox's
  245. fourth message has UID 8, then no UIDs equal to or less than 8 are
  246. present in the VANISHED response. If the (N+1)th message number is
  247. 12, and the (N+1)th UID is 24, and the (N+1)th message in the mailbox
  248. has UID 25, then the lowest UID included in the VANISHED response
  249. would be 9.
  250. In the following two examples, the server is unable to remember
  251. expunges at all, and only UIDs with messages divisible by three are
  252. present in the mailbox. In the first example, the client does not
  253. use the fourth parameter; in the second, it provides it. This
  254. example is somewhat extreme, but shows that judicious usage of the
  255. sequence match data can save a substantial amount of bandwidth.
  256. Example:
  257. C: A04 SELECT INBOX (QRESYNC (67890007
  258. 90060115194045000 1:29997))
  259. S: * 10003 EXISTS
  260. S: * 5 RECENT
  261. S: * OK [UIDVALIDITY 67890007] UIDVALIDITY
  262. S: * OK [UIDNEXT 30013] Predicted next UID
  263. S: * OK [HIGHESTMODSEQ 90060115205545359]
  264. S: * OK [UNSEEN 7] There are some unseen messages in the mailbox
  265. S: * FLAGS (\Answered \Flagged \Draft \Deleted \Seen)
  266. S: * OK [PERMANENTFLAGS (\Answered \Flagged \Draft
  267. \Deleted \Seen \*)] Permanent flags
  268. S: * VANISHED (EARLIER) 1:2,4:5,7:8,10:11,13:14 [...]
  269. 29998:29999,30001:30002,30004:30005,30007:30008
  270. S: * 9889 FETCH (UID 29667 FLAGS (\Seen \Answered) MODSEQ
  271. (90060115194045027))
  272. S: * 9890 FETCH (UID 29670 FLAGS (\Draft $MDNSent) MODSEQ
  273. (90060115194045028))
  274. S: ...
  275. S: * 9999 FETCH (UID 29997 FLAGS (\Seen $Forwarded) MODSEQ
  276. (90060115194045031))
  277. S: A04 OK [READ-WRITE] mailbox selected
  278. Melnikov, et al. Standards Track [Page 7]
  279. RFC 5162 IMAP Quick Mailbox Resync March 2008
  280. Example:
  281. C: B04 SELECT INBOX (QRESYNC (67890007
  282. 90060115194045000 1:29997 (5000,7500,9000,9990:9999 15000,
  283. 22500,27000,29970,29973,29976,29979,29982,29985,29988,29991,
  284. 29994,29997)))
  285. S: * 10003 EXISTS
  286. S: * 5 RECENT
  287. S: * OK [UIDVALIDITY 67890007] UIDVALIDITY
  288. S: * OK [UIDNEXT 30013] Predicted next UID
  289. S: * OK [HIGHESTMODSEQ 90060115205545359]
  290. S: * OK [UNSEEN 7] There are some unseen messages in the mailbox
  291. S: * FLAGS (\Answered \Flagged \Draft \Deleted \Seen)
  292. S: * OK [PERMANENTFLAGS (\Answered \Flagged \Draft
  293. \Deleted \Seen \*)] Permanent flags
  294. S: * VANISHED (EARLIER) 29998:29999,30001:30002,30004:30005,30007:
  295. 30008
  296. S: * 9889 FETCH (UID 29667 FLAGS (\Seen \Answered) MODSEQ
  297. (90060115194045027))
  298. S: * 9890 FETCH (UID 29670 FLAGS (\Draft $MDNSent) MODSEQ
  299. (90060115194045028))
  300. S: ...
  301. S: * 9999 FETCH (UID 29997 FLAGS (\Seen $Forwarded) MODSEQ
  302. (90060115194045031))
  303. S: B04 OK [READ-WRITE] mailbox selected
  304. 3.2. VANISHED UID FETCH Modifier
  305. [IMAPABNF] has extended the syntax of the FETCH and UID FETCH
  306. commands to include an optional FETCH modifier. This document
  307. defines a new UID FETCH modifier: VANISHED.
  308. Note, that the VANISHED UID FETCH modifier is NOT allowed with a
  309. FETCH command. The server MUST return a tagged BAD response if this
  310. response is specified as a modifier to the FETCH command.
  311. A server MUST respond with a tagged BAD response if the VANISHED UID
  312. FETCH modifier is specified and the client hasn't issued "ENABLE
  313. QRESYNC" in the current connection.
  314. The VANISHED UID FETCH modifier MUST only be specified together with
  315. the CHANGEDSINCE UID FETCH modifier.
  316. The VANISHED UID FETCH modifier instructs the server to report those
  317. messages from the UID set parameter that have been expunged and whose
  318. associated mod-sequence is larger than the specified mod-sequence.
  319. That is, the client requests to be informed of messages from the
  320. specified set that were expunged since the specified mod-sequence.
  321. Note that the mod-sequence(s) associated with these messages were
  322. Melnikov, et al. Standards Track [Page 8]
  323. RFC 5162 IMAP Quick Mailbox Resync March 2008
  324. updated when the messages were expunged (as described above). The
  325. expunged messages are reported using the VANISHED response as
  326. described in Section 3.6, which MUST contain the EARLIER tag. Any
  327. VANISHED (EARLIER) responses MUST be returned before any FETCH
  328. responses, as otherwise the client might get confused about how
  329. message numbers map to UIDs.
  330. Note: A server that receives a mod-sequence smaller than <minmodseq>,
  331. where <minmodseq> is the value of the smallest expunged mod-sequence
  332. it remembers minus one, MUST behave as if it was requested to report
  333. all expunged messages from the provided UID set parameter.
  334. Example 1: Without the VANISHED UID FETCH modifier, a CONDSTORE-aware
  335. client [CONDSTORE] needs to issue separate commands to learn of flag
  336. changes and expunged messages since the last synchronization:
  337. C: s100 UID FETCH 300:500 (FLAGS) (CHANGEDSINCE 12345)
  338. S: * 1 FETCH (UID 404 MODSEQ (65402) FLAGS (\Seen))
  339. S: * 2 FETCH (UID 406 MODSEQ (75403) FLAGS (\Deleted))
  340. S: * 4 FETCH (UID 408 MODSEQ (29738) FLAGS ($NoJunk
  341. $AutoJunk $MDNSent))
  342. S: s100 OK FETCH completed
  343. C: s101 UID SEARCH 300:500
  344. S: * SEARCH 404 406 407 408 410 412
  345. S: s101 OK search completed
  346. Where 300 and 500 are the lowest and highest UIDs from client's
  347. cache. The second SEARCH response tells the client that the messages
  348. with UIDs 407, 410, and 412 are still present, but their flags
  349. haven't changed since the specified modification sequence.
  350. Using the VANISHED UID FETCH modifier, it is sufficient to issue only
  351. a single command:
  352. C: s100 UID FETCH 300:500 (FLAGS) (CHANGEDSINCE 12345
  353. VANISHED)
  354. S: * VANISHED (EARLIER) 300:310,405,411
  355. S: * 1 FETCH (UID 404 MODSEQ (65402) FLAGS (\Seen))
  356. S: * 2 FETCH (UID 406 MODSEQ (75403) FLAGS (\Deleted))
  357. S: * 4 FETCH (UID 408 MODSEQ (29738) FLAGS ($NoJunk
  358. $AutoJunk $MDNSent))
  359. S: s100 OK FETCH completed
  360. Melnikov, et al. Standards Track [Page 9]
  361. RFC 5162 IMAP Quick Mailbox Resync March 2008
  362. 3.3. EXPUNGE Command
  363. Arguments: none
  364. Responses: untagged responses: EXPUNGE or VANISHED
  365. Result: OK - expunge completed
  366. NO - expunge failure: can't expunge (e.g., permission denied)
  367. BAD - command unknown or arguments invalid
  368. This section updates the definition of the EXPUNGE command described
  369. in Section 6.4.3 of [RFC3501].
  370. The EXPUNGE command permanently removes all messages that have the
  371. \Deleted flag set from the currently selected mailbox. Before
  372. returning an OK to the client, those messages that are removed are
  373. reported using a VANISHED response or EXPUNGE responses.
  374. If the server is capable of storing modification sequences for the
  375. selected mailbox, it MUST increment the per-mailbox mod-sequence if
  376. at least one message was permanently removed due to the execution of
  377. the EXPUNGE command. For each permanently removed message, the
  378. server MUST remember the incremented mod-sequence and corresponding
  379. UID. If at least one message got expunged, the server MUST send the
  380. updated per-mailbox modification sequence using the HIGHESTMODSEQ
  381. response code (defined in [CONDSTORE]) in the tagged OK response.
  382. Example: C: A202 EXPUNGE
  383. S: * 3 EXPUNGE
  384. S: * 3 EXPUNGE
  385. S: * 5 EXPUNGE
  386. S: * 8 EXPUNGE
  387. S: A202 OK [HIGHESTMODSEQ 20010715194045319] expunged
  388. Note: In this example, messages 3, 4, 7, and 11 had the \Deleted flag
  389. set. The first "* 3 EXPUNGE" reports message # 3 as expunged. The
  390. second "* 3 EXPUNGE" reports message # 4 as expunged (the message
  391. number got decremented due to the previous EXPUNGE response). See
  392. the description of the EXPUNGE response in [RFC3501] for further
  393. explanation.
  394. Note that if the server chooses to always send VANISHED responses
  395. instead of EXPUNGE responses, the previous example might look like
  396. this:
  397. Example: C: B202 EXPUNGE
  398. S: * VANISHED 405,407,410,425
  399. S: B202 OK [HIGHESTMODSEQ 20010715194045319] expunged
  400. Melnikov, et al. Standards Track [Page 10]
  401. RFC 5162 IMAP Quick Mailbox Resync March 2008
  402. Here messages with message numbers 3, 4, 7, and 11 have respective
  403. UIDs 405, 407, 410, and 425.
  404. 3.4. CLOSE Command
  405. Arguments: none
  406. Responses: no specific responses for this command
  407. Result: OK - close completed, now in authenticated state
  408. BAD - command unknown or arguments invalid
  409. This section updates the definition of the CLOSE command described in
  410. Section 6.4.2 of [RFC3501].
  411. The CLOSE command permanently removes all messages that have the
  412. \Deleted flag set from the currently selected mailbox, and returns to
  413. the authenticated state from the selected state. No untagged EXPUNGE
  414. (or VANISHED) responses are sent.
  415. If the server is capable of storing modification sequences for the
  416. selected mailbox, it MUST increment the per-mailbox mod-sequence if
  417. at least one message was permanently removed due to the execution of
  418. the CLOSE command. For each permanently removed message, the server
  419. MUST remember the incremented mod-sequence and corresponding UID. If
  420. at least one message got expunged, the server MUST send the updated
  421. per-mailbox modification sequence using the HIGHESTMODSEQ response
  422. code (defined in [CONDSTORE]) in the tagged OK response.
  423. Example: C: A202 CLOSE
  424. S: A202 OK [HIGHESTMODSEQ 20010715194045319] done
  425. 3.5. UID EXPUNGE Command
  426. Arguments: message set
  427. Responses: untagged responses: EXPUNGE or VANISHED
  428. Result: OK - expunge completed
  429. NO - expunge failure: can't expunge (e.g., permission denied)
  430. BAD - command unknown or arguments invalid
  431. This section updates the definition of the UID EXPUNGE command
  432. described in Section 2.1 of [UIDPLUS]. Servers that implement both
  433. [UIDPLUS] and QRESYNC extensions must implement UID EXPUNGE as
  434. described in this section.
  435. Melnikov, et al. Standards Track [Page 11]
  436. RFC 5162 IMAP Quick Mailbox Resync March 2008
  437. The UID EXPUNGE command permanently removes from the currently
  438. selected mailbox all messages that both have the \Deleted flag set
  439. and have a UID that is included in the specified message set. If a
  440. message either does not have the \Deleted flag set or has a UID that
  441. is not included in the specified message set, it is not affected.
  442. This command is particularly useful for disconnected mode clients.
  443. By using UID EXPUNGE instead of EXPUNGE when resynchronizing with the
  444. server, the client can avoid inadvertently removing any messages that
  445. have been marked as \Deleted by other clients between the time that
  446. the client was last connected and the time the client resynchronizes.
  447. Before returning an OK to the client, those messages that are removed
  448. are reported using a VANISHED response or EXPUNGE responses.
  449. If the server is capable of storing modification sequences for the
  450. selected mailbox, it MUST increment the per-mailbox mod-sequence if
  451. at least one message was permanently removed due to the execution of
  452. the UID EXPUNGE command. For each permanently removed message, the
  453. server MUST remember the incremented mod-sequence and corresponding
  454. UID. If at least one message got expunged, the server MUST send the
  455. updated per-mailbox modification sequence using the HIGHESTMODSEQ
  456. response code (defined in [CONDSTORE]) in the tagged OK response.
  457. Example: C: . UID EXPUNGE 3000:3002
  458. S: * 3 EXPUNGE
  459. S: * 3 EXPUNGE
  460. S: * 3 EXPUNGE
  461. S: . OK [HIGHESTMODSEQ 20010715194045319] Ok
  462. Note: In this example, at least messages with message numbers 3, 4,
  463. and 5 (UIDs 3000 to 3002) had the \Deleted flag set. The first "* 3
  464. EXPUNGE" reports message # 3 as expunged. The second "* 3 EXPUNGE"
  465. reports message # 4 as expunged (the message number got decremented
  466. due to the previous EXPUNGE response). See the description of the
  467. EXPUNGE response in [RFC3501] for further explanation.
  468. 3.6. VANISHED Response
  469. Contents: an optional EARLIER tag
  470. list of UIDs
  471. The VANISHED response reports that the specified UIDs have been
  472. permanently removed from the mailbox. This response is similar to
  473. the EXPUNGE response [RFC3501]; however, it can return information
  474. about multiple messages, and it returns UIDs instead of message
  475. Melnikov, et al. Standards Track [Page 12]
  476. RFC 5162 IMAP Quick Mailbox Resync March 2008
  477. numbers. The first benefit saves bandwidth, while the second is more
  478. convenient for clients that only use UIDs to access the IMAP server.
  479. The VANISHED response has the same restrictions on when it can be
  480. sent as does the EXPUNGE response (see below).
  481. The VANISHED response has two forms. The first form contains the
  482. EARLIER tag, which signifies that the response was caused by a UID
  483. FETCH (VANISHED) or a SELECT/EXAMINE (QRESYNC) command. This
  484. response is sent if the UID set parameter to the UID FETCH (VANISHED)
  485. command includes UIDs of messages that are no longer in the mailbox.
  486. When the client sees a VANISHED EARLIER response, it MUST NOT
  487. decrement message sequence numbers for each successive message in the
  488. mailbox.
  489. The second form doesn't contain the EARLIER tag and is described
  490. below. Once a client has issued "ENABLE QRESYNC", the server SHOULD
  491. use the VANISHED response without the EARLIER tag instead of the
  492. EXPUNGE response. The server SHOULD continue using VANISHED in lieu
  493. of EXPUNGE for the duration of the connection. In particular, this
  494. affects the EXPUNGE [RFC3501] and UID EXPUNGE [UIDPLUS] commands, as
  495. well as messages expunged in other connections. Such a VANISHED
  496. response MUST NOT contain the EARLIER tag.
  497. A VANISHED response sent because of an EXPUNGE or UID EXPUNGE command
  498. or because messages were expunged in other connections (i.e., the
  499. VANISHED response without the EARLIER tag) also decrements the number
  500. of messages in the mailbox; it is not necessary for the server to
  501. send an EXISTS response with the new value. It also decrements
  502. message sequence numbers for each successive message in the mailbox
  503. (see the example at the end of this section). Note that a VANISHED
  504. response caused by EXPUNGE, UID EXPUNGE, or messages expunged in
  505. other connections SHOULD only contain UIDs for messages expunged
  506. since the last VANISHED/EXPUNGE response sent for the currently
  507. opened mailbox or since the mailbox was opened. That is, servers
  508. SHOULD NOT send UIDs for previously expunged messages, unless
  509. explicitly requested to do so by the UID FETCH (VANISHED) command.
  510. Note that client implementors must take care to properly decrement
  511. the number of messages in the mailbox even if a server violates this
  512. last SHOULD or repeats the same UID multiple times in the returned
  513. UID set. In general, this means that a client using this extension
  514. should either avoid using message numbers entirely, or have a
  515. complete mapping of UIDs to message sequence numbers for the selected
  516. mailbox.
  517. Melnikov, et al. Standards Track [Page 13]
  518. RFC 5162 IMAP Quick Mailbox Resync March 2008
  519. Because clients handle the two different forms of the VANISHED
  520. response differently, servers MUST NOT report UIDs resulting from a
  521. UID FETCH (VANISHED) or a SELECT/EXAMINE (QRESYNC) in the same
  522. VANISHED response as UIDs of messages expunged now (i.e., messages
  523. expunged in other connections). Instead, the server MUST send
  524. separate VANISHED responses: one with the EARLIER tag and one
  525. without.
  526. A VANISHED response MUST NOT be sent when no command is in progress,
  527. nor while responding to a FETCH, STORE, or SEARCH command. This rule
  528. is necessary to prevent a loss of synchronization of message sequence
  529. numbers between client and server. A command is not "in progress"
  530. until the complete command has been received; in particular, a
  531. command is not "in progress" during the negotiation of command
  532. continuation.
  533. Note: UID FETCH, UID STORE, and UID SEARCH are different commands
  534. from FETCH, STORE, and SEARCH. A VANISHED response MAY be sent
  535. during a UID command. However, the VANISHED response MUST NOT be
  536. sent during a UID SEARCH command that contains message numbers in the
  537. search criteria.
  538. The update from the VANISHED response MUST be recorded by the client.
  539. Example: Let's assume that there is the following mapping between
  540. message numbers and UIDs in the currently selected mailbox (here "X"
  541. marks messages with the \Deleted flag set, and "x" represents UIDs
  542. which are not relevant for the example):
  543. Message numbers: 1 2 3 4 5 6 7 8 9 10 11
  544. UIDs: x 504 505 507 508 x 510 x x x 625
  545. \Deleted messages: X X X X
  546. In the presence of the extension defined in this document:
  547. C: A202 EXPUNGE
  548. S: * VANISHED 505,507,510,625
  549. S: A202 OK EXPUNGE completed
  550. Without the QRESYNC extension, the same example might look like:
  551. C: A202 EXPUNGE
  552. S: * 3 EXPUNGE
  553. S: * 3 EXPUNGE
  554. S: * 5 EXPUNGE
  555. S: * 8 EXPUNGE
  556. S: A202 OK EXPUNGE completed
  557. Melnikov, et al. Standards Track [Page 14]
  558. RFC 5162 IMAP Quick Mailbox Resync March 2008
  559. (Continuing previous example) If subsequently messages with UIDs 504
  560. and 508 got marked as \Deleted:
  561. C: A210 EXPUNGE
  562. S: * VANISHED 504,508
  563. S: A210 OK EXPUNGE completed
  564. i.e., the last VANISHED response only contains UIDs of messages
  565. expunged since the previous VANISHED response.
  566. 3.7. CLOSED Response Code
  567. The CLOSED response code has no parameters. A server implementing
  568. the extension defined in this document MUST return the CLOSED
  569. response code when the currently selected mailbox is closed
  570. implicitly using the SELECT/EXAMINE command on another mailbox. The
  571. CLOSED response code serves as a boundary between responses for the
  572. previously opened mailbox (which was closed) and the newly selected
  573. mailbox: all responses before the CLOSED response code relate to the
  574. mailbox that was closed, and all subsequent responses relate to the
  575. newly opened mailbox.
  576. There is no need to return the CLOSED response code on completion of
  577. the CLOSE or the UNSELECT [UNSELECT] command (or similar) whose
  578. purpose is to close the currently selected mailbox without opening a
  579. new one.
  580. 4. Server Implementation Considerations
  581. This section describes a minimalist implementation, a moderate
  582. implementation, and an example of a full implementation.
  583. 4.1. Server Implementations That Don't Store Extra State
  584. Strictly speaking, a server implementation that doesn't remember mod-
  585. sequences associated with expunged messages can be considered
  586. compliant with this specification. Such implementations return all
  587. expunged messages specified in the UID set of the UID FETCH
  588. (VANISHED) command every time, without paying attention to the
  589. specified CHANGEDSINCE mod-sequence. Such implementations are
  590. discouraged, as they can end up returning VANISHED responses that are
  591. bigger than the result of a UID SEARCH command for the same UID set.
  592. Clients that use the message sequence match data can reduce the scope
  593. of this VANISHED response substantially in the typical case where
  594. expunges have not happened, or happen only toward the end of the
  595. mailbox.
  596. Melnikov, et al. Standards Track [Page 15]
  597. RFC 5162 IMAP Quick Mailbox Resync March 2008
  598. 4.2. Server Implementations Storing Minimal State
  599. A server that stores the HIGHESTMODSEQ value at the time of the last
  600. EXPUNGE can omit the VANISHED response when a client provides a
  601. MODSEQ value that is equal to, or higher than, the current value of
  602. this datum, that is, when there have been no EXPUNGEs.
  603. A client providing message sequence match data can reduce the scope
  604. as above. In the case where there have been no expunges, the server
  605. can ignore this data.
  606. 4.3. Additional State Required on the Server
  607. When compared to the [CONDSTORE] extension, this extension requires
  608. servers to store additional state associated with expunged messages.
  609. Note that implementations are not required to store this state in
  610. persistent storage; however, use of persistent storage is advisable.
  611. One possible way to correctly implement the extension described in
  612. this document is to store a queue of <UID set, mod-sequence> pairs.
  613. <UID set> can be represented as a sequence of <min UID, max UID>
  614. pairs.
  615. When messages are expunged, one or more entries are added to the
  616. queue tail.
  617. When the server receives a request to return messages expunged since
  618. a given mod-sequence, it will search the queue from the tail (i.e.,
  619. going from the highest expunged mod-sequence to the lowest) until it
  620. sees the first record with a mod-sequence less than or equal to the
  621. given mod-sequence or it reaches the head of the queue.
  622. Note that indefinitely storing information about expunged messages
  623. can cause storage and related problems for an implementation. In the
  624. worst case, this could result in almost 64Gb of storage for each IMAP
  625. mailbox. For example, consider an implementation that stores <min
  626. UID, max UID, mod-sequence> triples for each range of messages
  627. expunged at the same time. Each triple requires 16 octets: 4 octets
  628. for each of the two UIDs, and 8 octets for the mod-sequence. Assume
  629. that there is a mailbox containing a single message with a UID of
  630. 2**32-1 (the maximum possible UID value), where messages had
  631. previously existed with UIDs starting at 1, and have been expunged
  632. one at a time. For this mailbox alone, storage is required for the
  633. triples <1, 1, modseq1>, <2, 2, modseq2>, ..., <2**32-2, 2**32-2,
  634. modseq4294967294>.
  635. Melnikov, et al. Standards Track [Page 16]
  636. RFC 5162 IMAP Quick Mailbox Resync March 2008
  637. Hence, implementations are encouraged to adopt strategies to protect
  638. against such storage problems, such as limiting the size of the queue
  639. used to store mod-sequences for expunged messages and "expiring"
  640. older records when this limit is reached. When the selected
  641. implementation-specific queue limit is reached, the oldest record(s)
  642. are deleted from the queue (note that such records are located at the
  643. queue head). For all such "expired" records, the server needs to
  644. store a single mod-sequence, which is the highest mod-sequence for
  645. all "expired" expunged messages.
  646. Note that if the client provides the message sequence match data,
  647. this can heavily reduce the data cost of sending a complete set of
  648. missing UIDs; thus, reducing the problems for clients if a server is
  649. unable to persist much of this queue. If the queue contains data
  650. back to the requested mod-sequence, this data can be ignored.
  651. Also, note that if the UIDVALIDITY of the mailbox changes or if the
  652. mailbox is deleted, then any state associated with expunged messages
  653. doesn't need to be preserved and SHOULD be deleted.
  654. 5. Updated Synchronization Sequence
  655. This section updates the description of optimized synchronization in
  656. Section 6.1 of the [IMAP-DISC].
  657. An advanced disconnected mail client should use the QRESYNC and
  658. [CONDSTORE] extensions when they are supported by the server. The
  659. client uses the value from the HIGHESTMODSEQ OK response code
  660. received on mailbox opening to determine if it needs to
  661. resynchronize. Once the synchronization is complete, it MUST cache
  662. the received value (unless the mailbox UIDVALIDITY value has changed;
  663. see below). The client MUST update its copy of the HIGHESTMODSEQ
  664. value whenever the server sends a subsequent HIGHESTMODSEQ OK
  665. response code.
  666. After completing a full synchronization, the client MUST also take
  667. note of any unsolicited MODSEQ FETCH data items received from the
  668. server. Whenever the client receives a tagged response to a command,
  669. it calculates the highest value among all MODSEQ FETCH data items
  670. received since the last tagged response. If this value is bigger
  671. than the client's copy of the HIGHESTMODSEQ value, then the client
  672. MUST use this value as its new HIGHESTMODSEQ value.
  673. Note: It is not safe to update the client's copy of the HIGHESTMODSEQ
  674. value with a MODSEQ FETCH data item value as soon as it is received
  675. because servers are not required to send MODSEQ FETCH data items in
  676. increasing modseqence order. This can lead to the client missing
  677. some changes in case of connectivity loss.
  678. Melnikov, et al. Standards Track [Page 17]
  679. RFC 5162 IMAP Quick Mailbox Resync March 2008
  680. When opening the mailbox for synchronization, the client uses the
  681. QRESYNC parameter to the SELECT/EXAMINE command. The QRESYNC
  682. parameter is followed by the UIDVALIDITY and mailbox HIGHESTMODSEQ
  683. values, as known to the client. It can be optionally followed by the
  684. set of UIDs, for example, if the client is only interested in partial
  685. synchronization of the mailbox. The client may also transmit a list
  686. containing its knowledge of message numbers.
  687. If the SELECT/EXAMINE command is successful, the client compares
  688. UIDVALIDITY as described in step d)1) in Section 3 of the
  689. [IMAP-DISC]. If the cached UIDVALIDITY value matches the one
  690. returned by the server and the server also returns the HIGHESTMODSEQ
  691. response code, then the server reports expunged messages and returns
  692. flag changes for all messages specified by the client in the UID set
  693. parameter (or for all messages in the mailbox, if the client omitted
  694. the UID set parameter). At this point, the client is synchronized,
  695. except for maybe the new messages.
  696. If upon a successful SELECT/EXAMINE (QRESYNC) command the client
  697. receives a NOMODSEQ OK untagged response (instead of the
  698. HIGHESTMODSEQ response code), it MUST remove the last known
  699. HIGHESTMODSEQ value from its cache and follow the more general
  700. instructions in Section 3 of the [IMAP-DISC].
  701. At this point, the client is in sync with the server regarding old
  702. messages. This client can now fetch information about new messages
  703. (if requested by the user).
  704. Step d) ("Server-to-client synchronization") in Section 4 of the
  705. [IMAP-DISC] in the presence of the QRESYNC & CONDSTORE extensions is
  706. amended as follows:
  707. d) "Server-to-client synchronization" -- for each mailbox that
  708. requires synchronization, do the following:
  709. 1a) Check the mailbox UIDVALIDITY (see Section 4.1 of the [IMAP-DISC]
  710. for more details) after issuing SELECT/EXAMINE (QRESYNC) command.
  711. If the UIDVALIDITY value returned by the server differs, the
  712. client MUST
  713. * empty the local cache of that mailbox;
  714. * "forget" the cached HIGHESTMODSEQ value for the mailbox;
  715. Melnikov, et al. Standards Track [Page 18]
  716. RFC 5162 IMAP Quick Mailbox Resync March 2008
  717. * remove any pending "actions" which refer to UIDs in that
  718. mailbox. Note, this doesn't affect actions performed on
  719. client generated fake UIDs (see Section 5 of the
  720. [IMAP-DISC]);
  721. 2) Fetch the current "descriptors";
  722. I) Discover new messages.
  723. 3) Fetch the bodies of any "interesting" messages that the client
  724. doesn't already have.
  725. Example: The UIDVALIDITY value is the same, but the HIGHESTMODSEQ
  726. value has changed on the server while the client was
  727. offline:
  728. C: A142 SELECT INBOX (QRESYNC (3857529045 20010715194032001 1:198))
  729. S: * 172 EXISTS
  730. S: * 1 RECENT
  731. S: * OK [UNSEEN 12] Message 12 is first unseen
  732. S: * OK [UIDVALIDITY 3857529045] UIDs valid
  733. S: * OK [UIDNEXT 201] Predicted next UID
  734. S: * FLAGS (\Answered \Flagged \Deleted \Seen \Draft)
  735. S: * OK [PERMANENTFLAGS (\Deleted \Seen \*)] Limited
  736. S: * OK [HIGHESTMODSEQ 20010715194045007]
  737. S: * VANISHED (EARLIER) 1:5,7:8,10:15
  738. S: * 2 FETCH (UID 6 MODSEQ (20010715205008000)
  739. FLAGS (\Deleted))
  740. S: * 5 FETCH (UID 9 MODSEQ (20010715195517000)
  741. FLAGS ($NoJunk $AutoJunk $MDNSent))
  742. ...
  743. S: A142 OK [READ-WRITE] SELECT completed
  744. 6. Formal Syntax
  745. The following syntax specification uses the Augmented Backus-Naur
  746. Form (ABNF) notation as specified in [ABNF].
  747. Non-terminals referenced but not defined below are as defined by
  748. [RFC3501], [CONDSTORE], or [IMAPABNF].
  749. Except as noted otherwise, all alphabetic characters are case-
  750. insensitive. The use of upper or lower case characters to define
  751. token strings is for editorial clarity only. Implementations MUST
  752. accept these strings in a case-insensitive fashion.
  753. Melnikov, et al. Standards Track [Page 19]
  754. RFC 5162 IMAP Quick Mailbox Resync March 2008
  755. capability =/ "QRESYNC"
  756. select-param = "QRESYNC" SP "(" uidvalidity SP
  757. mod-sequence-value [SP known-uids]
  758. [SP seq-match-data] ")"
  759. ;; conforms to the generic select-param
  760. ;; syntax defined in [IMAPABNF]
  761. seq-match-data = "(" known-sequence-set SP known-uid-set ")"
  762. uidvalidity = nz-number
  763. known-uids = sequence-set
  764. ;; sequence of UIDs, "*" is not allowed
  765. known-sequence-set = sequence-set
  766. ;; set of message numbers corresponding to
  767. ;; the UIDs in known-uid-set, in ascending order.
  768. ;; * is not allowed.
  769. known-uid-set = sequence-set
  770. ;; set of UIDs corresponding to the messages in
  771. ;; known-sequence-set, in ascending order.
  772. ;; * is not allowed.
  773. message-data =/ expunged-resp
  774. expunged-resp = "VANISHED" [SP "(EARLIER)"] SP known-uids
  775. rexpunges-fetch-mod = "VANISHED"
  776. ;; VANISHED UID FETCH modifier conforms
  777. ;; to the fetch-modifier syntax
  778. ;; defined in [IMAPABNF]. It is only
  779. ;; allowed in the UID FETCH command.
  780. resp-text-code =/ "CLOSED"
  781. 7. Security Considerations
  782. As always, it is important to thoroughly test clients and servers
  783. implementing this extension, as it changes how the server reports
  784. expunged messages to the client.
  785. Security considerations relevant to [CONDSTORE] are relevant to this
  786. extension.
  787. This document doesn't raise any new security concerns not already
  788. raised by [CONDSTORE] or [RFC3501].
  789. Melnikov, et al. Standards Track [Page 20]
  790. RFC 5162 IMAP Quick Mailbox Resync March 2008
  791. 8. IANA Considerations
  792. IMAP4 capabilities are registered by publishing a standards track or
  793. IESG approved experimental RFC. The registry is currently located
  794. at:
  795. http://www.iana.org/assignments/imap4-capabilities
  796. This document defines the QRESYNC IMAP capability. IANA has added
  797. this capability to the registry.
  798. 9. Acknowledgments
  799. Thanks to Steve Hole, Cyrus Daboo, and Michael Wener for encouraging
  800. creation of this document.
  801. Valuable comments, both in agreement and in dissent, were received
  802. from Timo Sirainen, Michael Wener, Randall Gellens, Arnt Gulbrandsen,
  803. Chris Newman, Peter Coates, Mark Crispin, Elwyn Davies, Dan Karp,
  804. Eric Rescorla, and Mike Zraly.
  805. This document takes substantial text from [RFC3501] by Mark Crispin.
  806. 10. References
  807. 10.1. Normative References
  808. [ABNF] Crocker, D. and P. Overell, "Augmented BNF for Syntax
  809. Specifications: ABNF", STD 68, RFC 5234, January 2008.
  810. [CONDSTORE] Melnikov, A. and S. Hole, "IMAP Extension for
  811. Conditional STORE Operation or Quick Flag Changes
  812. Resynchronization", RFC 4551, June 2006.
  813. [ENABLE] Gulbrandsen, A., Ed. and A. Melnikov, Ed., "The IMAP
  814. ENABLE Extension", RFC 5161, March 2008.
  815. [IMAPABNF] Melnikov, A. and C. Daboo, "Collected Extensions to
  816. IMAP4 ABNF", RFC 4466, April 2006.
  817. [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
  818. Requirement Levels", BCP 14, RFC 2119, March 1997.
  819. [RFC3501] Crispin, M., "INTERNET MESSAGE ACCESS PROTOCOL - VERSION
  820. 4rev1", RFC 3501, March 2003.
  821. [UIDPLUS] Crispin, M., "Internet Message Access Protocol (IMAP) -
  822. UIDPLUS extension", RFC 4315, December 2005.
  823. Melnikov, et al. Standards Track [Page 21]
  824. RFC 5162 IMAP Quick Mailbox Resync March 2008
  825. 10.2. Informative References
  826. [IMAP-DISC] Melnikov, A., Ed., "Synchronization Operations For
  827. Disconnected Imap4 Clients", RFC 4549, June 2006.
  828. [UNSELECT] Melnikov, A., "Internet Message Access Protocol (IMAP)
  829. UNSELECT command", RFC 3691, February 2004.
  830. Authors' Addresses
  831. Alexey Melnikov
  832. Isode Ltd
  833. 5 Castle Business Village
  834. 36 Station Road
  835. Hampton, Middlesex TW12 2BX
  836. UK
  837. EMail: Alexey.Melnikov@isode.com
  838. Dave Cridland
  839. Isode Ltd
  840. 5 Castle Business Village
  841. 36 Station Road
  842. Hampton, Middlesex TW12 2BX
  843. UK
  844. EMail: dave.cridland@isode.com
  845. Corby Wilson
  846. Nokia
  847. 5 Wayside Rd.
  848. Burlington, MA 01803
  849. USA
  850. EMail: corby@computer.org
  851. Melnikov, et al. Standards Track [Page 22]
  852. RFC 5162 IMAP Quick Mailbox Resync March 2008
  853. Full Copyright Statement
  854. Copyright (C) The IETF Trust (2008).
  855. This document is subject to the rights, licenses and restrictions
  856. contained in BCP 78, and except as set forth therein, the authors
  857. retain all their rights.
  858. This document and the information contained herein are provided on an
  859. "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS
  860. OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY, THE IETF TRUST AND
  861. THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS
  862. OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF
  863. THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
  864. WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
  865. Intellectual Property
  866. The IETF takes no position regarding the validity or scope of any
  867. Intellectual Property Rights or other rights that might be claimed to
  868. pertain to the implementation or use of the technology described in
  869. this document or the extent to which any license under such rights
  870. might or might not be available; nor does it represent that it has
  871. made any independent effort to identify any such rights. Information
  872. on the procedures with respect to rights in RFC documents can be
  873. found in BCP 78 and BCP 79.
  874. Copies of IPR disclosures made to the IETF Secretariat and any
  875. assurances of licenses to be made available, or the result of an
  876. attempt made to obtain a general license or permission for the use of
  877. such proprietary rights by implementers or users of this
  878. specification can be obtained from the IETF on-line IPR repository at
  879. http://www.ietf.org/ipr.
  880. The IETF invites any interested party to bring to its attention any
  881. copyrights, patents or patent applications, or other proprietary
  882. rights that may cover technology that may be required to implement
  883. this standard. Please address the information to the IETF at
  884. ietf-ipr@ietf.org.
  885. Melnikov, et al. Standards Track [Page 23]