| < draft-ietf-extra-imap4rev2-15.txt | draft-ietf-extra-imap4rev2-16.txt > | |||
|---|---|---|---|---|
| Network Working Group A. Melnikov, Ed. | Network Working Group A. Melnikov, Ed. | |||
| Internet-Draft Isode Ltd | Internet-Draft Isode Ltd | |||
| Obsoletes: 3501 (if approved) B. Leiba, Ed. | Obsoletes: 3501 (if approved) B. Leiba, Ed. | |||
| Intended status: Standards Track Futurewei Technologies | Intended status: Standards Track Futurewei Technologies | |||
| Expires: December 19, 2020 June 17, 2020 | Expires: January 14, 2021 July 13, 2020 | |||
| Internet Message Access Protocol (IMAP) - Version 4rev2 | Internet Message Access Protocol (IMAP) - Version 4rev2 | |||
| draft-ietf-extra-imap4rev2-15 | draft-ietf-extra-imap4rev2-16 | |||
| Abstract | Abstract | |||
| The Internet Message Access Protocol, Version 4rev2 (IMAP4rev2) | The Internet Message Access Protocol, Version 4rev2 (IMAP4rev2) | |||
| allows a client to access and manipulate electronic mail messages on | allows a client to access and manipulate electronic mail messages on | |||
| a server. IMAP4rev2 permits manipulation of mailboxes (remote | a server. IMAP4rev2 permits manipulation of mailboxes (remote | |||
| message folders) in a way that is functionally equivalent to local | message folders) in a way that is functionally equivalent to local | |||
| folders. IMAP4rev2 also provides the capability for an offline | folders. IMAP4rev2 also provides the capability for an offline | |||
| client to resynchronize with the server. | client to resynchronize with the server. | |||
| skipping to change at page 1, line 47 ¶ | skipping to change at page 1, line 47 ¶ | |||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
| working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
| Drafts is at https://datatracker.ietf.org/drafts/current/. | Drafts is at https://datatracker.ietf.org/drafts/current/. | |||
| Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
| and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
| time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
| material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
| This Internet-Draft will expire on December 19, 2020. | This Internet-Draft will expire on January 14, 2021. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2020 IETF Trust and the persons identified as the | Copyright (c) 2020 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
| (https://trustee.ietf.org/license-info) in effect on the date of | (https://trustee.ietf.org/license-info) in effect on the date of | |||
| publication of this document. Please review these documents | publication of this document. Please review these documents | |||
| skipping to change at page 3, line 38 ¶ | skipping to change at page 3, line 38 ¶ | |||
| 6.2. Client Commands - Not Authenticated State . . . . . . . . 27 | 6.2. Client Commands - Not Authenticated State . . . . . . . . 27 | |||
| 6.2.1. STARTTLS Command . . . . . . . . . . . . . . . . . . 28 | 6.2.1. STARTTLS Command . . . . . . . . . . . . . . . . . . 28 | |||
| 6.2.2. AUTHENTICATE Command . . . . . . . . . . . . . . . . 29 | 6.2.2. AUTHENTICATE Command . . . . . . . . . . . . . . . . 29 | |||
| 6.2.3. LOGIN Command . . . . . . . . . . . . . . . . . . . . 32 | 6.2.3. LOGIN Command . . . . . . . . . . . . . . . . . . . . 32 | |||
| 6.3. Client Commands - Authenticated State . . . . . . . . . . 33 | 6.3. Client Commands - Authenticated State . . . . . . . . . . 33 | |||
| 6.3.1. ENABLE Command . . . . . . . . . . . . . . . . . . . 33 | 6.3.1. ENABLE Command . . . . . . . . . . . . . . . . . . . 33 | |||
| 6.3.2. SELECT Command . . . . . . . . . . . . . . . . . . . 35 | 6.3.2. SELECT Command . . . . . . . . . . . . . . . . . . . 35 | |||
| 6.3.3. EXAMINE Command . . . . . . . . . . . . . . . . . . . 37 | 6.3.3. EXAMINE Command . . . . . . . . . . . . . . . . . . . 37 | |||
| 6.3.4. CREATE Command . . . . . . . . . . . . . . . . . . . 38 | 6.3.4. CREATE Command . . . . . . . . . . . . . . . . . . . 38 | |||
| 6.3.5. DELETE Command . . . . . . . . . . . . . . . . . . . 39 | 6.3.5. DELETE Command . . . . . . . . . . . . . . . . . . . 39 | |||
| 6.3.6. RENAME Command . . . . . . . . . . . . . . . . . . . 40 | 6.3.6. RENAME Command . . . . . . . . . . . . . . . . . . . 41 | |||
| 6.3.7. SUBSCRIBE Command . . . . . . . . . . . . . . . . . . 42 | 6.3.7. SUBSCRIBE Command . . . . . . . . . . . . . . . . . . 43 | |||
| 6.3.8. UNSUBSCRIBE Command . . . . . . . . . . . . . . . . . 43 | 6.3.8. UNSUBSCRIBE Command . . . . . . . . . . . . . . . . . 44 | |||
| 6.3.9. LIST Command . . . . . . . . . . . . . . . . . . . . 43 | 6.3.9. LIST Command . . . . . . . . . . . . . . . . . . . . 44 | |||
| 6.3.10. NAMESPACE Command . . . . . . . . . . . . . . . . . . 61 | 6.3.10. NAMESPACE Command . . . . . . . . . . . . . . . . . . 62 | |||
| 6.3.11. STATUS Command . . . . . . . . . . . . . . . . . . . 65 | 6.3.11. STATUS Command . . . . . . . . . . . . . . . . . . . 67 | |||
| 6.3.12. APPEND Command . . . . . . . . . . . . . . . . . . . 66 | 6.3.12. APPEND Command . . . . . . . . . . . . . . . . . . . 68 | |||
| 6.3.13. IDLE Command . . . . . . . . . . . . . . . . . . . . 69 | 6.3.13. IDLE Command . . . . . . . . . . . . . . . . . . . . 71 | |||
| 6.4. Client Commands - Selected State . . . . . . . . . . . . 71 | 6.4. Client Commands - Selected State . . . . . . . . . . . . 73 | |||
| 6.4.1. CLOSE Command . . . . . . . . . . . . . . . . . . . . 71 | 6.4.1. CLOSE Command . . . . . . . . . . . . . . . . . . . . 73 | |||
| 6.4.2. UNSELECT Command . . . . . . . . . . . . . . . . . . 72 | 6.4.2. UNSELECT Command . . . . . . . . . . . . . . . . . . 74 | |||
| 6.4.3. EXPUNGE Command . . . . . . . . . . . . . . . . . . . 72 | 6.4.3. EXPUNGE Command . . . . . . . . . . . . . . . . . . . 74 | |||
| 6.4.4. SEARCH Command . . . . . . . . . . . . . . . . . . . 73 | 6.4.4. SEARCH Command . . . . . . . . . . . . . . . . . . . 75 | |||
| 6.4.5. FETCH Command . . . . . . . . . . . . . . . . . . . . 85 | 6.4.5. FETCH Command . . . . . . . . . . . . . . . . . . . . 87 | |||
| 6.4.6. STORE Command . . . . . . . . . . . . . . . . . . . . 89 | 6.4.6. STORE Command . . . . . . . . . . . . . . . . . . . . 91 | |||
| 6.4.7. COPY Command . . . . . . . . . . . . . . . . . . . . 90 | 6.4.7. COPY Command . . . . . . . . . . . . . . . . . . . . 92 | |||
| 6.4.8. MOVE Command . . . . . . . . . . . . . . . . . . . . 91 | 6.4.8. MOVE Command . . . . . . . . . . . . . . . . . . . . 93 | |||
| 6.4.9. UID Command . . . . . . . . . . . . . . . . . . . . . 93 | 6.4.9. UID Command . . . . . . . . . . . . . . . . . . . . . 95 | |||
| 6.5. Client Commands - Experimental/Expansion . . . . . . . . 95 | 6.5. Client Commands - Experimental/Expansion . . . . . . . . 97 | |||
| 6.5.1. X<atom> Command . . . . . . . . . . . . . . . . . . . 95 | 6.5.1. X<atom> Command . . . . . . . . . . . . . . . . . . . 97 | |||
| 7. Server Responses . . . . . . . . . . . . . . . . . . . . . . 96 | 7. Server Responses . . . . . . . . . . . . . . . . . . . . . . 98 | |||
| 7.1. Server Responses - Status Responses . . . . . . . . . . . 97 | 7.1. Server Responses - Status Responses . . . . . . . . . . . 99 | |||
| 7.1.1. OK Response . . . . . . . . . . . . . . . . . . . . . 105 | 7.1.1. OK Response . . . . . . . . . . . . . . . . . . . . . 107 | |||
| 7.1.2. NO Response . . . . . . . . . . . . . . . . . . . . . 105 | 7.1.2. NO Response . . . . . . . . . . . . . . . . . . . . . 107 | |||
| 7.1.3. BAD Response . . . . . . . . . . . . . . . . . . . . 106 | 7.1.3. BAD Response . . . . . . . . . . . . . . . . . . . . 107 | |||
| 7.1.4. PREAUTH Response . . . . . . . . . . . . . . . . . . 106 | 7.1.4. PREAUTH Response . . . . . . . . . . . . . . . . . . 108 | |||
| 7.1.5. BYE Response . . . . . . . . . . . . . . . . . . . . 106 | 7.1.5. BYE Response . . . . . . . . . . . . . . . . . . . . 108 | |||
| 7.2. Server Responses - Server and Mailbox Status . . . . . . 107 | 7.2. Server Responses - Server and Mailbox Status . . . . . . 109 | |||
| 7.2.1. The ENABLED Response . . . . . . . . . . . . . . . . 107 | 7.2.1. The ENABLED Response . . . . . . . . . . . . . . . . 109 | |||
| 7.2.2. CAPABILITY Response . . . . . . . . . . . . . . . . . 107 | 7.2.2. CAPABILITY Response . . . . . . . . . . . . . . . . . 109 | |||
| 7.2.3. LIST Response . . . . . . . . . . . . . . . . . . . . 108 | 7.2.3. LIST Response . . . . . . . . . . . . . . . . . . . . 110 | |||
| 7.2.4. NAMESPACE Response . . . . . . . . . . . . . . . . . 112 | 7.2.4. NAMESPACE Response . . . . . . . . . . . . . . . . . 114 | |||
| 7.2.5. STATUS Response . . . . . . . . . . . . . . . . . . . 113 | 7.2.5. STATUS Response . . . . . . . . . . . . . . . . . . . 114 | |||
| 7.2.6. ESEARCH Response . . . . . . . . . . . . . . . . . . 113 | 7.2.6. ESEARCH Response . . . . . . . . . . . . . . . . . . 115 | |||
| 7.2.7. FLAGS Response . . . . . . . . . . . . . . . . . . . 113 | 7.2.7. FLAGS Response . . . . . . . . . . . . . . . . . . . 115 | |||
| 7.3. Server Responses - Mailbox Size . . . . . . . . . . . . . 114 | 7.3. Server Responses - Mailbox Size . . . . . . . . . . . . . 116 | |||
| 7.3.1. EXISTS Response . . . . . . . . . . . . . . . . . . . 114 | 7.3.1. EXISTS Response . . . . . . . . . . . . . . . . . . . 116 | |||
| 7.4. Server Responses - Message Status . . . . . . . . . . . . 114 | 7.4. Server Responses - Message Status . . . . . . . . . . . . 116 | |||
| 7.4.1. EXPUNGE Response . . . . . . . . . . . . . . . . . . 114 | 7.4.1. EXPUNGE Response . . . . . . . . . . . . . . . . . . 116 | |||
| 7.4.2. FETCH Response . . . . . . . . . . . . . . . . . . . 115 | 7.4.2. FETCH Response . . . . . . . . . . . . . . . . . . . 117 | |||
| 7.5. Server Responses - Command Continuation Request . . . . . 121 | 7.5. Server Responses - Command Continuation Request . . . . . 123 | |||
| 8. Sample IMAP4rev2 connection . . . . . . . . . . . . . . . . . 122 | 8. Sample IMAP4rev2 connection . . . . . . . . . . . . . . . . . 123 | |||
| 9. Formal Syntax . . . . . . . . . . . . . . . . . . . . . . . . 123 | 9. Formal Syntax . . . . . . . . . . . . . . . . . . . . . . . . 124 | |||
| 10. Author's Note . . . . . . . . . . . . . . . . . . . . . . . . 140 | 10. Author's Note . . . . . . . . . . . . . . . . . . . . . . . . 142 | |||
| 11. Security Considerations . . . . . . . . . . . . . . . . . . . 140 | 11. Security Considerations . . . . . . . . . . . . . . . . . . . 142 | |||
| 11.1. STARTTLS Security Considerations . . . . . . . . . . . . 140 | 11.1. STARTTLS Security Considerations . . . . . . . . . . . . 142 | |||
| 11.2. COPYUID and APPENDUID response codes . . . . . . . . . . 140 | 11.2. COPYUID and APPENDUID response codes . . . . . . . . . . 143 | |||
| 11.3. LIST command and Other Users' namespace . . . . . . . . 141 | 11.3. LIST command and Other Users' namespace . . . . . . . . 143 | |||
| 11.4. Other Security Considerations . . . . . . . . . . . . . 141 | 11.4. Other Security Considerations . . . . . . . . . . . . . 143 | |||
| 12. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 142 | 12. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 144 | |||
| 12.1. Updates to IMAP4 Capabilities registry . . . . . . . . . 142 | 12.1. Updates to IMAP4 Capabilities registry . . . . . . . . . 144 | |||
| 12.2. GSSAPI/SASL service name . . . . . . . . . . . . . . . . 142 | 12.2. GSSAPI/SASL service name . . . . . . . . . . . . . . . . 145 | |||
| 13. References . . . . . . . . . . . . . . . . . . . . . . . . . 142 | 12.3. LIST Selection Options, LIST Return Options, LIST | |||
| 13.1. Normative References . . . . . . . . . . . . . . . . . . 142 | extended data items . . . . . . . . . . . . . . . . . . 145 | |||
| 13.2. Informative References (related protocols) . . . . . . . 145 | 13. References . . . . . . . . . . . . . . . . . . . . . . . . . 145 | |||
| 13.1. Normative References . . . . . . . . . . . . . . . . . . 145 | ||||
| 13.2. Informative References (related protocols) . . . . . . . 148 | ||||
| 13.3. Informative References (historical aspects of IMAP and | 13.3. Informative References (historical aspects of IMAP and | |||
| related protocols) . . . . . . . . . . . . . . . . . . . 147 | related protocols) . . . . . . . . . . . . . . . . . . . 150 | |||
| Appendix A. Backward compatibility with IMAP4rev1 . . . . . . . 148 | Appendix A. Backward compatibility with IMAP4rev1 . . . . . . . 151 | |||
| A.1. Mailbox International Naming Convention for compatibility | A.1. Mailbox International Naming Convention for compatibility | |||
| with IMAP4rev1 . . . . . . . . . . . . . . . . . . . . . 148 | with IMAP4rev1 . . . . . . . . . . . . . . . . . . . . . 151 | |||
| Appendix B. Backward compatibility with BINARY extension . . . . 150 | ||||
| Appendix C. Backward compatibility with LIST-EXTENDED extension 150 | Appendix B. Backward compatibility with BINARY extension . . . . 153 | |||
| Appendix D. Changes from RFC 3501 / IMAP4rev1 . . . . . . . . . 150 | Appendix C. Backward compatibility with LIST-EXTENDED extension 153 | |||
| Appendix E. Acknowledgement . . . . . . . . . . . . . . . . . . 153 | Appendix D. Changes from RFC 3501 / IMAP4rev1 . . . . . . . . . 153 | |||
| Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 | Appendix E. Acknowledgement . . . . . . . . . . . . . . . . . . 155 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 158 | Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 161 | ||||
| 1. How to Read This Document | 1. How to Read This Document | |||
| 1.1. Organization of This Document | 1.1. Organization of This Document | |||
| This document is written from the point of view of the implementor of | This document is written from the point of view of the implementor of | |||
| an IMAP4rev2 client or server. Beyond the protocol overview in | an IMAP4rev2 client or server. Beyond the protocol overview in | |||
| section 2, it is not optimized for someone trying to understand the | section 2, it is not optimized for someone trying to understand the | |||
| operation of the protocol. The material in sections 3 through 5 | operation of the protocol. The material in sections 3 through 5 | |||
| provides the general context and definitions with which IMAP4rev2 | provides the general context and definitions with which IMAP4rev2 | |||
| skipping to change at page 10, line 18 ¶ | skipping to change at page 10, line 18 ¶ | |||
| value. It is not intended to provide any guarantee that any | value. It is not intended to provide any guarantee that any | |||
| message will have this unique identifier. A client can only | message will have this unique identifier. A client can only | |||
| assume, at the time that it obtains the next unique identifier | assume, at the time that it obtains the next unique identifier | |||
| value, that messages arriving after that time will have a UID | value, that messages arriving after that time will have a UID | |||
| greater than or equal to that value. | greater than or equal to that value. | |||
| The unique identifier validity value is sent in a UIDVALIDITY | The unique identifier validity value is sent in a UIDVALIDITY | |||
| response code in an OK untagged response at mailbox selection time. | response code in an OK untagged response at mailbox selection time. | |||
| If unique identifiers from an earlier session fail to persist in this | If unique identifiers from an earlier session fail to persist in this | |||
| session, the unique identifier validity value MUST be greater than | session, the unique identifier validity value MUST be greater than | |||
| the one used in the earlier session. | the one used in the earlier session. A good UIDVALIDITY value to use | |||
| is a 32-bit representation of the current date/time when the value is | ||||
| assigned: this ensures that the value is unique and always increases. | ||||
| Another possible alternative is a global counter that gets | ||||
| incremented every time a mailbox is created. | ||||
| Note: Ideally, unique identifiers SHOULD persist at all times. | Note: Ideally, unique identifiers SHOULD persist at all times. | |||
| Although this specification recognizes that failure to persist can | Although this specification recognizes that failure to persist can | |||
| be unavoidable in certain server environments, it STRONGLY | be unavoidable in certain server environments, it STRONGLY | |||
| ENCOURAGES message store implementation techniques that avoid this | ENCOURAGES message store implementation techniques that avoid this | |||
| problem. For example: | problem. For example: | |||
| 1. Unique identifiers MUST be strictly ascending in the mailbox | 1. Unique identifiers MUST be strictly ascending in the mailbox | |||
| at all times. If the physical message store is re-ordered by | at all times. If the physical message store is re-ordered by | |||
| a non-IMAP agent, this requires that the unique identifiers in | a non-IMAP agent, this requires that the unique identifiers in | |||
| the mailbox be regenerated, since the former unique | the mailbox be regenerated, since the former unique | |||
| identifiers are no longer strictly ascending as a result of | identifiers are no longer strictly ascending as a result of | |||
| the re-ordering. | the re-ordering. | |||
| 2. If the message store has no mechanism to store unique | 2. If the message store has no mechanism to store unique | |||
| identifiers, it must regenerate unique identifiers at each | identifiers, it must regenerate unique identifiers at each | |||
| session, and each session must have a unique UIDVALIDITY | session, and each session must have a unique UIDVALIDITY | |||
| value. | value. | |||
| 3. If the mailbox is deleted and a new mailbox with the same name | 3. If the mailbox is deleted/renamed and a new mailbox with the | |||
| is created at a later date, the server must either keep track | same name is created at a later date, the server must either | |||
| of unique identifiers from the previous instance of the | keep track of unique identifiers from the previous instance of | |||
| mailbox, or it must assign a new UIDVALIDITY value to the new | the mailbox, or it must assign a new UIDVALIDITY value to the | |||
| instance of the mailbox. A good UIDVALIDITY value to use in | new instance of the mailbox. | |||
| this case is a 32-bit representation of the creation date/time | ||||
| of the mailbox. It is alright to use a constant such as 1, | ||||
| but only if it guaranteed that unique identifiers will never | ||||
| be reused, even in the case of a mailbox being deleted (or | ||||
| renamed) and a new mailbox by the same name created at some | ||||
| future time. | ||||
| 4. The combination of mailbox name, UIDVALIDITY, and UID must | 4. The combination of mailbox name, UIDVALIDITY, and UID must | |||
| refer to a single immutable message on that server forever. | refer to a single immutable (or expunged) message on that | |||
| In particular, the internal date, [RFC-5322] size, envelope, | server forever. In particular, the internal date, [RFC-5322] | |||
| body structure, and message texts (all BODY[...] fetch data | size, envelope, body structure, and message texts (all | |||
| items) must never change. This does not include message | BODY[...] fetch data items) must never change. This does not | |||
| numbers, nor does it include attributes that can be set by a | include message numbers, nor does it include attributes that | |||
| STORE command (e.g., FLAGS). | can be set by a STORE command (e.g., FLAGS). When a message | |||
| is expunged, its UID MUST NOT be reused under the same | ||||
| UIDVALIDITY value. | ||||
| 2.3.1.2. Message Sequence Number Message Attribute | 2.3.1.2. Message Sequence Number Message Attribute | |||
| A relative position from 1 to the number of messages in the mailbox. | A relative position from 1 to the number of messages in the mailbox. | |||
| This position MUST be ordered by ascending unique identifier. As | This position MUST be ordered by ascending unique identifier. As | |||
| each new message is added, it is assigned a message sequence number | each new message is added, it is assigned a message sequence number | |||
| that is 1 higher than the number of messages in the mailbox before | that is 1 higher than the number of messages in the mailbox before | |||
| that new message was added. | that new message was added. | |||
| Message sequence numbers can be reassigned during the session. For | Message sequence numbers can be reassigned during the session. For | |||
| skipping to change at page 13, line 25 ¶ | skipping to change at page 13, line 25 ¶ | |||
| compatibility with existing clients that understand the $Junk flag | compatibility with existing clients that understand the $Junk flag | |||
| but not the $Phishing flag. This so that when an unextended | but not the $Phishing flag. This so that when an unextended | |||
| client removes the $Junk flag, an extended client will also show | client removes the $Junk flag, an extended client will also show | |||
| the correct state. See [IMAP-KEYWORDS-REG] for more information. | the correct state. See [IMAP-KEYWORDS-REG] for more information. | |||
| $Junk and $NotJunk are mutually exclusive. If more than one of them | $Junk and $NotJunk are mutually exclusive. If more than one of them | |||
| is set for a message, the client MUST treat this as if none of them | is set for a message, the client MUST treat this as if none of them | |||
| is set and SHOULD unset both of them on the IMAP server. | is set and SHOULD unset both of them on the IMAP server. | |||
| Other registered keywords can be found in the "IMAP and JMAP | Other registered keywords can be found in the "IMAP and JMAP | |||
| Keywords" registry [IMAP-KEYWORDS-REG]. | Keywords" registry [IMAP-KEYWORDS-REG]. New keywords SHOULD be | |||
| registered in this registry using the procedure specified in | ||||
| [RFC5788]. | ||||
| A flag can be permanent or session-only on a per-flag basis. | A flag can be permanent or session-only on a per-flag basis. | |||
| Permanent flags are those which the client can add or remove from the | Permanent flags are those which the client can add or remove from the | |||
| message flags permanently; that is, concurrent and subsequent | message flags permanently; that is, concurrent and subsequent | |||
| sessions will see any change in permanent flags. Changes to session | sessions will see any change in permanent flags. Changes to session | |||
| flags are valid only in that session. | flags are valid only in that session. | |||
| 2.3.3. Internal Date Message Attribute | 2.3.3. Internal Date Message Attribute | |||
| The internal date and time of the message on the server. This is not | The internal date and time of the message on the server. This is not | |||
| skipping to change at page 35, line 47 ¶ | skipping to change at page 35, line 47 ¶ | |||
| changes to deployed server responses (and thus benefit from ENABLE) | changes to deployed server responses (and thus benefit from ENABLE) | |||
| have a higher complexity cost than extensions that do not. | have a higher complexity cost than extensions that do not. | |||
| 6.3.2. SELECT Command | 6.3.2. SELECT Command | |||
| Arguments: mailbox name | Arguments: mailbox name | |||
| Responses: REQUIRED untagged responses: FLAGS, EXISTS | Responses: REQUIRED untagged responses: FLAGS, EXISTS | |||
| REQUIRED OK untagged responses: PERMANENTFLAGS, | REQUIRED OK untagged responses: PERMANENTFLAGS, | |||
| UIDNEXT, UIDVALIDITY | UIDNEXT, UIDVALIDITY | |||
| OPTIONAL untagged response: LIST | ||||
| Result: OK - select completed, now in selected state | Result: OK - select completed, now in selected state | |||
| NO - select failure, now in authenticated state: no | NO - select failure, now in authenticated state: no | |||
| such mailbox, can't access mailbox | such mailbox, can't access mailbox | |||
| BAD - command unknown or arguments invalid | BAD - command unknown or arguments invalid | |||
| The SELECT command selects a mailbox so that messages in the mailbox | The SELECT command selects a mailbox so that messages in the mailbox | |||
| can be accessed. Before returning an OK to the client, the server | can be accessed. Before returning an OK to the client, the server | |||
| MUST send the following untagged data to the client. Note that | MUST send the following untagged data to the client. (The order of | |||
| earlier versions of this protocol only required the FLAGS and EXISTS | individual responses is not important.) Note that earlier versions | |||
| untagged data; consequently, client implementations SHOULD implement | of this protocol only required the FLAGS and EXISTS untagged data; | |||
| default behavior for missing data as discussed with the individual | consequently, client implementations SHOULD implement default | |||
| item. | behavior for missing data as discussed with the individual item. | |||
| FLAGS Defined flags in the mailbox. See the description of the | FLAGS Defined flags in the mailbox. See the description of the | |||
| FLAGS response for more detail. | FLAGS response for more detail. | |||
| <n> EXISTS The number of messages in the mailbox. See the | <n> EXISTS The number of messages in the mailbox. See the | |||
| description of the EXISTS response for more detail. | description of the EXISTS response for more detail. | |||
| LIST If the server allows de-normalized UTF-8 mailbox names (see | ||||
| Section 5.1) and the supplied mailbox name differs from the | ||||
| normalized version, the server SHOULD return LIST with OLDNAME | ||||
| extended data item. See Section 6.3.9.7 for more details. | ||||
| OK [PERMANENTFLAGS (<list of flags>)] A list of message flags that | OK [PERMANENTFLAGS (<list of flags>)] A list of message flags that | |||
| the client can change permanently. If this is missing, the client | the client can change permanently. If this is missing, the client | |||
| should assume that all flags can be changed permanently. | should assume that all flags can be changed permanently. | |||
| OK [UIDNEXT <n>] The next unique identifier value. Refer to | OK [UIDNEXT <n>] The next unique identifier value. Refer to | |||
| Section 2.3.1.1 for more information. If this is missing, the | Section 2.3.1.1 for more information. If this is missing, the | |||
| client can not make any assumptions about the next unique | client can not make any assumptions about the next unique | |||
| identifier value. | identifier value. | |||
| OK [UIDVALIDITY <n>] The unique identifier validity value. Refer to | OK [UIDVALIDITY <n>] The unique identifier validity value. Refer to | |||
| skipping to change at page 37, line 45 ¶ | skipping to change at page 37, line 50 ¶ | |||
| RECENT". Pure IMAP4rev2 clients are advised to ignore the untagged | RECENT". Pure IMAP4rev2 clients are advised to ignore the untagged | |||
| RECENT response. | RECENT response. | |||
| 6.3.3. EXAMINE Command | 6.3.3. EXAMINE Command | |||
| Arguments: mailbox name | Arguments: mailbox name | |||
| Responses: REQUIRED untagged responses: FLAGS, EXISTS | Responses: REQUIRED untagged responses: FLAGS, EXISTS | |||
| REQUIRED OK untagged responses: PERMANENTFLAGS, | REQUIRED OK untagged responses: PERMANENTFLAGS, | |||
| UIDNEXT, UIDVALIDITY | UIDNEXT, UIDVALIDITY | |||
| OPTIONAL untagged response: LIST | ||||
| Result: OK - examine completed, now in selected state | Result: OK - examine completed, now in selected state | |||
| NO - examine failure, now in authenticated state: no | NO - examine failure, now in authenticated state: no | |||
| such mailbox, can't access mailbox BAD - command unknown | such mailbox, can't access mailbox BAD - command unknown | |||
| or arguments invalid | or arguments invalid | |||
| The EXAMINE command is identical to SELECT and returns the same | The EXAMINE command is identical to SELECT and returns the same | |||
| output; however, the selected mailbox is identified as read-only. No | output; however, the selected mailbox is identified as read-only. No | |||
| changes to the permanent state of the mailbox, including per-user | changes to the permanent state of the mailbox, including per-user | |||
| state, are permitted. | state, are permitted. | |||
| skipping to change at page 38, line 25 ¶ | skipping to change at page 38, line 30 ¶ | |||
| S: * OK [UIDVALIDITY 3857529045] UIDs valid | S: * OK [UIDVALIDITY 3857529045] UIDs valid | |||
| S: * OK [UIDNEXT 4392] Predicted next UID | S: * OK [UIDNEXT 4392] Predicted next UID | |||
| S: * FLAGS (\Answered \Flagged \Deleted \Seen \Draft) | S: * FLAGS (\Answered \Flagged \Deleted \Seen \Draft) | |||
| S: * OK [PERMANENTFLAGS ()] No permanent flags permitted | S: * OK [PERMANENTFLAGS ()] No permanent flags permitted | |||
| S: A932 OK [READ-ONLY] EXAMINE completed | S: A932 OK [READ-ONLY] EXAMINE completed | |||
| 6.3.4. CREATE Command | 6.3.4. CREATE Command | |||
| Arguments: mailbox name | Arguments: mailbox name | |||
| Responses: no specific responses for this command | Responses: OPTIONAL untagged response: LIST | |||
| Result: OK - create completed | Result: OK - create completed | |||
| NO - create failure: can't create mailbox with that name | NO - create failure: can't create mailbox with that name | |||
| BAD - command unknown or arguments invalid | BAD - command unknown or arguments invalid | |||
| The CREATE command creates a mailbox with the given name. An OK | The CREATE command creates a mailbox with the given name. An OK | |||
| response is returned only if a new mailbox with that name has been | response is returned only if a new mailbox with that name has been | |||
| created. It is an error to attempt to create INBOX or a mailbox with | created. It is an error to attempt to create INBOX or a mailbox with | |||
| a name that refers to an extant mailbox. Any error in creation will | a name that refers to an extant mailbox. Any error in creation will | |||
| return a tagged NO response. If a client attempts to create a UTF-8 | return a tagged NO response. If a client attempts to create a UTF-8 | |||
| mailbox name that is not a valid Net-Unicode name, the server MUST | mailbox name that is not a valid Net-Unicode name, the server MUST | |||
| reject the creation or convert the name to Net-Unicode prior to | reject the creation or convert the name to Net-Unicode prior to | |||
| creating the mailbox. | creating the mailbox. If the server decides to convert (normalize) | |||
| the name, it SHOULD return an untagged LIST with OLDNAME extended | ||||
| data item, with the OLDNAME value being the supplied mailbox name and | ||||
| the name parameter being the normalized mailbox name. (See | ||||
| Section 6.3.9.7 for more details.) | ||||
| Mailboxes created in one IMAP session MAY be announced to other IMAP | ||||
| sessions using unsolicited LIST response. If the server | ||||
| automatically subscribes a mailbox when it is created, then the | ||||
| unsolicited LIST response for each affected subscribed mailbox name | ||||
| MUST include the \Subscribed attribute. | ||||
| If the mailbox name is suffixed with the server's hierarchy separator | If the mailbox name is suffixed with the server's hierarchy separator | |||
| character (as returned from the server by a LIST command), this is a | character (as returned from the server by a LIST command), this is a | |||
| declaration that the client intends to create mailbox names under | declaration that the client intends to create mailbox names under | |||
| this name in the hierarchy. Server implementations that do not | this name in the hierarchy. Server implementations that do not | |||
| require this declaration MUST ignore the declaration. In any case, | require this declaration MUST ignore the declaration. In any case, | |||
| the name created is without the trailing hierarchy delimiter. | the name created is without the trailing hierarchy delimiter. | |||
| If the server's hierarchy separator character appears elsewhere in | If the server's hierarchy separator character appears elsewhere in | |||
| the name, the server SHOULD create any superior hierarchical names | the name, the server SHOULD create any superior hierarchical names | |||
| skipping to change at page 39, line 11 ¶ | skipping to change at page 39, line 27 ¶ | |||
| In other words, an attempt to create "foo/bar/zap" on a server in | In other words, an attempt to create "foo/bar/zap" on a server in | |||
| which "/" is the hierarchy separator character SHOULD create foo/ and | which "/" is the hierarchy separator character SHOULD create foo/ and | |||
| foo/bar/ if they do not already exist. | foo/bar/ if they do not already exist. | |||
| If a new mailbox is created with the same name as a mailbox which was | If a new mailbox is created with the same name as a mailbox which was | |||
| deleted, its unique identifiers MUST be greater than any unique | deleted, its unique identifiers MUST be greater than any unique | |||
| identifiers used in the previous incarnation of the mailbox UNLESS | identifiers used in the previous incarnation of the mailbox UNLESS | |||
| the new incarnation has a different unique identifier validity value. | the new incarnation has a different unique identifier validity value. | |||
| See the description of the UID command for more detail. | See the description of the UID command for more detail. | |||
| Example: C: A003 CREATE owatagusiam/ | Example: C: A003 CREATE owatagusiam/ | |||
| S: A003 OK CREATE completed | S: A003 OK CREATE completed | |||
| C: A004 CREATE owatagusiam/blurdybloop | C: A004 CREATE owatagusiam/blurdybloop | |||
| S: A004 OK CREATE completed | S: A004 OK CREATE completed | |||
| C: A005 CREATE NonNormalized | ||||
| S: * LIST () "/" "Normalized" ("OLDNAME" ("NonNormalized")) | ||||
| S: A005 OK CREATE completed | ||||
| (in the last example imagine that "NonNormalized" is | ||||
| a non NFC normalized Unicode mailbox name and that | ||||
| "Normalized" is its NFC normalized version.) | ||||
| Note: The interpretation of this example depends on whether "/" | Note: The interpretation of this example depends on whether "/" | |||
| was returned as the hierarchy separator from LIST. If "/" is the | was returned as the hierarchy separator from LIST. If "/" is the | |||
| hierarchy separator, a new level of hierarchy named "owatagusiam" | hierarchy separator, a new level of hierarchy named "owatagusiam" | |||
| with a member called "blurdybloop" is created. Otherwise, two | with a member called "blurdybloop" is created. Otherwise, two | |||
| mailboxes at the same hierarchy level are created. | mailboxes at the same hierarchy level are created. | |||
| 6.3.5. DELETE Command | 6.3.5. DELETE Command | |||
| Arguments: mailbox name | Arguments: mailbox name | |||
| Responses: no specific responses for this command | Responses: OPTIONAL untagged response: LIST | |||
| Result: OK - delete completed | Result: OK - delete completed | |||
| NO - delete failure: can't delete mailbox with that name | NO - delete failure: can't delete mailbox with that name | |||
| BAD - command unknown or arguments invalid | BAD - command unknown or arguments invalid | |||
| The DELETE command permanently removes the mailbox with the given | The DELETE command permanently removes the mailbox with the given | |||
| name. A tagged OK response is returned only if the mailbox has been | name. A tagged OK response is returned only if the mailbox has been | |||
| deleted. It is an error to attempt to delete INBOX or a mailbox name | deleted. It is an error to attempt to delete INBOX or a mailbox name | |||
| that does not exist. | that does not exist. | |||
| skipping to change at page 40, line 14 ¶ | skipping to change at page 40, line 38 ¶ | |||
| If the server returns OK response, all messages in that mailbox are | If the server returns OK response, all messages in that mailbox are | |||
| removed by the DELETE command. | removed by the DELETE command. | |||
| The value of the highest-used unique identifier of the deleted | The value of the highest-used unique identifier of the deleted | |||
| mailbox MUST be preserved so that a new mailbox created with the same | mailbox MUST be preserved so that a new mailbox created with the same | |||
| name will not reuse the identifiers of the former incarnation, UNLESS | name will not reuse the identifiers of the former incarnation, UNLESS | |||
| the new incarnation has a different unique identifier validity value. | the new incarnation has a different unique identifier validity value. | |||
| See the description of the UID command for more detail. | See the description of the UID command for more detail. | |||
| Mailboxes deleted in one IMAP session MAY be announced to other IMAP | ||||
| sessions using unsolicited LIST response, containing the | ||||
| "\NonExistent" attribute. | ||||
| Examples: C: A682 LIST "" * | Examples: C: A682 LIST "" * | |||
| S: * LIST () "/" blurdybloop | S: * LIST () "/" blurdybloop | |||
| S: * LIST (\Noselect) "/" foo | S: * LIST (\Noselect) "/" foo | |||
| S: * LIST () "/" foo/bar | S: * LIST () "/" foo/bar | |||
| S: A682 OK LIST completed | S: A682 OK LIST completed | |||
| C: A683 DELETE blurdybloop | C: A683 DELETE blurdybloop | |||
| S: A683 OK DELETE completed | S: A683 OK DELETE completed | |||
| C: A684 DELETE foo | C: A684 DELETE foo | |||
| S: A684 NO Name "foo" has inferior hierarchical names | S: A684 NO Name "foo" has inferior hierarchical names | |||
| C: A685 DELETE foo/bar | C: A685 DELETE foo/bar | |||
| skipping to change at page 40, line 51 ¶ | skipping to change at page 41, line 42 ¶ | |||
| S: A85 OK LIST completed | S: A85 OK LIST completed | |||
| C: A86 LIST "" % | C: A86 LIST "" % | |||
| S: * LIST (\Noselect) "." foo | S: * LIST (\Noselect) "." foo | |||
| S: A86 OK LIST completed | S: A86 OK LIST completed | |||
| 6.3.6. RENAME Command | 6.3.6. RENAME Command | |||
| Arguments: existing mailbox name | Arguments: existing mailbox name | |||
| new mailbox name | new mailbox name | |||
| Responses: no specific responses for this command | Responses: OPTIONAL untagged response: LIST | |||
| Result: OK - rename completed | Result: OK - rename completed | |||
| NO - rename failure: can't rename mailbox with that name, | NO - rename failure: can't rename mailbox with that name, | |||
| can't rename to mailbox with that name | can't rename to mailbox with that name | |||
| BAD - command unknown or arguments invalid | BAD - command unknown or arguments invalid | |||
| The RENAME command changes the name of a mailbox. A tagged OK | The RENAME command changes the name of a mailbox. A tagged OK | |||
| response is returned only if the mailbox has been renamed. It is an | response is returned only if the mailbox has been renamed. It is an | |||
| error to attempt to rename from a mailbox name that does not exist or | error to attempt to rename from a mailbox name that does not exist or | |||
| to a mailbox name that already exists. Any error in renaming will | to a mailbox name that already exists. Any error in renaming will | |||
| return a tagged NO response. | return a tagged NO response. | |||
| If the name has inferior hierarchical names, then the inferior | If the name has inferior hierarchical names, then the inferior | |||
| hierarchical names MUST also be renamed. For example, a rename of | hierarchical names MUST also be renamed. For example, a rename of | |||
| "foo" to "zap" will rename "foo/bar" (assuming "/" is the hierarchy | "foo" to "zap" will rename "foo/bar" (assuming "/" is the hierarchy | |||
| delimiter character) to "zap/bar". | delimiter character) to "zap/bar". | |||
| If the server's hierarchy separator character appears in the name, | If the server's hierarchy separator character appears in the name, | |||
| the server SHOULD create any superior hierarchical names that are | the server SHOULD create any superior hierarchical names that are | |||
| needed for the RENAME command to complete successfully. In other | needed for the RENAME command to complete successfully. In other | |||
| words, an attempt to rename "foo/bar/zap" to baz/rag/zowie on a | words, an attempt to rename "foo/bar/zap" to baz/rag/zowie on a | |||
| server in which "/" is the hierarchy separator character SHOULD | server in which "/" is the hierarchy separator character in the | |||
| create baz/ and baz/rag/ if they do not already exist. | corresponding namespace SHOULD create baz/ and baz/rag/ if they do | |||
| not already exist. | ||||
| The value of the highest-used unique identifier of the old mailbox | The value of the highest-used unique identifier of the old mailbox | |||
| name MUST be preserved so that a new mailbox created with the same | name MUST be preserved so that a new mailbox created with the same | |||
| name will not reuse the identifiers of the former incarnation, UNLESS | name will not reuse the identifiers of the former incarnation, UNLESS | |||
| the new incarnation has a different unique identifier validity value. | the new incarnation has a different unique identifier validity value. | |||
| See the description of the UID command for more detail. | See the description of the UID command for more detail. | |||
| Renaming INBOX is permitted, and has special behavior. (Note that | Renaming INBOX is permitted, and has special behavior. (Note that | |||
| some servers disallow renaming INBOX, so clients need to be able to | some servers disallow renaming INBOX, so clients need to be able to | |||
| handle such RENAME failing). It moves all messages in INBOX to a new | handle such RENAME failing). It moves all messages in INBOX to a new | |||
| mailbox with the given name, leaving INBOX empty. If the server | mailbox with the given name, leaving INBOX empty. If the server | |||
| implementation supports inferior hierarchical names of INBOX, these | implementation supports inferior hierarchical names of INBOX, these | |||
| are unaffected by a rename of INBOX. | are unaffected by a rename of INBOX. | |||
| If the server allows creation of mailboxes with names that are not | ||||
| valid Net-Unicode names, the server normalizes both the existing | ||||
| mailbox name parameter and the new mailbox name parameter. If the | ||||
| normalized version of any of these 2 parameters differs from the | ||||
| corresponding supplied version, the server SHOULD return an untagged | ||||
| LIST response with OLDNAME extended data item, with the OLDNAME value | ||||
| being the supplied existing mailbox name and the name parameter being | ||||
| the normalized new mailbox name (see Section 6.3.9.7). This would | ||||
| allow the client to correlate supplied name with the normalized name. | ||||
| Mailboxes renamed in one IMAP session MAY be announced to other IMAP | ||||
| sessions using unsolicited LIST response with OLDNAME extended data | ||||
| item. | ||||
| In both of the above cases: if the server automatically subscribes a | ||||
| mailbox when it is renamed, then the unsolicited LIST response for | ||||
| each affected subscribed mailbox name MUST include the \Subscribed | ||||
| attribute. No unsolicited LIST responses need to be sent for | ||||
| children mailboxes, if any. When INBOX is successfully renamed, a | ||||
| new INBOX is assumed to be created. No unsolicited LIST responses | ||||
| need to be sent for INBOX in this case. | ||||
| Examples: C: A682 LIST "" * | Examples: C: A682 LIST "" * | |||
| S: * LIST () "/" blurdybloop | S: * LIST () "/" blurdybloop | |||
| S: * LIST (\Noselect) "/" foo | S: * LIST (\Noselect) "/" foo | |||
| S: * LIST () "/" foo/bar | S: * LIST () "/" foo/bar | |||
| S: A682 OK LIST completed | S: A682 OK LIST completed | |||
| C: A683 RENAME blurdybloop sarasoop | C: A683 RENAME blurdybloop sarasoop | |||
| S: A683 OK RENAME completed | S: A683 OK RENAME completed | |||
| C: A684 RENAME foo zowie | C: A684 RENAME foo zowie | |||
| S: A684 OK RENAME Completed | S: A684 OK RENAME Completed | |||
| C: A685 LIST "" * | C: A685 LIST "" * | |||
| skipping to change at page 48, line 43 ¶ | skipping to change at page 49, line 47 ¶ | |||
| about parent mailboxes that don't match other selection options, | about parent mailboxes that don't match other selection options, | |||
| but have some submailboxes that do. Information about children is | but have some submailboxes that do. Information about children is | |||
| returned in the CHILDINFO extended data item, as described in | returned in the CHILDINFO extended data item, as described in | |||
| Section 6.3.9.6. | Section 6.3.9.6. | |||
| Note 1: In order for a parent mailbox to be returned, it still has | Note 1: In order for a parent mailbox to be returned, it still has | |||
| to match the canonical LIST pattern. | to match the canonical LIST pattern. | |||
| Note 2: When returning the CHILDINFO extended data item, it | Note 2: When returning the CHILDINFO extended data item, it | |||
| doesn't matter whether or not the submailbox matches the canonical | doesn't matter whether or not the submailbox matches the canonical | |||
| LIST pattern. See also example 9 in Section 6.3.9.7. | LIST pattern. See also example 9 in Section 6.3.9.8. | |||
| The RECURSIVEMATCH option MUST NOT occur as the only selection | The RECURSIVEMATCH option MUST NOT occur as the only selection | |||
| option (or only with REMOTE), as it only makes sense when other | option (or only with REMOTE), as it only makes sense when other | |||
| selection options are also used. The server MUST return BAD | selection options are also used. The server MUST return BAD | |||
| tagged response in such case. | tagged response in such case. | |||
| Note that even if the RECURSIVEMATCH option is specified, the | Note that even if the RECURSIVEMATCH option is specified, the | |||
| client MUST still be able to handle a case when a CHILDINFO | client MUST still be able to handle a case when a CHILDINFO | |||
| extended data item is returned and there are no submailboxes that | extended data item is returned and there are no submailboxes that | |||
| meet the selection criteria of the subsequent LIST command, as | meet the selection criteria of the subsequent LIST command, as | |||
| skipping to change at page 52, line 35 ¶ | skipping to change at page 53, line 43 ¶ | |||
| that the mailbox has at least one descendant mailbox that matches the | that the mailbox has at least one descendant mailbox that matches the | |||
| selection criteria. | selection criteria. | |||
| Note: Some servers allow for mailboxes to exist without requiring | Note: Some servers allow for mailboxes to exist without requiring | |||
| their parent to exist. For example, a mailbox "Customers/ABC" can | their parent to exist. For example, a mailbox "Customers/ABC" can | |||
| exist while the mailbox "Customers" does not. As CHILDINFO extended | exist while the mailbox "Customers" does not. As CHILDINFO extended | |||
| data item is not allowed if the RECURSIVEMATCH selection option is | data item is not allowed if the RECURSIVEMATCH selection option is | |||
| not specified, such servers SHOULD use the "\NonExistent | not specified, such servers SHOULD use the "\NonExistent | |||
| \HasChildren" attribute pair to signal to the client that there is a | \HasChildren" attribute pair to signal to the client that there is a | |||
| descendant mailbox that matches the selection criteria. See example | descendant mailbox that matches the selection criteria. See example | |||
| 11 in Section 6.3.9.7. | 11 in Section 6.3.9.8. | |||
| The returned selection criteria allow the client to distinguish a | The returned selection criteria allow the client to distinguish a | |||
| solicited response from an unsolicited one, as well as to distinguish | solicited response from an unsolicited one, as well as to distinguish | |||
| among solicited responses caused by multiple pipelined LIST commands | among solicited responses caused by multiple pipelined LIST commands | |||
| that specify different criteria. | that specify different criteria. | |||
| Servers SHOULD ONLY return a non-matching mailbox name along with | Servers SHOULD ONLY return a non-matching mailbox name along with | |||
| CHILDINFO if at least one matching child is not also being returned. | CHILDINFO if at least one matching child is not also being returned. | |||
| That is, servers SHOULD suppress redundant CHILDINFO responses. | That is, servers SHOULD suppress redundant CHILDINFO responses. | |||
| Examples 8 and 10 in Section 6.3.9.7 demonstrate the difference | Examples 8 and 10 in Section 6.3.9.8 demonstrate the difference | |||
| between present CHILDINFO extended data item and the "\HasChildren" | between present CHILDINFO extended data item and the "\HasChildren" | |||
| attribute. | attribute. | |||
| The following table summarizes interaction between the "\NonExistent" | The following table summarizes interaction between the "\NonExistent" | |||
| attribute and CHILDINFO (the first column indicates whether the | attribute and CHILDINFO (the first column indicates whether the | |||
| parent mailbox exists): | parent mailbox exists): | |||
| +--------+--------------+--------------------+----------------------+ | +--------+-------------+------------------+-------------------------+ | |||
| | exists | meets the | has a child that | returned LIST- | | | exists | meets the | has a child that | returned IMAP4rev2 | | |||
| | | selection | meets the | EXTENDED attributes | | | | selection | meets the | /LIST-EXTENDED | | |||
| | | criteria | selection criteria | and CHILDINFO | | | | criteria | selection | attributes and | | |||
| +--------+--------------+--------------------+----------------------+ | | | | criteria | CHILDINFO | | |||
| | no | no | no | no LIST response | | +--------+-------------+------------------+-------------------------+ | |||
| | | | | returned | | | no | no | no | no LIST response | | |||
| | yes | no | no | no LIST response | | | | | | returned | | |||
| | | | | returned | | | yes | no | no | no LIST response | | |||
| | no | yes | no | (\NonExistent | | | | | | returned | | |||
| | | | | <attr>) | | | no | yes | no | (\NonExistent <attr>) | | |||
| | yes | yes | no | (<attr>) | | | yes | yes | no | (<attr>) | | |||
| | no | no | yes | (\NonExistent) + | | | no | no | yes | (\NonExistent) + | | |||
| | | | | CHILDINFO | | | | | | CHILDINFO | | |||
| | yes | no | yes | () + CHILDINFO | | | yes | no | yes | () + CHILDINFO | | |||
| | no | yes | yes | (\NonExistent | | | no | yes | yes | (\NonExistent <attr>) + | | |||
| | | | | <attr>) + CHILDINFO | | | | | | CHILDINFO | | |||
| | yes | yes | yes | (<attr>) + CHILDINFO | | | yes | yes | yes | (<attr>) + CHILDINFO | | |||
| +--------+--------------+--------------------+----------------------+ | +--------+-------------+------------------+-------------------------+ | |||
| where <attr> is one or more attributes that correspond to the | where <attr> is one or more attributes that correspond to the | |||
| selection criteria; for example, for the SUBSCRIBED option the <attr> | selection criteria; for example, for the SUBSCRIBED option the <attr> | |||
| is \Subscribed. | is \Subscribed. | |||
| 6.3.9.7. LIST Command Examples | 6.3.9.7. OLDNAME Extended Data Item | |||
| The OLDNAME extended data item is included when a mailbox name is | ||||
| created (with CREATE command), renamed (with RENAME command) or | ||||
| deleted (with DELETE command). (When a mailbox is deleted the | ||||
| "\NonExistent" attribute is also included.) IMAP extensions can | ||||
| specify other conditions when OLDNAME extended data item should be | ||||
| included. | ||||
| If the server allows de-normalized mailbox names (see Section 5.1) in | ||||
| SELECT/EXAMINE, CREATE, RENAME or DELETE, it SHOULD return an | ||||
| unsolicited LIST response that includes OLDNAME extended data item, | ||||
| whenever the supplied mailbox name differs from the resulting | ||||
| normalized mailbox name. From the client point of view this is | ||||
| indistinguishable from another user renaming of deleting the mailbox, | ||||
| as specified in the previous paragraph. | ||||
| A deleted mailbox can be announced like this: | ||||
| S: * LIST (\NonExistent) "." "INBOX.DeletedMailbox" | ||||
| Example of a renamed mailbox: | ||||
| S: * LIST () "/" "NewMailbox" ("OLDNAME" ("OldMailbox")) | ||||
| 6.3.9.8. LIST Command Examples | ||||
| This example shows some uses of the basic LIST command: | This example shows some uses of the basic LIST command: | |||
| Example: C: A101 LIST "" "" | Example: C: A101 LIST "" "" | |||
| S: * LIST (\Noselect) "/" "" | S: * LIST (\Noselect) "/" "" | |||
| S: A101 OK LIST Completed | S: A101 OK LIST Completed | |||
| C: A102 LIST #news.comp.mail.misc "" | C: A102 LIST #news.comp.mail.misc "" | |||
| S: * LIST (\Noselect) "." #news. | S: * LIST (\Noselect) "." #news. | |||
| S: A102 OK LIST Completed | S: A102 OK LIST Completed | |||
| C: A103 LIST /usr/staff/jones "" | C: A103 LIST /usr/staff/jones "" | |||
| skipping to change at page 74, line 7 ¶ | skipping to change at page 76, line 7 ¶ | |||
| option is specified or empty list of options is specified "()", ALL | option is specified or empty list of options is specified "()", ALL | |||
| is assumed (see below). The order of individual options is | is assumed (see below). The order of individual options is | |||
| arbitrary. Individual options may contain parameters enclosed in | arbitrary. Individual options may contain parameters enclosed in | |||
| parentheses (*). If an option has parameters, they consist of atoms | parentheses (*). If an option has parameters, they consist of atoms | |||
| and/or strings and/or lists in a specific order. Any options not | and/or strings and/or lists in a specific order. Any options not | |||
| defined by extensions that the server supports must be rejected with | defined by extensions that the server supports must be rejected with | |||
| a BAD response. | a BAD response. | |||
| (*) - if an option has a mandatory parameter, which can always be | (*) - if an option has a mandatory parameter, which can always be | |||
| represented as a number or a sequence-set, the option parameter does | represented as a number or a sequence-set, the option parameter does | |||
| not need the enclosing (). See ABNF for more details. | not need the enclosing (). See the ABNF for more details. | |||
| This document specifies the following result options: | This document specifies the following result options: | |||
| MIN | MIN | |||
| Return the lowest message number/UID that satisfies the SEARCH | Return the lowest message number/UID that satisfies the SEARCH | |||
| criteria. | criteria. | |||
| If the SEARCH results in no matches, the server MUST NOT | If the SEARCH results in no matches, the server MUST NOT | |||
| include the MIN result option in the ESEARCH response; however, | include the MIN result option in the ESEARCH response; however, | |||
| skipping to change at page 76, line 5 ¶ | skipping to change at page 78, line 5 ¶ | |||
| MAY be supported. Clients SHOULD use UTF-8. Note that if "CHARSET" | MAY be supported. Clients SHOULD use UTF-8. Note that if "CHARSET" | |||
| is not provided IMAP4rev2 server MUST assume UTF-8, so selecting | is not provided IMAP4rev2 server MUST assume UTF-8, so selecting | |||
| CHARSET UTF-8 is redundant. It is permitted for improved | CHARSET UTF-8 is redundant. It is permitted for improved | |||
| compatibility with existing IMAP4rev1 clients. | compatibility with existing IMAP4rev1 clients. | |||
| If the server does not support the specified [CHARSET], it MUST | If the server does not support the specified [CHARSET], it MUST | |||
| return a tagged NO response (not a BAD). This response SHOULD | return a tagged NO response (not a BAD). This response SHOULD | |||
| contain the BADCHARSET response code, which MAY list the [CHARSET]s | contain the BADCHARSET response code, which MAY list the [CHARSET]s | |||
| supported by the server. | supported by the server. | |||
| In all search keys that use strings, a message matches the key if the | In all search keys that use strings and unless specified otherwise, a | |||
| string is a substring of the associated text. The matching SHOULD be | message matches the key if the string is a substring of the | |||
| case-insensitive for characters within ASCII range. Consider using | associated text. The matching SHOULD be case-insensitive for | |||
| [IMAP-I18N] for language-sensitive case-insensitive searching. Note | characters within ASCII range. Consider using [IMAP-I18N] for | |||
| that the empty string is a substring; this is useful when doing a | language-sensitive case-insensitive searching. Note that the empty | |||
| HEADER search in order to test for a header field presence in the | string is a substring; this is useful when doing a HEADER search in | |||
| message. | order to test for a header field presence in the message. | |||
| The defined search keys are as follows. Refer to the Formal Syntax | The defined search keys are as follows. Refer to the Formal Syntax | |||
| section for the precise syntactic definitions of the arguments. | section for the precise syntactic definitions of the arguments. | |||
| <sequence set> Messages with message sequence numbers corresponding | <sequence set> Messages with message sequence numbers corresponding | |||
| to the specified message sequence number set. | to the specified message sequence number set. | |||
| ALL All messages in the mailbox; the default initial key for ANDing. | ALL All messages in the mailbox; the default initial key for ANDing. | |||
| ANSWERED Messages with the \Answered flag set. | ANSWERED Messages with the \Answered flag set. | |||
| BCC <string> Messages that contain the specified string in the | BCC <string> Messages that contain the specified string in the | |||
| envelope structure's BCC field. | envelope structure's BCC field. | |||
| BEFORE <date> Messages whose internal date (disregarding time and | BEFORE <date> Messages whose internal date (disregarding time and | |||
| timezone) is earlier than the specified date. | timezone) is earlier than the specified date. | |||
| BODY <string> Messages that contain the specified string in the body | BODY <string> Messages that contain the specified string in the body | |||
| of the message. Unlike TEXT (see below), this doesn't match any | of the message. Unlike TEXT (see below), this doesn't match any | |||
| header fields. | header fields. Servers are allowed to implement flexible matching | |||
| for this search key, for example matching "swim" to both "swam" | ||||
| and "swum" in English language text or only doing full word | ||||
| matching (where "swim" will not match "swimming"). | ||||
| CC <string> Messages that contain the specified string in the | CC <string> Messages that contain the specified string in the | |||
| envelope structure's CC field. | envelope structure's CC field. | |||
| DELETED Messages with the \Deleted flag set. | DELETED Messages with the \Deleted flag set. | |||
| DRAFT Messages with the \Draft flag set. | DRAFT Messages with the \Draft flag set. | |||
| FLAGGED Messages with the \Flagged flag set. | FLAGGED Messages with the \Flagged flag set. | |||
| skipping to change at page 77, line 46 ¶ | skipping to change at page 79, line 49 ¶ | |||
| timezone) is within or later than the specified date. | timezone) is within or later than the specified date. | |||
| SMALLER <n> Messages with an [RFC-5322] size smaller than the | SMALLER <n> Messages with an [RFC-5322] size smaller than the | |||
| specified number of octets. | specified number of octets. | |||
| SUBJECT <string> Messages that contain the specified string in the | SUBJECT <string> Messages that contain the specified string in the | |||
| envelope structure's SUBJECT field. | envelope structure's SUBJECT field. | |||
| TEXT <string> Messages that contain the specified string in the | TEXT <string> Messages that contain the specified string in the | |||
| header (including MIME header fields) or body of the message. | header (including MIME header fields) or body of the message. | |||
| Servers are allowed to implement flexible matching for this search | ||||
| key, for example matching "swim" to both "swam" and "swum" in | ||||
| English language text or only doing full word matching (where | ||||
| "swim" will not match "swimming"). | ||||
| TO <string> Messages that contain the specified string in the | TO <string> Messages that contain the specified string in the | |||
| envelope structure's TO field. | envelope structure's TO field. | |||
| UID <sequence set> Messages with unique identifiers corresponding to | UID <sequence set> Messages with unique identifiers corresponding to | |||
| the specified unique identifier set. Sequence set ranges are | the specified unique identifier set. Sequence set ranges are | |||
| permitted. | permitted. | |||
| UNANSWERED Messages that do not have the \Answered flag set. | UNANSWERED Messages that do not have the \Answered flag set. | |||
| skipping to change at page 100, line 13 ¶ | skipping to change at page 102, line 13 ¶ | |||
| responses for the previously opened mailbox (which was closed) | responses for the previously opened mailbox (which was closed) | |||
| and the newly selected mailbox; all responses before the CLOSED | and the newly selected mailbox; all responses before the CLOSED | |||
| response code relate to the mailbox that was closed, and all | response code relate to the mailbox that was closed, and all | |||
| subsequent responses relate to the newly opened mailbox. | subsequent responses relate to the newly opened mailbox. | |||
| There is no need to return the CLOSED response code on | There is no need to return the CLOSED response code on | |||
| completion of the CLOSE or the UNSELECT command (or similar), | completion of the CLOSE or the UNSELECT command (or similar), | |||
| whose purpose is to close the currently selected mailbox | whose purpose is to close the currently selected mailbox | |||
| without opening a new one. | without opening a new one. | |||
| The server MAY also return an unsolicited CLOSED response code | ||||
| when it wants to force the client to return to authenticated | ||||
| state. For example, the server can do that when the mailbox | ||||
| requires repairs or is deleted in another session. | ||||
| CONTACTADMIN | CONTACTADMIN | |||
| The user should contact the system administrator or support | The user should contact the system administrator or support | |||
| desk. | desk. | |||
| C: e login "fred" "foo" | C: e login "fred" "foo" | |||
| S: e OK [CONTACTADMIN] | S: e OK [CONTACTADMIN] | |||
| COPYUID | COPYUID | |||
| skipping to change at page 112, line 16 ¶ | skipping to change at page 114, line 4 ¶ | |||
| separator character. A NIL hierarchy delimiter means that no | separator character. A NIL hierarchy delimiter means that no | |||
| hierarchy exists; the name is a "flat" name. | hierarchy exists; the name is a "flat" name. | |||
| The name represents an unambiguous left-to-right hierarchy, and MUST | The name represents an unambiguous left-to-right hierarchy, and MUST | |||
| be valid for use as a reference in LIST command. Unless \Noselect or | be valid for use as a reference in LIST command. Unless \Noselect or | |||
| \NonExistent is indicated, the name MUST also be valid as an argument | \NonExistent is indicated, the name MUST also be valid as an argument | |||
| for commands, such as SELECT, that accept mailbox names. | for commands, such as SELECT, that accept mailbox names. | |||
| The name might be followed by an OPTIONAL series of extended fields, | The name might be followed by an OPTIONAL series of extended fields, | |||
| a parenthesized list of tagged data (also referred to as "extended | a parenthesized list of tagged data (also referred to as "extended | |||
| data item"). The first element of an extended field is a tag, which | data item"). The first element of an extended field is a string, | |||
| identifies the type of data. [RFC5258] specified requirements on tag | which identifies the type of data. [RFC5258] specified requirements | |||
| registration, in particular it said that "Tags MUST be registered | on string registration (which are called "tags" there; such tags are | |||
| with IANA". This document doesn't change that. See Section 9.5 of | not to be confused with IMAP command tags), in particular it said | |||
| [RFC5258] for the registration template. The server MAY return data | that "Tags MUST be registered with IANA". This document doesn't | |||
| in the extended fields that was not directly solicited by the client | change that. See Section 9.5 of [RFC5258] for the registration | |||
| in the corresponding LIST command. For example, the client can | template. The server MAY return data in the extended fields that was | |||
| enable extra extended fields by using another IMAP extension that | not directly solicited by the client in the corresponding LIST | |||
| make use of the extended LIST responses. The client MUST ignore all | command. For example, the client can enable extra extended fields by | |||
| extended fields it doesn't recognize. | using another IMAP extension that make use of the extended LIST | |||
| responses. The client MUST ignore all extended fields it doesn't | ||||
| recognize. | ||||
| Example: S: * LIST (\Noselect) "/" ~/Mail/foo | Example: S: * LIST (\Noselect) "/" ~/Mail/foo | |||
| Example: S: * LIST (\Marked) ":" Tables (tablecloth (("edge" "lacy") | Example: S: * LIST (\Marked) ":" Tables (tablecloth (("edge" "lacy") | |||
| ("color" "red")) Sample "text") | ("color" "red")) Sample "text") | |||
| S: * LIST () ":" Tables:new (tablecloth ("edge" "lacy") | S: * LIST () ":" Tables:new (tablecloth ("edge" "lacy") | |||
| Sample ("text" "more text")) | Sample ("text" "more text")) | |||
| 7.2.4. NAMESPACE Response | 7.2.4. NAMESPACE Response | |||
| skipping to change at page 117, line 50 ¶ | skipping to change at page 119, line 44 ¶ | |||
| Extension data follows the multipart subtype. Extension data | Extension data follows the multipart subtype. Extension data | |||
| is never returned with the BODY fetch, but can be returned with | is never returned with the BODY fetch, but can be returned with | |||
| a BODYSTRUCTURE fetch. Extension data, if present, MUST be in | a BODYSTRUCTURE fetch. Extension data, if present, MUST be in | |||
| the defined order. The extension data of a multipart body part | the defined order. The extension data of a multipart body part | |||
| are in the following order: | are in the following order: | |||
| body parameter parenthesized list A parenthesized list of | body parameter parenthesized list A parenthesized list of | |||
| attribute/value pairs [e.g., ("foo" "bar" "baz" "rag") where | attribute/value pairs [e.g., ("foo" "bar" "baz" "rag") where | |||
| "bar" is the value of "foo", and "rag" is the value of | "bar" is the value of "foo", and "rag" is the value of | |||
| "baz"] as defined in [MIME-IMB]. Servers SHOULD decode | "baz"] as defined in [MIME-IMB]. Servers SHOULD decode | |||
| parameter value continuations as described in [RFC2231], for | parameter value continuations and parameter value character | |||
| example, if the message contains parameters "foo*0*" and | sets as described in [RFC2231], for example, if the message | |||
| "foo*1*", the server should RFC2231-decode them, concatenate | contains parameters "baz*0", "baz*1" and "baz*2", the server | |||
| and return the resulting value as "foo*". | should RFC2231-decode them, concatenate and return the | |||
| resulting value as a parameter "baz". Similarly, if the | ||||
| message contains parameters "foo*0*" and "foo*1*", the | ||||
| server should RFC2231-decode them, convert to UTF-8, | ||||
| concatenate and return the resulting value as a parameter | ||||
| "foo*". | ||||
| body disposition A parenthesized list, consisting of a | body disposition A parenthesized list, consisting of a | |||
| disposition type string, followed by a parenthesized list of | disposition type string, followed by a parenthesized list of | |||
| disposition attribute/value pairs as defined in | disposition attribute/value pairs as defined in | |||
| [DISPOSITION]. Servers SHOULD decode parameter value | [DISPOSITION]. Servers SHOULD decode parameter value | |||
| continuations as described in [RFC2231]. | continuations as described in [RFC2231]. | |||
| body language A string or parenthesized list giving the body | body language A string or parenthesized list giving the body | |||
| language value as defined in [LANGUAGE-TAGS]. | language value as defined in [LANGUAGE-TAGS]. | |||
| skipping to change at page 126, line 10 ¶ | skipping to change at page 128, line 5 ¶ | |||
| capability-data = "CAPABILITY" *(SP capability) SP "IMAP4rev2" | capability-data = "CAPABILITY" *(SP capability) SP "IMAP4rev2" | |||
| *(SP capability) | *(SP capability) | |||
| ; Servers MUST implement the STARTTLS, AUTH=PLAIN, | ; Servers MUST implement the STARTTLS, AUTH=PLAIN, | |||
| ; and LOGINDISABLED capabilities. | ; and LOGINDISABLED capabilities. | |||
| ; Servers which offer RFC 1730 compatibility MUST | ; Servers which offer RFC 1730 compatibility MUST | |||
| ; list "IMAP4" as the first capability. | ; list "IMAP4" as the first capability. | |||
| ; Servers which offer RFC 3501 compatibility MUST | ; Servers which offer RFC 3501 compatibility MUST | |||
| ; list "IMAP4rev1" as one of capabilities. | ; list "IMAP4rev1" as one of capabilities. | |||
| CHAR = <defined in [ABNF]> | ||||
| CHAR8 = %x01-ff | CHAR8 = %x01-ff | |||
| ; any OCTET except NUL, %x00 | ; any OCTET except NUL, %x00 | |||
| charset = atom / quoted | charset = atom / quoted | |||
| childinfo-extended-item = "CHILDINFO" SP "(" | childinfo-extended-item = "CHILDINFO" SP "(" | |||
| list-select-base-opt-quoted | list-select-base-opt-quoted | |||
| *(SP list-select-base-opt-quoted) ")" | *(SP list-select-base-opt-quoted) ")" | |||
| ; Extended data item (mbox-list-extended-item) | ; Extended data item (mbox-list-extended-item) | |||
| ; returned when the RECURSIVEMATCH | ; returned when the RECURSIVEMATCH | |||
| ; selection option is specified. | ; selection option is specified. | |||
| ; Note 1: the CHILDINFO tag can be returned | ; Note 1: the CHILDINFO extended data item tag can be | |||
| ; with and without surrounding quotes, as per | ; returned with and without surrounding quotes, as per | |||
| ; mbox-list-extended-item-tag production. | ; mbox-list-extended-item-tag production. | |||
| ; Note 2: The selection options are always returned | ; Note 2: The selection options are always returned | |||
| ; quoted, unlike their specification in | ; quoted, unlike their specification in | |||
| ; the extended LIST command. | ; the extended LIST command. | |||
| child-mbox-flag = "\HasChildren" / "\HasNoChildren" | child-mbox-flag = "\HasChildren" / "\HasNoChildren" | |||
| ; attributes for CHILDREN return option, at most one | ; attributes for CHILDREN return option, at most one | |||
| ; possible per LIST response | ; possible per LIST response | |||
| command = tag SP (command-any / command-auth / command-nonauth / | command = tag SP (command-any / command-auth / command-nonauth / | |||
| skipping to change at page 127, line 37 ¶ | skipping to change at page 129, line 32 ¶ | |||
| date-time = DQUOTE date-day-fixed "-" date-month "-" date-year | date-time = DQUOTE date-day-fixed "-" date-month "-" date-year | |||
| SP time SP zone DQUOTE | SP time SP zone DQUOTE | |||
| delete = "DELETE" SP mailbox | delete = "DELETE" SP mailbox | |||
| ; Use of INBOX gives a NO error | ; Use of INBOX gives a NO error | |||
| digit-nz = %x31-39 | digit-nz = %x31-39 | |||
| ; 1-9 | ; 1-9 | |||
| eitem-standard-tag = atom | eitem-standard-tag = atom | |||
| ; a tag for extended list data defined in a Standard | ; a tag for LIST extended data item defined in a Standard | |||
| ; Track or Experimental RFC. | ; Track or Experimental RFC. | |||
| eitem-vendor-tag = vendor-token "-" atom | eitem-vendor-tag = vendor-token "-" atom | |||
| ; a vendor-specific tag for extended list data | ; a vendor-specific tag for LIST extended data item | |||
| enable = "ENABLE" 1*(SP capability) | enable = "ENABLE" 1*(SP capability) | |||
| enable-data = "ENABLED" *(SP capability) | enable-data = "ENABLED" *(SP capability) | |||
| envelope = "(" env-date SP env-subject SP env-from SP | envelope = "(" env-date SP env-subject SP env-from SP | |||
| env-sender SP env-reply-to SP env-to SP env-cc SP | env-sender SP env-reply-to SP env-to SP env-cc SP | |||
| env-bcc SP env-in-reply-to SP env-message-id ")" | env-bcc SP env-in-reply-to SP env-message-id ")" | |||
| env-bcc = "(" 1*address ")" / nil | env-bcc = "(" 1*address ")" / nil | |||
| skipping to change at page 131, line 20 ¶ | skipping to change at page 133, line 15 ¶ | |||
| mailbox-list = "(" [mbx-list-flags] ")" SP | mailbox-list = "(" [mbx-list-flags] ")" SP | |||
| (DQUOTE QUOTED-CHAR DQUOTE / nil) SP mailbox | (DQUOTE QUOTED-CHAR DQUOTE / nil) SP mailbox | |||
| [SP mbox-list-extended] | [SP mbox-list-extended] | |||
| ; This is the list information pointed to by the ABNF | ; This is the list information pointed to by the ABNF | |||
| ; item "mailbox-data", which is defined in [IMAP4] | ; item "mailbox-data", which is defined in [IMAP4] | |||
| mbox-list-extended = "(" [mbox-list-extended-item | mbox-list-extended = "(" [mbox-list-extended-item | |||
| *(SP mbox-list-extended-item)] ")" | *(SP mbox-list-extended-item)] ")" | |||
| mbox-list-extended-item = mbox-list-extended-item-tag SP | mbox-list-extended-item = mbox-list-extended-item-tag SP | |||
| tagged-ext-val | tagged-ext-val | |||
| mbox-list-extended-item-tag = astring | mbox-list-extended-item-tag = astring | |||
| ; The content MUST conform to either "eitem-vendor-tag" | ; The content MUST conform to either "eitem-vendor-tag" | |||
| ; or "eitem-standard-tag" ABNF productions. | ; or "eitem-standard-tag" ABNF productions. | |||
| mbox-or-pat = list-mailbox / patterns | mbox-or-pat = list-mailbox / patterns | |||
| mbx-list-flags = *(mbx-list-oflag SP) mbx-list-sflag | mbx-list-flags = *(mbx-list-oflag SP) mbx-list-sflag | |||
| *(SP mbx-list-oflag) / | *(SP mbx-list-oflag) / | |||
| mbx-list-oflag *(SP mbx-list-oflag) | mbx-list-oflag *(SP mbx-list-oflag) | |||
| mbx-list-oflag = "\Noinferiors" / child-mbox-flag / | mbx-list-oflag = "\Noinferiors" / child-mbox-flag / | |||
| skipping to change at page 132, line 9 ¶ | skipping to change at page 134, line 4 ¶ | |||
| DQUOTE ("RFC822" / "GLOBAL") DQUOTE | DQUOTE ("RFC822" / "GLOBAL") DQUOTE | |||
| ; Defined in [MIME-IMT] | ; Defined in [MIME-IMT] | |||
| media-subtype = string | media-subtype = string | |||
| ; Defined in [MIME-IMT] | ; Defined in [MIME-IMT] | |||
| media-text = DQUOTE "TEXT" DQUOTE SP media-subtype | media-text = DQUOTE "TEXT" DQUOTE SP media-subtype | |||
| ; Defined in [MIME-IMT] | ; Defined in [MIME-IMT] | |||
| message-data = nz-number SP ("EXPUNGE" / ("FETCH" SP msg-att)) | message-data = nz-number SP ("EXPUNGE" / ("FETCH" SP msg-att)) | |||
| move = "MOVE" SP sequence-set SP mailbox | move = "MOVE" SP sequence-set SP mailbox | |||
| msg-att = "(" (msg-att-dynamic / msg-att-static) | msg-att = "(" (msg-att-dynamic / msg-att-static) | |||
| *(SP (msg-att-dynamic / msg-att-static)) ")" | *(SP (msg-att-dynamic / msg-att-static)) ")" | |||
| msg-att-dynamic = "FLAGS" SP "(" [flag-fetch *(SP flag-fetch)] ")" | msg-att-dynamic = "FLAGS" SP "(" [flag-fetch *(SP flag-fetch)] ")" | |||
| ; MAY change for a message | ; MAY change for a message | |||
| msg-att-static = "ENVELOPE" SP envelope / "INTERNALDATE" SP date-time / | msg-att-static = "ENVELOPE" SP envelope / "INTERNALDATE" SP date-time / | |||
| "RFC822.SIZE" SP number / | "RFC822.SIZE" SP number / | |||
| "BODY" ["STRUCTURE"] SP body / | "BODY" ["STRUCTURE"] SP body / | |||
| "BODY" section ["<" number ">"] SP nstring / | "BODY" section ["<" number ">"] SP nstring / | |||
| "BINARY" section-binary SP (nstring / literal8) / | "BINARY" section-binary SP (nstring / literal8) / | |||
| "BINARY.SIZE" section-binary SP number / | "BINARY.SIZE" section-binary SP number / | |||
| "UID" SP uniqueid | "UID" SP uniqueid | |||
| ; MUST NOT change for a message | ; MUST NOT change for a message | |||
| name-component = 1*UTF8-CHAR | ||||
| ; MUST NOT contain ".", "/", "%", or "*" | ||||
| Namespace = nil / "(" 1*Namespace-Descr ")" | Namespace = nil / "(" 1*Namespace-Descr ")" | |||
| Namespace-Command = "NAMESPACE" | Namespace-Command = "NAMESPACE" | |||
| Namespace-Descr = "(" string SP | Namespace-Descr = "(" string SP | |||
| (DQUOTE QUOTED-CHAR DQUOTE / nil) | (DQUOTE QUOTED-CHAR DQUOTE / nil) | |||
| [Namespace-Response-Extensions] ")" | [Namespace-Response-Extensions] ")" | |||
| Namespace-Response-Extensions = *(Namespace-Response-Extension) | Namespace-Response-Extensions = *Namespace-Response-Extension | |||
| Namespace-Response-Extension = SP string SP | Namespace-Response-Extension = SP string SP | |||
| "(" string *(SP string) ")" | "(" string *(SP string) ")" | |||
| Namespace-Response = "NAMESPACE" SP Namespace | Namespace-Response = "NAMESPACE" SP Namespace | |||
| SP Namespace SP Namespace | SP Namespace SP Namespace | |||
| ; The first Namespace is the Personal Namespace(s). | ; The first Namespace is the Personal Namespace(s). | |||
| ; The second Namespace is the Other Users' | ; The second Namespace is the Other Users' | |||
| ; Namespace(s). | ; Namespace(s). | |||
| ; The third Namespace is the Shared Namespace(s). | ; The third Namespace is the Shared Namespace(s). | |||
| skipping to change at page 133, line 14 ¶ | skipping to change at page 135, line 13 ¶ | |||
| ; (0 <= n < 4,294,967,296) | ; (0 <= n < 4,294,967,296) | |||
| number64 = 1*DIGIT | number64 = 1*DIGIT | |||
| ; Unsigned 63-bit integer | ; Unsigned 63-bit integer | |||
| ; (0 <= n <= 9,223,372,036,854,775,807) | ; (0 <= n <= 9,223,372,036,854,775,807) | |||
| nz-number = digit-nz *DIGIT | nz-number = digit-nz *DIGIT | |||
| ; Non-zero unsigned 32-bit integer | ; Non-zero unsigned 32-bit integer | |||
| ; (0 < n < 4,294,967,296) | ; (0 < n < 4,294,967,296) | |||
| oldname-extended-item = "OLDNAME" SP "(" mailbox ")" | ||||
| ; Extended data item (mbox-list-extended-item) | ||||
| ; returned in a LIST response when a mailbox is | ||||
| ; renamed or deleted. Also returned when | ||||
| ; the server canonicalized the provided mailbox | ||||
| ; name. | ||||
| ; Note 1: the OLDNAME tag can be returned | ||||
| ; with or without surrounding quotes, as per | ||||
| ; mbox-list-extended-item-tag production. | ||||
| option-extension = (option-standard-tag / option-vendor-tag) | option-extension = (option-standard-tag / option-vendor-tag) | |||
| [SP option-value] | [SP option-value] | |||
| option-standard-tag = atom | option-standard-tag = atom | |||
| ; an option defined in a Standards Track or | ; an option defined in a Standards Track or | |||
| ; Experimental RFC | ; Experimental RFC | |||
| option-val-comp = astring / | option-val-comp = astring / | |||
| option-val-comp *(SP option-val-comp) / | option-val-comp *(SP option-val-comp) / | |||
| "(" option-val-comp ")" | "(" option-val-comp ")" | |||
| skipping to change at page 134, line 42 ¶ | skipping to change at page 136, line 51 ¶ | |||
| resp-cond-state = ("OK" / "NO" / "BAD") SP resp-text | resp-cond-state = ("OK" / "NO" / "BAD") SP resp-text | |||
| ; Status condition | ; Status condition | |||
| resp-specials = "]" | resp-specials = "]" | |||
| resp-text = ["[" resp-text-code "]" SP] [text] | resp-text = ["[" resp-text-code "]" SP] [text] | |||
| resp-text-code = "ALERT" / | resp-text-code = "ALERT" / | |||
| "BADCHARSET" [SP "(" charset *(SP charset) ")" ] / | "BADCHARSET" [SP "(" charset *(SP charset) ")" ] / | |||
| capability-data / "PARSE" / | capability-data / "PARSE" / | |||
| "PERMANENTFLAGS" SP "(" | "PERMANENTFLAGS" SP | |||
| [flag-perm *(SP flag-perm)] ")" / | "(" [flag-perm *(SP flag-perm)] ")" / | |||
| "READ-ONLY" / "READ-WRITE" / "TRYCREATE" / | "READ-ONLY" / "READ-WRITE" / "TRYCREATE" / | |||
| "UIDNEXT" SP nz-number / "UIDVALIDITY" SP nz-number / | "UIDNEXT" SP nz-number / "UIDVALIDITY" SP nz-number / | |||
| resp-code-apnd / resp-code-copy / "UIDNOTSTICKY" / | resp-code-apnd / resp-code-copy / "UIDNOTSTICKY" / | |||
| "UNAVAILABLE" / "AUTHENTICATIONFAILED" / | "UNAVAILABLE" / "AUTHENTICATIONFAILED" / | |||
| "AUTHORIZATIONFAILED" / "EXPIRED" / | "AUTHORIZATIONFAILED" / "EXPIRED" / | |||
| "PRIVACYREQUIRED" / "CONTACTADMIN" / "NOPERM" / | "PRIVACYREQUIRED" / "CONTACTADMIN" / "NOPERM" / | |||
| "INUSE" / "EXPUNGEISSUED" / "CORRUPTION" / | "INUSE" / "EXPUNGEISSUED" / "CORRUPTION" / | |||
| "SERVERBUG" / "CLIENTBUG" / "CANNOT" / | "SERVERBUG" / "CLIENTBUG" / "CANNOT" / | |||
| "LIMIT" / "OVERQUOTA" / "ALREADYEXISTS" / | "LIMIT" / "OVERQUOTA" / "ALREADYEXISTS" / | |||
| "NONEXISTENT" / "NOTSAVED" / "HASCHILDREN" / | "NONEXISTENT" / "NOTSAVED" / "HASCHILDREN" / | |||
| skipping to change at page 138, line 31 ¶ | skipping to change at page 140, line 41 ¶ | |||
| store-att-flags = (["+" / "-"] "FLAGS" [".SILENT"]) SP | store-att-flags = (["+" / "-"] "FLAGS" [".SILENT"]) SP | |||
| (flag-list / (flag *(SP flag))) | (flag-list / (flag *(SP flag))) | |||
| string = quoted / literal | string = quoted / literal | |||
| subscribe = "SUBSCRIBE" SP mailbox | subscribe = "SUBSCRIBE" SP mailbox | |||
| tag = 1*<any ASTRING-CHAR except "+"> | tag = 1*<any ASTRING-CHAR except "+"> | |||
| tag-string = astring | ||||
| ; <tag> represented as <astring> | ||||
| tagged-ext-label = tagged-label-fchar *tagged-label-char | tagged-ext-label = tagged-label-fchar *tagged-label-char | |||
| ;; Is a valid RFC 3501 "atom". | ;; Is a valid RFC 3501 "atom". | |||
| tagged-label-fchar = ALPHA / "-" / "_" / "." | tagged-label-fchar = ALPHA / "-" / "_" / "." | |||
| tagged-label-char = tagged-label-fchar / DIGIT / ":" | tagged-label-char = tagged-label-fchar / DIGIT / ":" | |||
| tagged-ext-comp = astring / | tagged-ext-comp = astring / | |||
| tagged-ext-comp *(SP tagged-ext-comp) / | tagged-ext-comp *(SP tagged-ext-comp) / | |||
| "(" tagged-ext-comp ")" | "(" tagged-ext-comp ")" | |||
| skipping to change at page 139, line 40 ¶ | skipping to change at page 142, line 4 ¶ | |||
| uniqueid = nz-number | uniqueid = nz-number | |||
| ; Strictly ascending | ; Strictly ascending | |||
| unsubscribe = "UNSUBSCRIBE" SP mailbox | unsubscribe = "UNSUBSCRIBE" SP mailbox | |||
| userid = astring | userid = astring | |||
| UTF8-2 = <Defined in Section 4 of RFC 3629> | UTF8-2 = <Defined in Section 4 of RFC 3629> | |||
| UTF8-3 = <Defined in Section 4 of RFC 3629> | UTF8-3 = <Defined in Section 4 of RFC 3629> | |||
| UTF8-4 = <Defined in Section 4 of RFC 3629> | UTF8-4 = <Defined in Section 4 of RFC 3629> | |||
| vendor-token = "vendor." name-component | ||||
| ; Definition copied from RFC 2244. | ||||
| ; MUST be registered with IANA | ||||
| x-command = "X" atom <experimental command arguments> | x-command = "X" atom <experimental command arguments> | |||
| zone = ("+" / "-") 4DIGIT | zone = ("+" / "-") 4DIGIT | |||
| ; Signed four-digit value of hhmm representing | ; Signed four-digit value of hhmm representing | |||
| ; hours and minutes east of Greenwich (that is, | ; hours and minutes east of Greenwich (that is, | |||
| ; the amount that the given time differs from | ; the amount that the given time differs from | |||
| ; Universal Time). Subtracting the timezone | ; Universal Time). Subtracting the timezone | |||
| ; from the given time will give the UT form. | ; from the given time will give the UT form. | |||
| ; The Universal Time zone is "+0000". | ; The Universal Time zone is "+0000". | |||
| skipping to change at page 142, line 10 ¶ | skipping to change at page 144, line 25 ¶ | |||
| AUTHENTICATE/LOGIN attempts. | AUTHENTICATE/LOGIN attempts. | |||
| Additional security considerations are discussed in the section | Additional security considerations are discussed in the section | |||
| discussing the AUTHENTICATE and LOGIN commands. | discussing the AUTHENTICATE and LOGIN commands. | |||
| 12. IANA Considerations | 12. IANA Considerations | |||
| IANA is requested to update "Service Names and Transport Protocol | IANA is requested to update "Service Names and Transport Protocol | |||
| Port Numbers" registry as follows: | Port Numbers" registry as follows: | |||
| 1. Registration for TCP "imap" port 143 should be updated to point | 1. Registration for TCP port 143 and the corresponding "imap" | |||
| to this document and RFC 3501. | service name should be updated to point to this document and RFC | |||
| 3501. | ||||
| 2. Registration for TCP "imaps" port 993 should be updated to point | 2. Registration for TCP port 993 and the corresponding "imaps" | |||
| to this document, RFC 8314 and RFC 3501. | service name should be updated to point to this document, RFC | |||
| 8314 and RFC 3501. | ||||
| 3. Both UDP port 143 and UDP port 993 should be marked as "Reserved" | 3. Both UDP port 143 and UDP port 993 should be marked as "Reserved" | |||
| in the registry. | in the registry. | |||
| Additional IANA actions are specified in subsection of this section. | Additional IANA actions are specified in subsection of this section. | |||
| 12.1. Updates to IMAP4 Capabilities registry | 12.1. Updates to IMAP4 Capabilities registry | |||
| IMAP4 capabilities are registered by publishing a standards track or | IMAP4 capabilities are registered by publishing a standards track or | |||
| IESG approved informational or experimental RFC. The registry is | IESG approved informational or experimental RFC. The registry is | |||
| skipping to change at page 142, line 43 ¶ | skipping to change at page 145, line 15 ¶ | |||
| 12.2. GSSAPI/SASL service name | 12.2. GSSAPI/SASL service name | |||
| GSSAPI/Kerberos/SASL service names are registered by publishing a | GSSAPI/Kerberos/SASL service names are registered by publishing a | |||
| standards track or IESG approved experimental RFC. The registry is | standards track or IESG approved experimental RFC. The registry is | |||
| currently located at: https://www.iana.org/assignments/gssapi- | currently located at: https://www.iana.org/assignments/gssapi- | |||
| service-names | service-names | |||
| IANA is requested to update the "imap" service name previously | IANA is requested to update the "imap" service name previously | |||
| registered in RFC 3501, to point to this document. | registered in RFC 3501, to point to this document. | |||
| 12.3. LIST Selection Options, LIST Return Options, LIST extended data | ||||
| items | ||||
| [RFC5258] specifies IANA registration procedures for LIST Selection | ||||
| Options, LIST Return Options, LIST extended data items. This | ||||
| document doesn't change these registration procedures. In particular | ||||
| LIST selection options Section 6.3.9.1 and LIST return options | ||||
| Section 6.3.9.2 are registered using the procedure specified in | ||||
| Section 9 of [RFC5258] (and using the registration template from | ||||
| Section 9.3 of [RFC5258]). LIST Extended Data Items are registered | ||||
| using the registration template from Section 9.6 of [RFC5258]). | ||||
| IANA is requested to add a reference to [RFCXXXX] for the "OLDNAME" | ||||
| LIST-EXTENDED extended data item entry. This is in addition to the | ||||
| existing reference to [RFC5465]. | ||||
| 13. References | 13. References | |||
| 13.1. Normative References | 13.1. Normative References | |||
| [RFC5258] Leiba, B. and A. Melnikov, "Internet Message Access | ||||
| Protocol version 4 - LIST Command Extensions", RFC 5258, | ||||
| DOI 10.17487/RFC5258, June 2008, | ||||
| <https://www.rfc-editor.org/info/rfc5258>. | ||||
| [RFC5788] Melnikov, A. and D. Cridland, "IMAP4 Keyword Registry", | ||||
| RFC 5788, DOI 10.17487/RFC5788, March 2010, | ||||
| <https://www.rfc-editor.org/info/rfc5788>. | ||||
| [ABNF] Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax | [ABNF] Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax | |||
| Specifications: ABNF", STD 68, RFC 5234, January 2008, | Specifications: ABNF", STD 68, RFC 5234, January 2008, | |||
| <http://www.rfc-editor.org/info/rfc5234>. | <http://www.rfc-editor.org/info/rfc5234>. | |||
| [ANONYMOUS] | [ANONYMOUS] | |||
| Zeilenga, K., "Anonymous Simple Authentication and | Zeilenga, K., "Anonymous Simple Authentication and | |||
| Security Layer (SASL) Mechanism", RFC 4505, June 2006, | Security Layer (SASL) Mechanism", RFC 4505, June 2006, | |||
| <http://www.rfc-editor.org/info/rfc4505>. | <http://www.rfc-editor.org/info/rfc4505>. | |||
| [CHARSET] Freed, N. and J. Postel, "IANA Charset Registration | [CHARSET] Freed, N. and J. Postel, "IANA Charset Registration | |||
| skipping to change at page 146, line 10 ¶ | skipping to change at page 148, line 50 ¶ | |||
| [RFC3503] Melnikov, A., "Message Disposition Notification (MDN) | [RFC3503] Melnikov, A., "Message Disposition Notification (MDN) | |||
| profile for Internet Message Access Protocol (IMAP)", | profile for Internet Message Access Protocol (IMAP)", | |||
| RFC 3503, DOI 10.17487/RFC3503, March 2003, | RFC 3503, DOI 10.17487/RFC3503, March 2003, | |||
| <https://www.rfc-editor.org/info/rfc3503>. | <https://www.rfc-editor.org/info/rfc3503>. | |||
| [RFC5256] Crispin, M. and K. Murchison, "Internet Message Access | [RFC5256] Crispin, M. and K. Murchison, "Internet Message Access | |||
| Protocol - SORT and THREAD Extensions", RFC 5256, | Protocol - SORT and THREAD Extensions", RFC 5256, | |||
| DOI 10.17487/RFC5256, June 2008, | DOI 10.17487/RFC5256, June 2008, | |||
| <https://www.rfc-editor.org/info/rfc5256>. | <https://www.rfc-editor.org/info/rfc5256>. | |||
| [RFC5258] Leiba, B. and A. Melnikov, "Internet Message Access | ||||
| Protocol version 4 - LIST Command Extensions", RFC 5258, | ||||
| DOI 10.17487/RFC5258, June 2008, | ||||
| <https://www.rfc-editor.org/info/rfc5258>. | ||||
| [RFC2193] Gahrns, M., "IMAP4 Mailbox Referrals", RFC 2193, | [RFC2193] Gahrns, M., "IMAP4 Mailbox Referrals", RFC 2193, | |||
| DOI 10.17487/RFC2193, September 1997, | DOI 10.17487/RFC2193, September 1997, | |||
| <https://www.rfc-editor.org/info/rfc2193>. | <https://www.rfc-editor.org/info/rfc2193>. | |||
| [RFC3348] Gahrns, M. and R. Cheng, "The Internet Message Action | [RFC3348] Gahrns, M. and R. Cheng, "The Internet Message Action | |||
| Protocol (IMAP4) Child Mailbox Extension", RFC 3348, | Protocol (IMAP4) Child Mailbox Extension", RFC 3348, | |||
| DOI 10.17487/RFC3348, July 2002, | DOI 10.17487/RFC3348, July 2002, | |||
| <https://www.rfc-editor.org/info/rfc3348>. | <https://www.rfc-editor.org/info/rfc3348>. | |||
| [RFC5465] Gulbrandsen, A., King, C., and A. Melnikov, "The IMAP | ||||
| NOTIFY Extension", RFC 5465, DOI 10.17487/RFC5465, | ||||
| February 2009, <https://www.rfc-editor.org/info/rfc5465>. | ||||
| [RFC7888] Melnikov, A., Ed., "IMAP4 Non-synchronizing Literals", | [RFC7888] Melnikov, A., Ed., "IMAP4 Non-synchronizing Literals", | |||
| RFC 7888, DOI 10.17487/RFC7888, May 2016, | RFC 7888, DOI 10.17487/RFC7888, May 2016, | |||
| <https://www.rfc-editor.org/info/rfc7888>. | <https://www.rfc-editor.org/info/rfc7888>. | |||
| [IMAP-DISC] | [IMAP-DISC] | |||
| Melnikov, A., Ed., "Synchronization Operations for | Melnikov, A., Ed., "Synchronization Operations for | |||
| Disconnected IMAP4 Clients", RFC 4549, June 2006, | Disconnected IMAP4 Clients", RFC 4549, June 2006, | |||
| <http://www.rfc-editor.org/info/rfc4549>. | <http://www.rfc-editor.org/info/rfc4549>. | |||
| [IMAP-I18N] | [IMAP-I18N] | |||
| skipping to change at page 150, line 49 ¶ | skipping to change at page 153, line 43 ¶ | |||
| capability is also advertised in CAPABILITY response/response code. | capability is also advertised in CAPABILITY response/response code. | |||
| Appendix D. Changes from RFC 3501 / IMAP4rev1 | Appendix D. Changes from RFC 3501 / IMAP4rev1 | |||
| The following is the plan for remaining changes. The plan might | The following is the plan for remaining changes. The plan might | |||
| change over time. | change over time. | |||
| 1. Revise IANA registration of IMAP extensions and give advice on | 1. Revise IANA registration of IMAP extensions and give advice on | |||
| use of "X-" convention. | use of "X-" convention. | |||
| 2. Allow word-based searching (as per Chris Newman)? Need to | 2. Add a section on other recommended extensions? | |||
| discuss header field search, where exact/substring match is still | ||||
| required for interoperability. | ||||
| 3. Add a section on other recommended extensions? | ||||
| The following changes were already done: | The following changes were already done: | |||
| 1. Fold in the following extensions/RFC: RFC 5530 (IMAP Response | 1. Fold in the following extensions/RFC: RFC 5530 (IMAP Response | |||
| Codes), UIDPLUS, ENABLE, ESEARCH, SPECIAL-USE (list of new | Codes), UIDPLUS, ENABLE, ESEARCH, SPECIAL-USE (list of new | |||
| mailbox attributes), LITERAL-, NAMESPACE, SASL-IR, LIST-STATUS, | mailbox attributes), LITERAL-, NAMESPACE, SASL-IR, LIST-STATUS, | |||
| SEARCHRES, IDLE, MOVE. | SEARCHRES, IDLE, MOVE. | |||
| 2. Add CLOSED response code (from CONDSTORE). | 2. Add CLOSED response code (from CONDSTORE). | |||
| skipping to change at page 151, line 50 ¶ | skipping to change at page 154, line 39 ¶ | |||
| 6851) extensions. Also folded RFC 5530 and FETCH side of the | 6851) extensions. Also folded RFC 5530 and FETCH side of the | |||
| BINARY extension (RFC 3516). | BINARY extension (RFC 3516). | |||
| 2. Clarified that server should decode parameter value | 2. Clarified that server should decode parameter value | |||
| continuations as described in [RFC2231]. This requirement was | continuations as described in [RFC2231]. This requirement was | |||
| hidden in RFC 2231 itself. | hidden in RFC 2231 itself. | |||
| 3. SEARCH command now requires to return ESEARCH response (SEARCH | 3. SEARCH command now requires to return ESEARCH response (SEARCH | |||
| response is now deprecated). | response is now deprecated). | |||
| 4. Added CLOSED response code from RFC 7162. SELECT/EXAMINE when a | 4. Clarified which SEARCH keys has to use substring match and which | |||
| don't. | ||||
| 5. Added CLOSED response code from RFC 7162. SELECT/EXAMINE when a | ||||
| mailbox is already selected now require for the CLOSED response | mailbox is already selected now require for the CLOSED response | |||
| code to be returned. | code to be returned. | |||
| 5. Updated to use modern TLS-related recommendations as per RFC | 6. Updated to use modern TLS-related recommendations as per RFC | |||
| 8314, RFC 7817, RFC 7525. | 8314, RFC 7817, RFC 7525. | |||
| 6. For future extensibility extended ABNF for tagged-ext-simple to | 7. For future extensibility extended ABNF for tagged-ext-simple to | |||
| allow for bare number64. | allow for bare number64. | |||
| 7. Added SHOULD level requirement on IMAP servers to support | 8. Added SHOULD level requirement on IMAP servers to support | |||
| $MDNSent, $Forwarded, $Junk, $NonJunk and $Phishing keywords. | $MDNSent, $Forwarded, $Junk, $NonJunk and $Phishing keywords. | |||
| 8. Added STATUS SIZE and STATUS DELETED. | 9. Added STATUS SIZE (RFC 8438) and STATUS DELETED. | |||
| 9. Mailbox names and message headers now allow for UTF-8. Support | 10. Mailbox names and message headers now allow for UTF-8. Support | |||
| for Modified UTF-7 in mailbox names is not required, unless | for Modified UTF-7 in mailbox names is not required, unless | |||
| compatibility with IMAP4rev1 is desired. | compatibility with IMAP4rev1 is desired. | |||
| 10. UNSEEN response code on SELECT/EXAMINE is now deprecated. | 11. UNSEEN response code on SELECT/EXAMINE is now deprecated. | |||
| 11. RECENT response on SELECT/EXAMINE, \Recent flag, RECENT STATUS, | 12. RECENT response on SELECT/EXAMINE, \Recent flag, RECENT STATUS, | |||
| SEARCH NEW items are now deprecated. | SEARCH NEW items are now deprecated. | |||
| 12. Clarified that the server doesn't need to send a new | 13. Clarified that the server doesn't need to send a new | |||
| PERMANENTFLAGS response code when a new keyword was successfully | PERMANENTFLAGS response code when a new keyword was successfully | |||
| added and the server advertised \* earlier for the same mailbox. | added and the server advertised \* earlier for the same mailbox. | |||
| 13. Removed the CHECK command. Clients should use NOOP instead. | 14. Removed the CHECK command. Clients should use NOOP instead. | |||
| 14. RFC822, RFC822.HEADER and RFC822.TEXT FETCH data items were | 15. RFC822, RFC822.HEADER and RFC822.TEXT FETCH data items were | |||
| deprecated. Clients should use the corresponding BODY[] | deprecated. Clients should use the corresponding BODY[] | |||
| variants instead. | variants instead. | |||
| 15. Replaced DIGEST-MD5 SASL mechanism with SCRAM-SHA-256. DIGEST- | 16. Replaced DIGEST-MD5 SASL mechanism with SCRAM-SHA-256. DIGEST- | |||
| MD5 was deprecated. | MD5 was deprecated. | |||
| 16. LSUB command was deprecated. Clients should use LIST | 17. LSUB command was deprecated. Clients should use LIST | |||
| (SUBSCRIBED) instead. | (SUBSCRIBED) instead. | |||
| 17. resp-text ABNF non terminal was updated to allow for empty text. | 18. resp-text ABNF non terminal was updated to allow for empty text. | |||
| 18. IDLE command can now return updates not related to the currently | 19. IDLE command can now return updates not related to the currently | |||
| selected mailbox state. | selected mailbox state. | |||
| 19. All unsolicited FETCH updates are required to include UID. | 20. All unsolicited FETCH updates are required to include UID. | |||
| 20. Clarified that client implementations MUST ignore response codes | 21. Clarified that client implementations MUST ignore response codes | |||
| that they do not recognize. (Change from a SHOULD to a MUST.) | that they do not recognize. (Change from a SHOULD to a MUST.) | |||
| Appendix E. Acknowledgement | Appendix E. Acknowledgement | |||
| Earlier versions of this document were edited by Mark Crispin. | Earlier versions of this document were edited by Mark Crispin. | |||
| Sadly, he is no longer available to help with this work. Editors of | Sadly, he is no longer available to help with this work. Editors of | |||
| this revisions are hoping that Mark would have approved. | this revisions are hoping that Mark would have approved. | |||
| Chris Newman has contributed text on I18N and use of UTF-8 in | Chris Newman has contributed text on I18N and use of UTF-8 in | |||
| messages and mailbox names. | messages and mailbox names. | |||
| Thank you to Tony Hansen for helping with the index generation. | Thank you to Tony Hansen for helping with the index generation. | |||
| Thank you to Timo Sirainen, Bron Gondwana and Arnt Gulbrandsen for | Thank you to Timo Sirainen, Bron Gondwana and Arnt Gulbrandsen for | |||
| extensive feedback. | extensive feedback. | |||
| This document incorporate text from RFC 4315 (by Mark Crispin), RFC | This document incorporate text from RFC 4315 (by Mark Crispin), RFC | |||
| 4466 (by Cyrus Daboo), RFC 4731 (by Dave Cridland), RFC 5161 (by Arnt | 4466 (by Cyrus Daboo), RFC 4731 (by Dave Cridland), RFC 5161 (by Arnt | |||
| Gulbrandsen), RFC 5530 (by Arnt Gulbrandsen), RFC 5819 (by Timo | Gulbrandsen), RFC 5465 (by Arnt Gulbrandsen and Curtis King), RFC | |||
| Sirainen), RFC 6154 (by Jamie Nicolson) so work done by authors/ | 5530 (by Arnt Gulbrandsen), RFC 5819 (by Timo Sirainen), RFC 6154 (by | |||
| Jamie Nicolson), RFC 8438 (by Stephan Bosch) so work done by authors/ | ||||
| editors of these documents is appreciated. Note that editors of this | editors of these documents is appreciated. Note that editors of this | |||
| document were redacted from the above list. | document were redacted from the above list. | |||
| Index | Index | |||
| $ | $ | |||
| $Forwarded (predefined flag) 12 | $Forwarded (predefined flag) 12 | |||
| $Junk (predefined flag) 12 | $Junk (predefined flag) 12 | |||
| $MDNSent (predefined flag) 12 | $MDNSent (predefined flag) 12 | |||
| $NotJunk (predefined flag) 12 | $NotJunk (predefined flag) 12 | |||
| $Phishing (predefined flag) 12 | $Phishing (predefined flag) 12 | |||
| + | + | |||
| +FLAGS <flag list> 90 | +FLAGS <flag list> 92 | |||
| +FLAGS.SILENT <flag list> 90 | +FLAGS.SILENT <flag list> 92 | |||
| - | - | |||
| -FLAGS <flag list> 90 | -FLAGS <flag list> 92 | |||
| -FLAGS.SILENT <flag list> 90 | -FLAGS.SILENT <flag list> 92 | |||
| A | A | |||
| ALERT (response code) 97 | ALERT (response code) 99 | |||
| ALL (fetch item) 86 | ALL (fetch item) 88 | |||
| ALL (search key) 76 | ALL (search key) 78 | |||
| ALL (search result option) 74 | ALL (search result option) 76 | |||
| ALREADYEXISTS (response code) 97 | ALREADYEXISTS (response code) 99 | |||
| ANSWERED (search key) 76 | ANSWERED (search key) 78 | |||
| APPEND (command) 66 | APPEND (command) 68 | |||
| APPENDUID (response code) 97 | APPENDUID (response code) 99 | |||
| AUTHENTICATE (command) 29 | AUTHENTICATE (command) 29 | |||
| AUTHENTICATIONFAILED (response code) 98 | AUTHENTICATIONFAILED (response code) 100 | |||
| AUTHORIZATIONFAILED (response code) 98 | AUTHORIZATIONFAILED (response code) 100 | |||
| B | B | |||
| BAD (response) 106 | BAD (response) 107 | |||
| BADCHARSET (response code) 99 | BADCHARSET (response code) 101 | |||
| BCC <string> (search key) 76 | BCC <string> (search key) 78 | |||
| BEFORE <date> (search key) 76 | BEFORE <date> (search key) 78 | |||
| BINARY.PEEK[<section-binary>]<<partial>> (fetch item) 86 | BINARY.PEEK[<section-binary>]<<partial>> (fetch item) 88 | |||
| BINARY.SIZE[<section-binary>] (fetch item) 86 | BINARY.SIZE[<section-binary>] (fetch item) 88 | |||
| BINARY.SIZE[<section-binary>] (fetch result) 116 | BINARY.SIZE[<section-binary>] (fetch result) 118 | |||
| BINARY[<section-binary>]<<number>> (fetch result) 115 | BINARY[<section-binary>]<<number>> (fetch result) 117 | |||
| BINARY[<section-binary>]<<partial>> (fetch item) 86 | BINARY[<section-binary>]<<partial>> (fetch item) 88 | |||
| BODY (fetch item) 87 | BODY (fetch item) 89 | |||
| BODY (fetch result) 116 | BODY (fetch result) 118 | |||
| BODY <string> (search key) 76 | BODY <string> (search key) 78 | |||
| BODY.PEEK[<section>]<<partial>> (fetch item) 89 | BODY.PEEK[<section>]<<partial>> (fetch item) 91 | |||
| BODYSTRUCTURE (fetch item) 89 | BODYSTRUCTURE (fetch item) 91 | |||
| BODYSTRUCTURE (fetch result) 117 | BODYSTRUCTURE (fetch result) 119 | |||
| BODY[<section>]<<origin octet>> (fetch result) 116 | BODY[<section>]<<origin octet>> (fetch result) 118 | |||
| BODY[<section>]<<partial>> (fetch item) 87 | BODY[<section>]<<partial>> (fetch item) 89 | |||
| BYE (response) 106 | BYE (response) 108 | |||
| Body Structure (message attribute) 14 | Body Structure (message attribute) 14 | |||
| C | C | |||
| CANNOT (response code) 99 | CANNOT (response code) 101 | |||
| CAPABILITY (command) 25 | CAPABILITY (command) 25 | |||
| CAPABILITY (response code) 99 | CAPABILITY (response code) 101 | |||
| CAPABILITY (response) 107 | CAPABILITY (response) 109 | |||
| CC <string> (search key) 76 | CC <string> (search key) 78 | |||
| CLIENTBUG (response code) 99 | CLIENTBUG (response code) 101 | |||
| CLOSE (command) 71 | CLOSE (command) 73 | |||
| CLOSED (response code) 99 | CLOSED (response code) 101 | |||
| CONTACTADMIN (response code) 100 | CONTACTADMIN (response code) 102 | |||
| COPY (command) 90 | COPY (command) 92 | |||
| COPYUID (response code) 100 | COPYUID (response code) 102 | |||
| CORRUPTION (response code) 100 | CORRUPTION (response code) 102 | |||
| COUNT (search result option) 74 | COUNT (search result option) 76 | |||
| CREATE (command) 38 | CREATE (command) 38 | |||
| D | D | |||
| DELETE (command) 39 | DELETE (command) 39 | |||
| DELETED (search key) 76 | DELETED (search key) 78 | |||
| DELETED (status item) 66 | DELETED (status item) 68 | |||
| DRAFT (search key) 76 | DRAFT (search key) 78 | |||
| E | E | |||
| ENABLE (command) 33 | ENABLE (command) 33 | |||
| ENVELOPE (fetch item) 89 | ENVELOPE (fetch item) 91 | |||
| ENVELOPE (fetch result) 119 | ENVELOPE (fetch result) 121 | |||
| ESEARCH (response) 113 | ESEARCH (response) 115 | |||
| EXAMINE (command) 37 | EXAMINE (command) 37 | |||
| EXPIRED (response code) 101 | EXPIRED (response code) 103 | |||
| EXPUNGE (command) 72 | EXPUNGE (command) 74 | |||
| EXPUNGE (response) 114 | EXPUNGE (response) 116 | |||
| EXPUNGEISSUED (response code) 101 | EXPUNGEISSUED (response code) 103 | |||
| Envelope Structure (message attribute) 14 | Envelope Structure (message attribute) 14 | |||
| F | F | |||
| FAST (fetch item) 86 | FAST (fetch item) 88 | |||
| FETCH (command) 85 | FETCH (command) 87 | |||
| FETCH (response) 115 | FETCH (response) 117 | |||
| FLAGGED (search key) 76 | FLAGGED (search key) 78 | |||
| FLAGS (fetch item) 89 | FLAGS (fetch item) 91 | |||
| FLAGS (fetch result) 121 | FLAGS (fetch result) 122 | |||
| FLAGS (response) 113 | FLAGS (response) 115 | |||
| FLAGS <flag list> (store command data item) 90 | FLAGS <flag list> (store command data item) 92 | |||
| FLAGS.SILENT <flag list> (store command data item) 90 | FLAGS.SILENT <flag list> (store command data item) 92 | |||
| FROM <string> (search key) 76 | FROM <string> (search key) 78 | |||
| FULL (fetch item) 86 | FULL (fetch item) 88 | |||
| Flags (message attribute) 11 | Flags (message attribute) 11 | |||
| H | H | |||
| HASCHILDREN (response code) 101 | HASCHILDREN (response code) 103 | |||
| HEADER (part specifier) 87 | HEADER (part specifier) 89 | |||
| HEADER <field-name> <string> (search key) 76 | HEADER <field-name> <string> (search key) 78 | |||
| HEADER.FIELDS (part specifier) 87 | HEADER.FIELDS (part specifier) 89 | |||
| HEADER.FIELDS.NOT (part specifier) 87 | HEADER.FIELDS.NOT (part specifier) 89 | |||
| I | I | |||
| IDLE (command) 69 | IDLE (command) 71 | |||
| INTERNALDATE (fetch item) 89 | INTERNALDATE (fetch item) 91 | |||
| INTERNALDATE (fetch result) 121 | INTERNALDATE (fetch result) 122 | |||
| INUSE (response code) 101 | INUSE (response code) 103 | |||
| Internal Date (message attribute) 13 | Internal Date (message attribute) 13 | |||
| K | K | |||
| KEYWORD <flag> (search key) 77 | KEYWORD <flag> (search key) 79 | |||
| Keyword (type of flag) 12 | Keyword (type of flag) 12 | |||
| L | L | |||
| LARGER <n> (search key) 77 | LARGER <n> (search key) 79 | |||
| LIMIT (response code) 102 | LIMIT (response code) 103 | |||
| LIST (command) 43 | LIST (command) 44 | |||
| LIST (response) 108 | LIST (response) 110 | |||
| LOGOUT (command) 27 | LOGOUT (command) 27 | |||
| M | M | |||
| MAX (search result option) 74 | MAX (search result option) 76 | |||
| MAY (specification requirement term) 5 | MAY (specification requirement term) 5 | |||
| MESSAGES (status item) 66 | MESSAGES (status item) 68 | |||
| MIME (part specifier) 88 | MIME (part specifier) 90 | |||
| MIN (search result option) 74 | MIN (search result option) 76 | |||
| MOVE (command) 91 | MOVE (command) 93 | |||
| MUST (specification requirement term) 5 | MUST (specification requirement term) 5 | |||
| MUST NOT (specification requirement term) 5 | MUST NOT (specification requirement term) 5 | |||
| Message Sequence Number (message attribute) 11 | Message Sequence Number (message attribute) 11 | |||
| N | N | |||
| NAMESPACE (command) 61 | NAMESPACE (command) 62 | |||
| NAMESPACE (response) 112 | NAMESPACE (response) 114 | |||
| NO (response) 105 | NO (response) 107 | |||
| NONEXISTENT (response code) 102 | NONEXISTENT (response code) 104 | |||
| NOOP (command) 26 | NOOP (command) 26 | |||
| NOPERM (response code) 102 | NOPERM (response code) 104 | |||
| NOT <search-key> (search key) 77 | NOT <search-key> (search key) 79 | |||
| NOT RECOMMENDED (specification requirement term) 5 | NOT RECOMMENDED (specification requirement term) 5 | |||
| O | O | |||
| OK (response) 105 | OK (response) 107 | |||
| ON <date> (search key) 77 | ON <date> (search key) 79 | |||
| OPTIONAL (specification requirement term) 5 | OPTIONAL (specification requirement term) 5 | |||
| OR <search-key1> <search-key2> (search key) 77 | OR <search-key1> <search-key2> (search key) 79 | |||
| OVERQUOTA (response code) 102 | OVERQUOTA (response code) 104 | |||
| P | P | |||
| PARSE (response code) 102 | PARSE (response code) 104 | |||
| PERMANENTFLAGS (response code) 103 | PERMANENTFLAGS (response code) 104 | |||
| PREAUTH (response) 106 | PREAUTH (response) 108 | |||
| PRIVACYREQUIRED (response code) 103 | PRIVACYREQUIRED (response code) 105 | |||
| Permanent Flag (class of flag) 13 | Permanent Flag (class of flag) 13 | |||
| Predefined keywords 12 | Predefined keywords 12 | |||
| R | R | |||
| READ-ONLY (response code) 103 | READ-ONLY (response code) 105 | |||
| READ-WRITE (response code) 103 | READ-WRITE (response code) 105 | |||
| RECOMMENDED (specification requirement term) 5 | RECOMMENDED (specification requirement term) 5 | |||
| RENAME (command) 40 | RENAME (command) 41 | |||
| REQUIRED (specification requirement term) 5 | REQUIRED (specification requirement term) 5 | |||
| RFC822.SIZE (fetch item) 89 | RFC822.SIZE (fetch item) 91 | |||
| RFC822.SIZE (fetch result) 121 | RFC822.SIZE (fetch result) 123 | |||
| S | S | |||
| SAVE (search result option) 74 | SAVE (search result option) 76 | |||
| SEARCH (command) 73 | SEARCH (command) 75 | |||
| SEEN (search key) 77 | SEEN (search key) 79 | |||
| SELECT (command) 35 | SELECT (command) 35 | |||
| SENTBEFORE <date> (search key) 77 | SENTBEFORE <date> (search key) 79 | |||
| SENTON <date> (search key) 77 | SENTON <date> (search key) 79 | |||
| SENTSINCE <date> (search key) 77 | SENTSINCE <date> (search key) 79 | |||
| SERVERBUG (response code) 103 | SERVERBUG (response code) 105 | |||
| SHOULD (specification requirement term) 5 | SHOULD (specification requirement term) 5 | |||
| SHOULD NOT (specification requirement term) 5 | SHOULD NOT (specification requirement term) 5 | |||
| SINCE <date> (search key) 77 | SINCE <date> (search key) 79 | |||
| SIZE (status item) 66 | SIZE (status item) 68 | |||
| SMALLER <n> (search key) 77 | SMALLER <n> (search key) 79 | |||
| STARTTLS (command) 28 | STARTTLS (command) 28 | |||
| STATUS (command) 65 | STATUS (command) 67 | |||
| STATUS (response) 113 | STATUS (response) 114 | |||
| STORE (command) 89 | STORE (command) 91 | |||
| SUBJECT <string> (search key) 77 | SUBJECT <string> (search key) 79 | |||
| SUBSCRIBE (command) 42 | SUBSCRIBE (command) 43 | |||
| Session Flag (class of flag) 13 | Session Flag (class of flag) 13 | |||
| System Flag (type of flag) 11 | System Flag (type of flag) 11 | |||
| T | T | |||
| TEXT (part specifier) 87 | TEXT (part specifier) 89 | |||
| TEXT <string> (search key) 77 | TEXT <string> (search key) 79 | |||
| TO <string> (search key) 77 | TO <string> (search key) 80 | |||
| TRYCREATE (response code) 104 | TRYCREATE (response code) 105 | |||
| U | U | |||
| UID (command) 93 | UID (command) 95 | |||
| UID (fetch item) 89 | UID (fetch item) 91 | |||
| UID (fetch result) 121 | UID (fetch result) 123 | |||
| UID <sequence set> (search key) 78 | UID <sequence set> (search key) 80 | |||
| UIDNEXT (response code) 104 | UIDNEXT (response code) 106 | |||
| UIDNEXT (status item) 66 | UIDNEXT (status item) 68 | |||
| UIDNOTSTICKY (response code) 104 | UIDNOTSTICKY (response code) 106 | |||
| UIDVALIDITY (response code) 104 | UIDVALIDITY (response code) 106 | |||
| UIDVALIDITY (status item) 66 | UIDVALIDITY (status item) 68 | |||
| UNANSWERED (search key) 78 | UNANSWERED (search key) 80 | |||
| UNAVAILABLE (response code) 104 | UNAVAILABLE (response code) 106 | |||
| UNDELETED (search key) 78 | UNDELETED (search key) 80 | |||
| UNDRAFT (search key) 78 | UNDRAFT (search key) 80 | |||
| UNFLAGGED (search key) 78 | UNFLAGGED (search key) 80 | |||
| UNKEYWORD <flag> (search key) 78 | UNKEYWORD <flag> (search key) 80 | |||
| UNKNOWN-CTE (response code) 105 | UNKNOWN-CTE (response code) 106 | |||
| UNSEEN (search key) 78 | UNSEEN (search key) 80 | |||
| UNSEEN (status item) 66 | UNSEEN (status item) 68 | |||
| UNSELECT (command) 72 | UNSELECT (command) 74 | |||
| UNSUBSCRIBE (command) 43 | UNSUBSCRIBE (command) 44 | |||
| Unique Identifier (UID) (message attribute) 9 | Unique Identifier (UID) (message attribute) 9 | |||
| X | X | |||
| X<atom> (command) 95 | X<atom> (command) 97 | |||
| [ | [ | |||
| [RFC-5322] Size (message attribute) 13 | [RFC-5322] Size (message attribute) 13 | |||
| \ | \ | |||
| \All (mailbox name attribute) 110 | \All (mailbox name attribute) 112 | |||
| \Answered (system flag) 11 | \Answered (system flag) 11 | |||
| \Archive (mailbox name attribute) 110 | \Archive (mailbox name attribute) 112 | |||
| \Deleted (system flag) 12 | \Deleted (system flag) 12 | |||
| \Draft (system flag) 12 | \Draft (system flag) 12 | |||
| \Drafts (mailbox name attribute) 111 | \Drafts (mailbox name attribute) 112 | |||
| \Flagged (mailbox name attribute) 111 | \Flagged (mailbox name attribute) 112 | |||
| \Flagged (system flag) 11 | \Flagged (system flag) 11 | |||
| \HasChildren (mailbox name attribute) 109 | \HasChildren (mailbox name attribute) 111 | |||
| \HasNoChildren (mailbox name attribute) 110 | \HasNoChildren (mailbox name attribute) 111 | |||
| \Junk (mailbox name attribute) 111 | \Junk (mailbox name attribute) 113 | |||
| \Marked (mailbox name attribute) 110 | \Marked (mailbox name attribute) 111 | |||
| \Noinferiors (mailbox name attribute) 109 | \Noinferiors (mailbox name attribute) 111 | |||
| \NonExistent (mailbox name attribute) 109 | \NonExistent (mailbox name attribute) 110 | |||
| \Noselect (mailbox name attribute) 109 | \Noselect (mailbox name attribute) 111 | |||
| \Recent (system flag) 12 | \Recent (system flag) 12 | |||
| \Remote (mailbox name attribute) 110 | \Remote (mailbox name attribute) 112 | |||
| \Seen (system flag) 11 | \Seen (system flag) 11 | |||
| \Sent (mailbox name attribute) 111 | \Sent (mailbox name attribute) 113 | |||
| \Subscribed (mailbox name attribute) 110 | \Subscribed (mailbox name attribute) 112 | |||
| \Trash (mailbox name attribute) 111 | \Trash (mailbox name attribute) 113 | |||
| \Unmarked (mailbox name attribute) 110 | \Unmarked (mailbox name attribute) 111 | |||
| Authors' Addresses | Authors' Addresses | |||
| Alexey Melnikov (editor) | Alexey Melnikov (editor) | |||
| Isode Ltd | Isode Ltd | |||
| 14 Castle Mews | 14 Castle Mews | |||
| Hampton, Middlesex TW12 2NP | Hampton, Middlesex TW12 2NP | |||
| UK | UK | |||
| Email: Alexey.Melnikov@isode.com | Email: Alexey.Melnikov@isode.com | |||
| End of changes. 111 change blocks. | ||||
| 355 lines changed or deleted | 493 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||