| < draft-ietf-extra-imap4rev2-09.txt | draft-ietf-extra-imap4rev2-10.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 Huawei Technologies | Intended status: Standards Track Huawei Technologies | |||
| Expires: May 27, 2020 November 24, 2019 | Expires: May 29, 2020 November 26, 2019 | |||
| INTERNET MESSAGE ACCESS PROTOCOL - VERSION 4rev2 | INTERNET MESSAGE ACCESS PROTOCOL - VERSION 4rev2 | |||
| draft-ietf-extra-imap4rev2-09 | draft-ietf-extra-imap4rev2-10 | |||
| 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 May 27, 2020. | This Internet-Draft will expire on May 29, 2020. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2019 IETF Trust and the persons identified as the | Copyright (c) 2019 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 35 ¶ | skipping to change at page 3, line 35 ¶ | |||
| 6.1.1. CAPABILITY Command . . . . . . . . . . . . . . . . . 24 | 6.1.1. CAPABILITY Command . . . . . . . . . . . . . . . . . 24 | |||
| 6.1.2. NOOP Command . . . . . . . . . . . . . . . . . . . . 25 | 6.1.2. NOOP Command . . . . . . . . . . . . . . . . . . . . 25 | |||
| 6.1.3. LOGOUT Command . . . . . . . . . . . . . . . . . . . 26 | 6.1.3. LOGOUT Command . . . . . . . . . . . . . . . . . . . 26 | |||
| 6.2. Client Commands - Not Authenticated State . . . . . . . . 26 | 6.2. Client Commands - Not Authenticated State . . . . . . . . 26 | |||
| 6.2.1. STARTTLS Command . . . . . . . . . . . . . . . . . . 27 | 6.2.1. STARTTLS Command . . . . . . . . . . . . . . . . . . 27 | |||
| 6.2.2. AUTHENTICATE Command . . . . . . . . . . . . . . . . 28 | 6.2.2. AUTHENTICATE Command . . . . . . . . . . . . . . . . 28 | |||
| 6.2.3. LOGIN Command . . . . . . . . . . . . . . . . . . . . 31 | 6.2.3. LOGIN Command . . . . . . . . . . . . . . . . . . . . 31 | |||
| 6.3. Client Commands - Authenticated State . . . . . . . . . . 31 | 6.3. Client Commands - Authenticated State . . . . . . . . . . 31 | |||
| 6.3.1. ENABLE Command . . . . . . . . . . . . . . . . . . . 32 | 6.3.1. ENABLE Command . . . . . . . . . . . . . . . . . . . 32 | |||
| 6.3.2. SELECT Command . . . . . . . . . . . . . . . . . . . 34 | 6.3.2. SELECT Command . . . . . . . . . . . . . . . . . . . 34 | |||
| 6.3.3. EXAMINE Command . . . . . . . . . . . . . . . . . . . 35 | 6.3.3. EXAMINE Command . . . . . . . . . . . . . . . . . . . 36 | |||
| 6.3.4. CREATE Command . . . . . . . . . . . . . . . . . . . 36 | 6.3.4. CREATE Command . . . . . . . . . . . . . . . . . . . 37 | |||
| 6.3.5. DELETE Command . . . . . . . . . . . . . . . . . . . 37 | 6.3.5. DELETE Command . . . . . . . . . . . . . . . . . . . 38 | |||
| 6.3.6. RENAME Command . . . . . . . . . . . . . . . . . . . 39 | 6.3.6. RENAME Command . . . . . . . . . . . . . . . . . . . 39 | |||
| 6.3.7. SUBSCRIBE Command . . . . . . . . . . . . . . . . . . 40 | 6.3.7. SUBSCRIBE Command . . . . . . . . . . . . . . . . . . 41 | |||
| 6.3.8. UNSUBSCRIBE Command . . . . . . . . . . . . . . . . . 41 | 6.3.8. UNSUBSCRIBE Command . . . . . . . . . . . . . . . . . 42 | |||
| 6.3.9. LIST Command . . . . . . . . . . . . . . . . . . . . 41 | 6.3.9. LIST Command . . . . . . . . . . . . . . . . . . . . 42 | |||
| 6.3.10. NAMESPACE Command . . . . . . . . . . . . . . . . . . 58 | 6.3.10. NAMESPACE Command . . . . . . . . . . . . . . . . . . 60 | |||
| 6.3.11. STATUS Command . . . . . . . . . . . . . . . . . . . 63 | 6.3.11. STATUS Command . . . . . . . . . . . . . . . . . . . 65 | |||
| 6.3.12. APPEND Command . . . . . . . . . . . . . . . . . . . 64 | 6.3.12. APPEND Command . . . . . . . . . . . . . . . . . . . 66 | |||
| 6.3.13. IDLE Command . . . . . . . . . . . . . . . . . . . . 67 | 6.3.13. IDLE Command . . . . . . . . . . . . . . . . . . . . 69 | |||
| 6.4. Client Commands - Selected State . . . . . . . . . . . . 69 | 6.4. Client Commands - Selected State . . . . . . . . . . . . 71 | |||
| 6.4.1. CLOSE Command . . . . . . . . . . . . . . . . . . . . 69 | 6.4.1. CLOSE Command . . . . . . . . . . . . . . . . . . . . 71 | |||
| 6.4.2. UNSELECT Command . . . . . . . . . . . . . . . . . . 70 | 6.4.2. UNSELECT Command . . . . . . . . . . . . . . . . . . 72 | |||
| 6.4.3. EXPUNGE Command . . . . . . . . . . . . . . . . . . . 70 | 6.4.3. EXPUNGE Command . . . . . . . . . . . . . . . . . . . 72 | |||
| 6.4.4. SEARCH Command . . . . . . . . . . . . . . . . . . . 71 | 6.4.4. SEARCH Command . . . . . . . . . . . . . . . . . . . 73 | |||
| 6.4.5. FETCH Command . . . . . . . . . . . . . . . . . . . . 77 | 6.4.5. FETCH Command . . . . . . . . . . . . . . . . . . . . 79 | |||
| 6.4.6. STORE Command . . . . . . . . . . . . . . . . . . . . 81 | 6.4.6. STORE Command . . . . . . . . . . . . . . . . . . . . 83 | |||
| 6.4.7. COPY Command . . . . . . . . . . . . . . . . . . . . 82 | 6.4.7. COPY Command . . . . . . . . . . . . . . . . . . . . 84 | |||
| 6.4.8. MOVE Command . . . . . . . . . . . . . . . . . . . . 83 | 6.4.8. MOVE Command . . . . . . . . . . . . . . . . . . . . 85 | |||
| 6.4.9. UID Command . . . . . . . . . . . . . . . . . . . . . 85 | 6.4.9. UID Command . . . . . . . . . . . . . . . . . . . . . 87 | |||
| 6.5. Client Commands - Experimental/Expansion . . . . . . . . 86 | 6.5. Client Commands - Experimental/Expansion . . . . . . . . 88 | |||
| 6.5.1. X<atom> Command . . . . . . . . . . . . . . . . . . . 86 | 6.5.1. X<atom> Command . . . . . . . . . . . . . . . . . . . 88 | |||
| 7. Server Responses . . . . . . . . . . . . . . . . . . . . . . 87 | 7. Server Responses . . . . . . . . . . . . . . . . . . . . . . 89 | |||
| 7.1. Server Responses - Status Responses . . . . . . . . . . . 88 | 7.1. Server Responses - Status Responses . . . . . . . . . . . 90 | |||
| 7.1.1. OK Response . . . . . . . . . . . . . . . . . . . . . 96 | 7.1.1. OK Response . . . . . . . . . . . . . . . . . . . . . 98 | |||
| 7.1.2. NO Response . . . . . . . . . . . . . . . . . . . . . 96 | 7.1.2. NO Response . . . . . . . . . . . . . . . . . . . . . 98 | |||
| 7.1.3. BAD Response . . . . . . . . . . . . . . . . . . . . 97 | 7.1.3. BAD Response . . . . . . . . . . . . . . . . . . . . 99 | |||
| 7.1.4. PREAUTH Response . . . . . . . . . . . . . . . . . . 97 | 7.1.4. PREAUTH Response . . . . . . . . . . . . . . . . . . 99 | |||
| 7.1.5. BYE Response . . . . . . . . . . . . . . . . . . . . 98 | 7.1.5. BYE Response . . . . . . . . . . . . . . . . . . . . 100 | |||
| 7.2. Server Responses - Server and Mailbox Status . . . . . . 98 | 7.2. Server Responses - Server and Mailbox Status . . . . . . 100 | |||
| 7.2.1. The ENABLED Response . . . . . . . . . . . . . . . . 98 | 7.2.1. The ENABLED Response . . . . . . . . . . . . . . . . 100 | |||
| 7.2.2. CAPABILITY Response . . . . . . . . . . . . . . . . . 99 | 7.2.2. CAPABILITY Response . . . . . . . . . . . . . . . . . 101 | |||
| 7.2.3. LIST Response . . . . . . . . . . . . . . . . . . . . 100 | 7.2.3. LIST Response . . . . . . . . . . . . . . . . . . . . 102 | |||
| 7.2.4. NAMESPACE Response . . . . . . . . . . . . . . . . . 103 | 7.2.4. NAMESPACE Response . . . . . . . . . . . . . . . . . 105 | |||
| 7.2.5. STATUS Response . . . . . . . . . . . . . . . . . . . 103 | 7.2.5. STATUS Response . . . . . . . . . . . . . . . . . . . 105 | |||
| 7.2.6. ESEARCH Response . . . . . . . . . . . . . . . . . . 104 | 7.2.6. ESEARCH Response . . . . . . . . . . . . . . . . . . 106 | |||
| 7.2.7. FLAGS Response . . . . . . . . . . . . . . . . . . . 104 | 7.2.7. FLAGS Response . . . . . . . . . . . . . . . . . . . 106 | |||
| 7.3. Server Responses - Mailbox Size . . . . . . . . . . . . . 105 | 7.3. Server Responses - Mailbox Size . . . . . . . . . . . . . 107 | |||
| 7.3.1. EXISTS Response . . . . . . . . . . . . . . . . . . . 105 | 7.3.1. EXISTS Response . . . . . . . . . . . . . . . . . . . 107 | |||
| 7.4. Server Responses - Message Status . . . . . . . . . . . . 105 | 7.4. Server Responses - Message Status . . . . . . . . . . . . 107 | |||
| 7.4.1. EXPUNGE Response . . . . . . . . . . . . . . . . . . 105 | 7.4.1. EXPUNGE Response . . . . . . . . . . . . . . . . . . 107 | |||
| 7.4.2. FETCH Response . . . . . . . . . . . . . . . . . . . 106 | 7.4.2. FETCH Response . . . . . . . . . . . . . . . . . . . 108 | |||
| 7.5. Server Responses - Command Continuation Request . . . . . 112 | 7.5. Server Responses - Command Continuation Request . . . . . 114 | |||
| 8. Sample IMAP4rev2 connection . . . . . . . . . . . . . . . . . 112 | 8. Sample IMAP4rev2 connection . . . . . . . . . . . . . . . . . 114 | |||
| 9. Formal Syntax . . . . . . . . . . . . . . . . . . . . . . . . 113 | 9. Formal Syntax . . . . . . . . . . . . . . . . . . . . . . . . 115 | |||
| 10. Author's Note . . . . . . . . . . . . . . . . . . . . . . . . 130 | 10. Author's Note . . . . . . . . . . . . . . . . . . . . . . . . 132 | |||
| 11. Security Considerations . . . . . . . . . . . . . . . . . . . 130 | 11. Security Considerations . . . . . . . . . . . . . . . . . . . 132 | |||
| 11.1. STARTTLS Security Considerations . . . . . . . . . . . . 130 | 11.1. STARTTLS Security Considerations . . . . . . . . . . . . 132 | |||
| 11.2. COPYUID and APPENDUID response codes . . . . . . . . . . 131 | 11.2. COPYUID and APPENDUID response codes . . . . . . . . . . 133 | |||
| 11.3. LIST command and Other Users' namespace . . . . . . . . 131 | 11.3. LIST command and Other Users' namespace . . . . . . . . 133 | |||
| 11.4. Other Security Considerations . . . . . . . . . . . . . 131 | 11.4. Other Security Considerations . . . . . . . . . . . . . 133 | |||
| 12. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 132 | 12. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 134 | |||
| 12.1. Updates to IMAP4 Capabilities registry . . . . . . . . . 132 | 12.1. Updates to IMAP4 Capabilities registry . . . . . . . . . 134 | |||
| 12.2. GSSAPI/SASL service name . . . . . . . . . . . . . . . . 133 | 12.2. GSSAPI/SASL service name . . . . . . . . . . . . . . . . 135 | |||
| 13. References . . . . . . . . . . . . . . . . . . . . . . . . . 133 | 13. References . . . . . . . . . . . . . . . . . . . . . . . . . 135 | |||
| 13.1. Normative References . . . . . . . . . . . . . . . . . . 133 | 13.1. Normative References . . . . . . . . . . . . . . . . . . 135 | |||
| 13.2. Informative References (related protocols) . . . . . . . 136 | 13.2. Informative References (related protocols) . . . . . . . 138 | |||
| 13.3. Informative References (historical aspects of IMAP and | 13.3. Informative References (historical aspects of IMAP and | |||
| related protocols) . . . . . . . . . . . . . . . . . . . 137 | related protocols) . . . . . . . . . . . . . . . . . . . 139 | |||
| Appendix A. Backward compatibility with IMAP4rev1 . . . . . . . 138 | Appendix A. Backward compatibility with IMAP4rev1 . . . . . . . 140 | |||
| A.1. Mailbox International Naming Convention for compatibility | A.1. Mailbox International Naming Convention for compatibility | |||
| with IMAP4rev1 . . . . . . . . . . . . . . . . . . . . . 138 | with IMAP4rev1 . . . . . . . . . . . . . . . . . . . . . 140 | |||
| Appendix B. Backward compatibility with BINARY extension . . . . 140 | Appendix B. Backward compatibility with BINARY extension . . . . 142 | |||
| Appendix C. Changes from RFC 3501 / IMAP4rev1 . . . . . . . . . 140 | Appendix C. Changes from RFC 3501 / IMAP4rev1 . . . . . . . . . 142 | |||
| Appendix D. Acknowledgement . . . . . . . . . . . . . . . . . . 142 | Appendix D. Acknowledgement . . . . . . . . . . . . . . . . . . 144 | |||
| Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 | Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 148 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 150 | |||
| 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 35, line 41 ¶ | skipping to change at page 36, line 5 ¶ | |||
| modified with read-only mailboxes. | modified with read-only mailboxes. | |||
| Example: C: A142 SELECT INBOX | Example: C: A142 SELECT INBOX | |||
| S: * 172 EXISTS | S: * 172 EXISTS | |||
| 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 (\Deleted \Seen \*)] Limited | S: * OK [PERMANENTFLAGS (\Deleted \Seen \*)] Limited | |||
| S: A142 OK [READ-WRITE] SELECT completed | S: A142 OK [READ-WRITE] SELECT completed | |||
| Example: C: A142 SELECT INBOX | ||||
| S: * 172 EXISTS | ||||
| S: * OK [UIDVALIDITY 3857529045] UIDs valid | ||||
| S: * OK [UIDNEXT 4392] Predicted next UID | ||||
| S: * FLAGS (\Answered \Flagged \Deleted \Seen \Draft) | ||||
| S: * OK [PERMANENTFLAGS (\Deleted \Seen \*)] Limited | ||||
| S: A142 OK [READ-WRITE] SELECT completed | ||||
| [...some time later...] | ||||
| C: A143 SELECT Drafts | ||||
| S: * OK [CLOSED] Previous mailbox is now closed | ||||
| S: * 5 EXISTS | ||||
| S: * OK [UIDVALIDITY 9877410381] UIDs valid | ||||
| S: * OK [UIDNEXT 102] Predicted next UID | ||||
| S: * FLAGS (\Answered \Flagged \Deleted \Seen \Draft) | ||||
| S: * OK [PERMANENTFLAGS (\Deleted \Seen \Answered | ||||
| \Flagged \Draft \*)] System flags and keywords allowed | ||||
| S: A143 OK [READ-WRITE] SELECT completed | ||||
| Note that IMAP4rev1 compliant servers can also send the untagged | Note that IMAP4rev1 compliant servers can also send the untagged | |||
| RECENT response which was depractated in IMAP4rev2. E.g. "* 0 | RECENT response which was depractated in IMAP4rev2. E.g. "* 0 | |||
| 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 | |||
| skipping to change at page 47, line 33 ¶ | skipping to change at page 48, line 33 ¶ | |||
| be supported and MUST be accurately computed when the SUBSCRIBED | be supported and MUST be accurately computed when the SUBSCRIBED | |||
| return option is specified. Further, all mailbox flags MUST be | return option is specified. Further, all mailbox flags MUST be | |||
| accurately computed (this differs from the behavior of the | accurately computed (this differs from the behavior of the | |||
| obsolete LSUB command from IMAP4rev1). | obsolete LSUB command from IMAP4rev1). | |||
| CHILDREN - requests mailbox child information as originally proposed | CHILDREN - requests mailbox child information as originally proposed | |||
| in [RFC3348]. See Section 6.3.9.5, below, for details. | in [RFC3348]. See Section 6.3.9.5, below, for details. | |||
| CHILDREN - This option MUST be supported by all servers. | CHILDREN - This option MUST be supported by all servers. | |||
| STATUS - requests STATUS response for each matching mailbox. | ||||
| This option takes STATUS data items as parameters. For each | ||||
| selectable mailbox matching the list pattern and selection | ||||
| options, the server MUST return an untagged LIST response | ||||
| followed by an untagged STATUS response containing the | ||||
| information requested in the STATUS return option. | ||||
| If an attempted STATUS for a listed mailbox fails because the | ||||
| mailbox can't be selected (e.g., if the "l" ACL right [RFC4314] | ||||
| is granted to the mailbox and the "r" right is not granted, or | ||||
| due to a race condition between LIST and STATUS changing the | ||||
| mailbox to \NoSelect), the STATUS response MUST NOT be returned | ||||
| and the LIST response MUST include the \NoSelect attribute. | ||||
| This means the server may have to buffer the LIST reply until | ||||
| it has successfully looked up the necessary STATUS information. | ||||
| If the server runs into unexpected problems while trying to | ||||
| look up the STATUS information, it MAY drop the corresponding | ||||
| STATUS reply. In such a situation, the LIST command would | ||||
| still return a tagged OK reply. | ||||
| 6.3.9.3. General Principles for Returning LIST Responses | 6.3.9.3. General Principles for Returning LIST Responses | |||
| This section outlines several principles that can be used by server | This section outlines several principles that can be used by server | |||
| implementations of this document to decide whether a LIST response | implementations of this document to decide whether a LIST response | |||
| should be returned, as well as how many responses and what kind of | should be returned, as well as how many responses and what kind of | |||
| information they may contain. | information they may contain. | |||
| 1. At most one LIST response should be returned for each mailbox | 1. At most one LIST response should be returned for each mailbox | |||
| name that matches the canonical LIST pattern. Server | name that matches the canonical LIST pattern. Server | |||
| implementors must not assume that clients will be able to | implementors must not assume that clients will be able to | |||
| skipping to change at page 48, line 32 ¶ | skipping to change at page 50, line 7 ¶ | |||
| 6.3.9.4. Additional LIST-related Requirements on Clients | 6.3.9.4. Additional LIST-related Requirements on Clients | |||
| All clients MUST treat a LIST attribute with a stronger meaning as | All clients MUST treat a LIST attribute with a stronger meaning as | |||
| implying any attribute that can be inferred from it. (See | implying any attribute that can be inferred from it. (See | |||
| Section 7.2.3 for the list of currently defined attributes). For | Section 7.2.3 for the list of currently defined attributes). For | |||
| example, the client must treat the presence of the \NoInferiors | example, the client must treat the presence of the \NoInferiors | |||
| attribute as if the \HasNoChildren attribute was also sent by the | attribute as if the \HasNoChildren attribute was also sent by the | |||
| server. | server. | |||
| The following table summarizes inference rules described in | The following table summarizes inference rules. | |||
| Section 6.3.9. | ||||
| +--------------------+-------------------+ | +--------------------+-------------------+ | |||
| | returned attribute | implied attribute | | | returned attribute | implied attribute | | |||
| +--------------------+-------------------+ | +--------------------+-------------------+ | |||
| | \NoInferiors | \HasNoChildren | | | \NoInferiors | \HasNoChildren | | |||
| | \NonExistent | \NoSelect | | | \NonExistent | \NoSelect | | |||
| +--------------------+-------------------+ | +--------------------+-------------------+ | |||
| 6.3.9.5. The CHILDREN Return Option | 6.3.9.5. The CHILDREN Return Option | |||
| skipping to change at page 57, line 29 ¶ | skipping to change at page 58, line 50 ¶ | |||
| S: * LIST (\Subscribed) "/" "eps2" ("CHILDINFO" ("SUBSCRIBED")) | S: * LIST (\Subscribed) "/" "eps2" ("CHILDINFO" ("SUBSCRIBED")) | |||
| S: * LIST (\Subscribed) "/" "eps2/mamba" | S: * LIST (\Subscribed) "/" "eps2/mamba" | |||
| S: * LIST (\Subscribed) "/" "qux2/bar2" | S: * LIST (\Subscribed) "/" "qux2/bar2" | |||
| S: D03 OK done | S: D03 OK done | |||
| The LIST responses for mailboxes "foo2", "baz2", and "eps2" | The LIST responses for mailboxes "foo2", "baz2", and "eps2" | |||
| still have the CHILDINFO extended data item, even though this | still have the CHILDINFO extended data item, even though this | |||
| information is redundant and the client can determine it by | information is redundant and the client can determine it by | |||
| itself. | itself. | |||
| 10: The following example shows usage of multiple mailbox patterns. | 10: | |||
| It also demonstrates that the presence of the CHILDINFO extended | ||||
| data item doesn't necessarily imply \HasChildren. | ||||
| C: a1 LIST "" ("foo" "foo/*") | 10: The following example shows usage of extended syntax for mailbox | |||
| pattern. It also demonstrates that the presence of the | ||||
| CHILDINFO extended data item doesn't necessarily imply | ||||
| \HasChildren. | ||||
| C: a1 LIST "" ("foo") | ||||
| S: * LIST () "/" foo | S: * LIST () "/" foo | |||
| S: a1 OK done | S: a1 OK done | |||
| C: a2 LIST (SUBSCRIBED) "" "foo/*" | C: a2 LIST (SUBSCRIBED) "" "foo/*" | |||
| S: * LIST (\Subscribed \NonExistent) "/" foo/bar | S: * LIST (\Subscribed \NonExistent) "/" foo/bar | |||
| S: a2 OK done | S: a2 OK done | |||
| C: a3 LIST (SUBSCRIBED RECURSIVEMATCH) "" foo RETURN (CHILDREN) | C: a3 LIST (SUBSCRIBED RECURSIVEMATCH) "" foo RETURN (CHILDREN) | |||
| S: * LIST (\HasNoChildren) "/" foo ("CHILDINFO" ("SUBSCRIBED")) | S: * LIST (\HasNoChildren) "/" foo ("CHILDINFO" ("SUBSCRIBED")) | |||
| S: a3 OK done | S: a3 OK done | |||
| skipping to change at page 58, line 27 ¶ | skipping to change at page 59, line 49 ¶ | |||
| S: a3 OK done | S: a3 OK done | |||
| C: a3.1 LIST "" (% music/rock) | C: a3.1 LIST "" (% music/rock) | |||
| S: * LIST () "/" music/rock | S: * LIST () "/" music/rock | |||
| S: a3.1 OK done | S: a3.1 OK done | |||
| Because "music/rock" is the only mailbox under "music", there's | Because "music/rock" is the only mailbox under "music", there's | |||
| no need for the server to also return "music". However clients | no need for the server to also return "music". However clients | |||
| must handle both cases. | must handle both cases. | |||
| 12: The following examples show use of STATUS return option. | ||||
| C: A01 LIST "" % RETURN (STATUS (MESSAGES UNSEEN)) | ||||
| S: * LIST () "." "INBOX" | ||||
| S: * STATUS "INBOX" (MESSAGES 17 UNSEEN 16) | ||||
| S: * LIST () "." "foo" | ||||
| S: * STATUS "foo" (MESSAGES 30 UNSEEN 29) | ||||
| S: * LIST (\NoSelect) "." "bar" | ||||
| S: A01 OK List completed. | ||||
| The "bar" mailbox isn't selectable, so it has no STATUS reply. | ||||
| C: A02 LIST (SUBSCRIBED RECURSIVEMATCH) "" % RETURN (STATUS | ||||
| (MESSAGES)) | ||||
| S: * LIST (\Subscribed) "." "INBOX" | ||||
| S: * STATUS "INBOX" (MESSAGES 17) | ||||
| S: * LIST () "." "foo" (CHILDINFO ("SUBSCRIBED")) | ||||
| S: A02 OK List completed. | ||||
| The LIST reply for "foo" is returned because it has matching | ||||
| children, but no STATUS reply is returned because "foo" itself | ||||
| doesn't match the selection criteria. | ||||
| 6.3.10. NAMESPACE Command | 6.3.10. NAMESPACE Command | |||
| Arguments: none | Arguments: none | |||
| Responses: REQUIRED untagged responses: NAMESPACE | Responses: REQUIRED untagged responses: NAMESPACE | |||
| Result: OK - command completed | Result: OK - command completed | |||
| NO - Can't complete the command | NO - Can't complete the command | |||
| BAD - arguments invalid | BAD - arguments invalid | |||
| skipping to change at page 61, line 5 ¶ | skipping to change at page 63, line 5 ¶ | |||
| format mailstore. | format mailstore. | |||
| The client is configured to save a copy of all mail sent by the user | The client is configured to save a copy of all mail sent by the user | |||
| into a mailbox called 'Sent Mail'. Furthermore, after a message is | into a mailbox called 'Sent Mail'. Furthermore, after a message is | |||
| deleted from a mailbox, the client is configured to move that message | deleted from a mailbox, the client is configured to move that message | |||
| to a mailbox called 'Deleted Items'. | to a mailbox called 'Deleted Items'. | |||
| Note that this example demonstrates how some extension flags can be | Note that this example demonstrates how some extension flags can be | |||
| passed to further describe the #mh namespace. | passed to further describe the #mh namespace. | |||
| C: A001 NAMESPACE | C: A001 NAMESPACE | |||
| S: * NAMESPACE (("" "/")("#mh/" "/" "X-PARAM" ("FLAG1" "FLAG2"))) | S: * NAMESPACE (("" "/")("#mh/" "/" "X-PARAM" | |||
| NIL NIL | ("FLAG1" "FLAG2"))) NIL NIL | |||
| S: A001 OK NAMESPACE command completed | S: A001 OK NAMESPACE command completed | |||
| < It is desired to keep only one copy of sent mail. It is unclear | < It is desired to keep only one copy of sent mail. | |||
| which Personal Namespace the client should use to create the 'Sent | It is unclear which Personal Namespace the client | |||
| Mail' mailbox. The user is prompted to select a namespace and | should use to create the 'Sent Mail' mailbox. | |||
| only one 'Sent Mail' mailbox is created. > | The user is prompted to select a namespace and only | |||
| one 'Sent Mail' mailbox is created. > | ||||
| C: A002 CREATE "Sent Mail" | C: A002 CREATE "Sent Mail" | |||
| S: A002 OK CREATE command completed | S: A002 OK CREATE command completed | |||
| < The client is designed so that it keeps two 'Deleted Items' | < The client is designed so that it keeps two | |||
| mailboxes, one for each namespace. > | 'Deleted Items' mailboxes, one for each namespace. > | |||
| C: A003 CREATE "Delete Items" | C: A003 CREATE "Delete Items" | |||
| S: A003 OK CREATE command completed | S: A003 OK CREATE command completed | |||
| C: A004 CREATE "#mh/Deleted Items" | C: A004 CREATE "#mh/Deleted Items" | |||
| S: A004 OK CREATE command completed | S: A004 OK CREATE command completed | |||
| The next level of hierarchy following the Other Users' Namespace | The next level of hierarchy following the Other Users' Namespace | |||
| prefix SHOULD consist of <username>, where <username> is a user name | prefix SHOULD consist of <username>, where <username> is a user name | |||
| as per the LOGIN or AUTHENTICATE command. | as per the LOGIN or AUTHENTICATE command. | |||
| A client can construct a LIST command by appending a "%" to the Other | A client can construct a LIST command by appending a "%" to the Other | |||
| Users' Namespace prefix to discover the Personal Namespaces of other | Users' Namespace prefix to discover the Personal Namespaces of other | |||
| users that are available to the currently authenticated user. | users that are available to the currently authenticated user. | |||
| In response to such a LIST command, a server SHOULD NOT return user | In response to such a LIST command, a server SHOULD NOT return user | |||
| skipping to change at page 62, line 23 ¶ | skipping to change at page 64, line 23 ¶ | |||
| S: * LIST () "/" "Other Users/Tesa" | S: * LIST () "/" "Other Users/Tesa" | |||
| S: A002 OK LIST command completed | S: A002 OK LIST command completed | |||
| Example 8: | Example 8: | |||
| A server that does not support providing a list of other user's | A server that does not support providing a list of other user's | |||
| mailboxes that are accessible to the currently logged on user. The | mailboxes that are accessible to the currently logged on user. The | |||
| mailboxes are listable if the client includes the name of the other | mailboxes are listable if the client includes the name of the other | |||
| user with the Other Users' Namespace prefix. | user with the Other Users' Namespace prefix. | |||
| C: A001 NAMESPACE | C: A001 NAMESPACE | |||
| S: * NAMESPACE (("" "/")) (("#Users/" "/")) NIL | S: * NAMESPACE (("" "/")) (("#Users/" "/")) NIL | |||
| S: A001 OK NAMESPACE command completed | S: A001 OK NAMESPACE command completed | |||
| < In this example, the currently logged on user has access to the | < In this example, the currently logged on user has access to | |||
| Personal Namespace of user Mike, but the server chose to suppress | the Personal Namespace of user Mike, but the server chose to | |||
| this information in the LIST response. However, by appending the | suppress this information in the LIST response. However, | |||
| user name Mike (received through user input) to the Other Users' | by appending the user name Mike (received through user input) | |||
| Namespace prefix, the client is able to get a listing of the | to the Other Users' Namespace prefix, the client is able | |||
| personal mailboxes of user Mike. > | to get a listing of the personal mailboxes of user Mike. > | |||
| C: A002 LIST "" "#Users/%" | C: A002 LIST "" "#Users/%" | |||
| S: A002 NO The requested item could not be found. | S: A002 NO The requested item could not be found. | |||
| C: A003 LIST "" "#Users/Mike/%" | C: A003 LIST "" "#Users/Mike/%" | |||
| S: * LIST () "/" "#Users/Mike/INBOX" | S: * LIST () "/" "#Users/Mike/INBOX" | |||
| S: * LIST () "/" "#Users/Mike/Foo" | S: * LIST () "/" "#Users/Mike/Foo" | |||
| S: A003 OK LIST command completed. | S: A003 OK LIST command completed. | |||
| A prefix string might not contain a hierarchy delimiter, because in | A prefix string might not contain a hierarchy delimiter, because in | |||
| some cases it is not needed as part of the prefix. | some cases it is not needed as part of the prefix. | |||
| Example 9: | Example 9: | |||
| A server that allows access to the Other Users' Namespace by | A server that allows access to the Other Users' Namespace by | |||
| prefixing the others' mailboxes with a '~' followed by <username>, | prefixing the others' mailboxes with a '~' followed by <username>, | |||
| where <username> is a user name as per the LOGIN or AUTHENTICATE | where <username> is a user name as per the LOGIN or AUTHENTICATE | |||
| command. | command. | |||
| skipping to change at page 69, line 5 ¶ | skipping to change at page 71, line 5 ¶ | |||
| to distinguish a command from a continuation. | to distinguish a command from a continuation. | |||
| The server MAY consider a client inactive if it has an IDLE command | The server MAY consider a client inactive if it has an IDLE command | |||
| running, and if such a server has an inactivity timeout it MAY log | running, and if such a server has an inactivity timeout it MAY log | |||
| the client off implicitly at the end of its timeout period. Because | the client off implicitly at the end of its timeout period. Because | |||
| of that, clients using IDLE are advised to terminate the IDLE and re- | of that, clients using IDLE are advised to terminate the IDLE and re- | |||
| issue it at least every 29 minutes to avoid being logged off. This | issue it at least every 29 minutes to avoid being logged off. This | |||
| still allows a client to receive immediate mailbox updates even | still allows a client to receive immediate mailbox updates even | |||
| though it need only "poll" at half hour intervals. | though it need only "poll" at half hour intervals. | |||
| Example: C: A001 SELECT INBOX | Example: C: A001 SELECT INBOX | |||
| S: * FLAGS (\Deleted \Seen \Flagged) | S: * FLAGS (\Deleted \Seen \Flagged) | |||
| S: * OK [PERMANENTFLAGS (\Deleted \Seen \Flagged)] Limited | S: * OK [PERMANENTFLAGS (\Deleted \Seen \Flagged)] Limited | |||
| S: * 3 EXISTS | S: * 3 EXISTS | |||
| S: * OK [UIDVALIDITY 1] | S: * OK [UIDVALIDITY 1] | |||
| S: A001 OK [READ-WRITE] SELECT completed | S: A001 OK [READ-WRITE] SELECT completed | |||
| C: A002 IDLE | C: A002 IDLE | |||
| S: + idling | S: + idling | |||
| ...time passes; new mail arrives... | ...time passes; new mail arrives... | |||
| S: * 4 EXISTS | S: * 4 EXISTS | |||
| C: DONE | C: DONE | |||
| S: A002 OK IDLE terminated | S: A002 OK IDLE terminated | |||
| ...another client expunges message 2 now... | ...another client expunges message 2 now... | |||
| C: A003 FETCH 4 ALL | C: A003 FETCH 4 ALL | |||
| S: * 4 FETCH (...) | S: * 4 FETCH (...) | |||
| S: A003 OK FETCH completed | S: A003 OK FETCH completed | |||
| C: A004 IDLE | C: A004 IDLE | |||
| S: * 2 EXPUNGE | S: * 2 EXPUNGE | |||
| S: * 3 EXISTS | S: * 3 EXISTS | |||
| S: + idling | S: + idling | |||
| ...time passes; another client expunges message 3... | ...time passes; another client expunges message 3... | |||
| S: * 3 EXPUNGE | S: * 3 EXPUNGE | |||
| S: * 2 EXISTS | S: * 2 EXISTS | |||
| ...time passes; new mail arrives... | ...time passes; new mail arrives... | |||
| S: * 3 EXISTS | S: * 3 EXISTS | |||
| C: DONE | C: DONE | |||
| S: A004 OK IDLE terminated | S: A004 OK IDLE terminated | |||
| C: A005 FETCH 3 ALL | C: A005 FETCH 3 ALL | |||
| S: * 3 FETCH (...) | S: * 3 FETCH (...) | |||
| S: A005 OK FETCH completed | S: A005 OK FETCH completed | |||
| C: A006 IDLE | C: A006 IDLE | |||
| 6.4. Client Commands - Selected State | 6.4. Client Commands - Selected State | |||
| In the selected state, commands that manipulate messages in a mailbox | In the selected state, commands that manipulate messages in a mailbox | |||
| are permitted. | are permitted. | |||
| In addition to the universal commands (CAPABILITY, NOOP, and LOGOUT), | In addition to the universal commands (CAPABILITY, NOOP, and LOGOUT), | |||
| and the authenticated state commands (SELECT, EXAMINE, NAMESPACE, | and the authenticated state commands (SELECT, EXAMINE, NAMESPACE, | |||
| CREATE, DELETE, RENAME, SUBSCRIBE, UNSUBSCRIBE, LIST, STATUS, and | CREATE, DELETE, RENAME, SUBSCRIBE, UNSUBSCRIBE, LIST, STATUS, and | |||
| APPEND), the following commands are valid in the selected state: | APPEND), the following commands are valid in the selected state: | |||
| skipping to change at page 91, line 30 ¶ | skipping to change at page 93, line 30 ¶ | |||
| 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 can also return an unsolicited CLOSED response code | The server MAY also return an unsolicited CLOSED response code | |||
| when it wants to force the client to return to authenticated | when it wants to force the client to return to authenticated | |||
| state. For example, the server can do that when the mailbox | state. For example, the server can do that when the mailbox | |||
| requires repairs or is deleted in another session. | 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" | |||
| skipping to change at page 123, line 32 ¶ | skipping to change at page 125, line 32 ¶ | |||
| (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' Namespace(s) | ; The second Namespace is the Other Users' | |||
| ; The third Namespace is the Shared Namespace(s) | ; Namespace(s). | |||
| ; The third Namespace is the Shared Namespace(s). | ||||
| nil = "NIL" | nil = "NIL" | |||
| nstring = string / nil | nstring = string / nil | |||
| number = 1*DIGIT | number = 1*DIGIT | |||
| ; Unsigned 32-bit integer | ; Unsigned 32-bit integer | |||
| ; (0 <= n < 4,294,967,296) | ; (0 <= n < 4,294,967,296) | |||
| number64 = 1*DIGIT | number64 = 1*DIGIT | |||
| skipping to change at page 125, line 42 ¶ | skipping to change at page 127, line 42 ¶ | |||
| "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" / | "NONEXISTENT" / | |||
| "CLOSED" / | "CLOSED" / | |||
| "UNKNOWN-CTE" / | "UNKNOWN-CTE" / | |||
| atom [SP 1*<any TEXT-CHAR except "]">] | atom [SP 1*<any TEXT-CHAR except "]">] | |||
| return-option = "SUBSCRIBED" / "CHILDREN" / option-extension | return-option = "SUBSCRIBED" / "CHILDREN" / status-option / | |||
| option-extension | ||||
| search = "SEARCH" [search-return-opts] | search = "SEARCH" [search-return-opts] | |||
| SP search-program | SP search-program | |||
| search-correlator = SP "(" "TAG" SP tag-string ")" | search-correlator = SP "(" "TAG" SP tag-string ")" | |||
| search-key = "ALL" / "ANSWERED" / "BCC" SP astring / | search-key = "ALL" / "ANSWERED" / "BCC" SP astring / | |||
| "BEFORE" SP date / "BODY" SP astring / | "BEFORE" SP date / "BODY" SP astring / | |||
| "CC" SP astring / "DELETED" / "FLAGGED" / | "CC" SP astring / "DELETED" / "FLAGGED" / | |||
| "FROM" SP astring / "KEYWORD" SP flag-keyword / | "FROM" SP astring / "KEYWORD" SP flag-keyword / | |||
| skipping to change at page 128, line 40 ¶ | skipping to change at page 130, line 40 ¶ | |||
| ("UNSEEN" SP number) / | ("UNSEEN" SP number) / | |||
| ("DELETED" SP number) / | ("DELETED" SP number) / | |||
| ("SIZE" SP number64) | ("SIZE" SP number64) | |||
| ; Extensions to the STATUS responses | ; Extensions to the STATUS responses | |||
| ; should extend this production. | ; should extend this production. | |||
| ; Extensions should use the generic | ; Extensions should use the generic | |||
| ; syntax defined by tagged-ext. | ; syntax defined by tagged-ext. | |||
| status-att-list = status-att-val *(SP status-att-val) | status-att-list = status-att-val *(SP status-att-val) | |||
| status-option = "STATUS" SP "(" status-att *(SP status-att) ")" | ||||
| ; This ABNF production complies with | ||||
| ; <option-extension> syntax. | ||||
| store = "STORE" SP sequence-set SP store-att-flags | store = "STORE" SP sequence-set SP store-att-flags | |||
| 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 "+"> | |||
| 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 / | |||
| skipping to change at page 141, line 4 ¶ | skipping to change at page 143, line 4 ¶ | |||
| like $Phishing, $Junk, $NonJunk? | like $Phishing, $Junk, $NonJunk? | |||
| 4. Require all unsolicited FETCH updates to include UID - done. | 4. Require all unsolicited FETCH updates to include UID - done. | |||
| 5. Update recommendations on TLS ciphers to match UTA WG work (as | 5. Update recommendations on TLS ciphers to match UTA WG work (as | |||
| per RFC 8314, RFC 7525 and RFC 7817) - done. | per RFC 8314, RFC 7525 and RFC 7817) - done. | |||
| 6. Possibly fold in the following extensions/RFC: Base LIST- | 6. Possibly fold in the following extensions/RFC: Base LIST- | |||
| EXTENDED syntax plus deprecate LSUB (replace it with LIST | EXTENDED syntax plus deprecate LSUB (replace it with LIST | |||
| \Subscribed) minus the requirement to support multiple list | \Subscribed) minus the requirement to support multiple list | |||
| patterns, STATUS-in-LIST, SEARCHRES, BINARY (only the FETCH | patterns - done, STATUS-in-LIST - done, SEARCHRES, BINARY (only | |||
| changes on leaf body part and make APPEND related ones optional. | the FETCH changes on leaf body part and make APPEND related ones | |||
| See the mailing list discussion) - done. | optional. See the mailing list discussion) - done. | |||
| 6. | 6. | |||
| 7. Add STATUS SIZE (total mailbox size) - done. Add STATUS DELETED | 7. Add STATUS SIZE (total mailbox size) - done. Add STATUS DELETED | |||
| (number of messages with \Deleted flag set) - done. | (number of messages with \Deleted flag set) - done. | |||
| 8. Drop UTF-7, all mailboxes are always in UTF-8 - done. | 8. Drop UTF-7, all mailboxes are always in UTF-8 - done. | |||
| 9. Revise IANA registration of IMAP extensions and give advice on | 9. Revise IANA registration of IMAP extensions and give advice on | |||
| use of "X-" convention. | use of "X-" convention. | |||
| 10. Allow word-based searching (as per Chris Newman)? Need to | 10. Allow word-based searching (as per Chris Newman)? Need to | |||
| discuss header field search, where exact/substring match is | discuss header field search, where exact/substring match is | |||
| still required for interoperability. | still required for interoperability. | |||
| The following changes since RFC 3501 were done so far: | The following changes since RFC 3501 were done so far: | |||
| 1. Folded in IMAP UNSELECT (RFC 3691), UIDPLUS (RFC 4315), ESEARCH | 1. Folded in IMAP UNSELECT (RFC 3691), UIDPLUS (RFC 4315), ESEARCH | |||
| (RFC 4731), ENABLE (RFC 5161), IDLE (RFC 2177), SASL-IR (RFC | (RFC 4731), ENABLE (RFC 5161), IDLE (RFC 2177), SASL-IR (RFC | |||
| 4959) and MOVE (RFC 6851) extensions. Also folded RFC 5530 and | 4959), LIST-STATUS (RFC 5819) and MOVE (RFC 6851) extensions. | |||
| FETCH side of the BINARY extension (RFC 3516). | Also folded RFC 5530 and FETCH side of the 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. | 4. Added CLOSED response code from RFC 7162. SELECT/EXAMINE when a | |||
| mailbox is already selected now require for the CLOSED response | ||||
| code to be returned. | ||||
| 5. Updated to use modern TLS-related recommendations as per RFC | 5. 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 | 6. 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 | 7. Added SHOULD level requirement on IMAP servers to support | |||
| $MDNSent and $Forwarded keywords. | $MDNSent and $Forwarded keywords. | |||
| skipping to change at page 142, line 28 ¶ | skipping to change at page 144, line 32 ¶ | |||
| variants instead. | variants instead. | |||
| 15. Replaced DIGEST-MD5 SASL mechanism with SCRAM-SHA-256. DIGEST- | 15. 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 | 16. 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. | 17. resp-text ABNF non terminal was updated to allow for empty text. | |||
| 18. IDLE command can now return no mailbox related updates. | 18. IDLE command can now return updates not related to the currently | |||
| selected mailbox state. | ||||
| Appendix D. Acknowledgement | Appendix D. 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 6154 (by Jamie | Gulbrandsen), RFC 5530 (by Arnt Gulbrandsen), RFC 5819 (by Timo | |||
| Nicolson) | Sirainen), RFC 6154 (by Jamie Nicolson) | |||
| so work done by authors/editors of these documents is appreciated. | so work done by authors/editors of these documents is appreciated. | |||
| Note that editors of this document were redacted from the above list. | ||||
| Index | Index | |||
| $ | $ | |||
| $Forwarded (predefined flag) 12 | $Forwarded (predefined flag) 12 | |||
| $MDNSent (predefined flag) 12 | $MDNSent (predefined flag) 12 | |||
| + | + | |||
| +FLAGS <flag list> 81 | +FLAGS <flag list> 83 | |||
| +FLAGS.SILENT <flag list> 81 | +FLAGS.SILENT <flag list> 83 | |||
| - | - | |||
| -FLAGS <flag list> 81 | -FLAGS <flag list> 83 | |||
| -FLAGS.SILENT <flag list> 81 | -FLAGS.SILENT <flag list> 83 | |||
| A | A | |||
| ALERT (response code) 88 | ALERT (response code) 90 | |||
| ALL (fetch item) 77 | ALL (fetch item) 79 | |||
| ALL (search key) 73 | ALL (search key) 75 | |||
| ALL (search result option) 72 | ALL (search result option) 74 | |||
| ALREADYEXISTS (response code) 88 | ALREADYEXISTS (response code) 90 | |||
| ANSWERED (search key) 73 | ANSWERED (search key) 75 | |||
| APPEND (command) 64 | APPEND (command) 66 | |||
| APPENDUID (response code) 89 | APPENDUID (response code) 91 | |||
| AUTHENTICATE (command) 28 | AUTHENTICATE (command) 28 | |||
| AUTHENTICATIONFAILED (response code) 89 | AUTHENTICATIONFAILED (response code) 91 | |||
| AUTHORIZATIONFAILED (response code) 90 | AUTHORIZATIONFAILED (response code) 92 | |||
| B | B | |||
| BAD (response) 97 | BAD (response) 99 | |||
| BADCHARSET (response code) 90 | BADCHARSET (response code) 92 | |||
| BCC <string> (search key) 74 | BCC <string> (search key) 76 | |||
| BEFORE <date> (search key) 74 | BEFORE <date> (search key) 76 | |||
| BINARY.PEEK[<section-binary>]<<partial>> (fetch item) 78 | BINARY.PEEK[<section-binary>]<<partial>> (fetch item) 80 | |||
| BINARY.SIZE[<section-binary>] (fetch item) 78 | BINARY.SIZE[<section-binary>] (fetch item) 80 | |||
| BINARY.SIZE[<section-binary>] (fetch result) 107 | BINARY.SIZE[<section-binary>] (fetch result) 109 | |||
| BINARY[<section-binary>]<<number>> (fetch result) 106 | BINARY[<section-binary>]<<number>> (fetch result) 108 | |||
| BINARY[<section-binary>]<<partial>> (fetch item) 77 | BINARY[<section-binary>]<<partial>> (fetch item) 79 | |||
| BODY (fetch item) 78 | BODY (fetch item) 80 | |||
| BODY (fetch result) 107 | BODY (fetch result) 109 | |||
| BODY <string> (search key) 74 | BODY <string> (search key) 76 | |||
| BODY.PEEK[<section>]<<partial>> (fetch item) 80 | BODY.PEEK[<section>]<<partial>> (fetch item) 82 | |||
| BODYSTRUCTURE (fetch item) 80 | BODYSTRUCTURE (fetch item) 82 | |||
| BODYSTRUCTURE (fetch result) 108 | BODYSTRUCTURE (fetch result) 110 | |||
| BODY[<section>]<<origin octet>> (fetch result) 107 | BODY[<section>]<<origin octet>> (fetch result) 109 | |||
| BODY[<section>]<<partial>> (fetch item) 78 | BODY[<section>]<<partial>> (fetch item) 80 | |||
| BYE (response) 98 | BYE (response) 100 | |||
| Body Structure (message attribute) 13 | Body Structure (message attribute) 13 | |||
| C | C | |||
| CANNOT (response code) 90 | CANNOT (response code) 92 | |||
| CAPABILITY (command) 24 | CAPABILITY (command) 24 | |||
| CAPABILITY (response code) 90 | CAPABILITY (response code) 92 | |||
| CAPABILITY (response) 99 | CAPABILITY (response) 101 | |||
| CC <string> (search key) 74 | CC <string> (search key) 76 | |||
| CLIENTBUG (response code) 90 | CLIENTBUG (response code) 92 | |||
| CLOSE (command) 69 | CLOSE (command) 71 | |||
| CLOSED (response code) 91 | CLOSED (response code) 93 | |||
| CONTACTADMIN (response code) 91 | CONTACTADMIN (response code) 93 | |||
| COPY (command) 82 | COPY (command) 84 | |||
| COPYUID (response code) 91 | COPYUID (response code) 93 | |||
| CORRUPTION (response code) 92 | CORRUPTION (response code) 94 | |||
| COUNT (search result option) 72 | COUNT (search result option) 74 | |||
| CREATE (command) 36 | CREATE (command) 37 | |||
| D | D | |||
| DELETE (command) 37 | DELETE (command) 38 | |||
| DELETED (search key) 74 | DELETED (search key) 76 | |||
| DELETED (status item) 64 | DELETED (status item) 66 | |||
| DRAFT (search key) 74 | DRAFT (search key) 76 | |||
| E | E | |||
| ENABLE (command) 32 | ENABLE (command) 32 | |||
| ENVELOPE (fetch item) 80 | ENVELOPE (fetch item) 82 | |||
| ENVELOPE (fetch result) 110 | ENVELOPE (fetch result) 112 | |||
| ESEARCH (response) 104 | ESEARCH (response) 106 | |||
| EXAMINE (command) 35 | EXAMINE (command) 36 | |||
| EXPIRED (response code) 92 | EXPIRED (response code) 94 | |||
| EXPUNGE (command) 70 | EXPUNGE (command) 72 | |||
| EXPUNGE (response) 105 | EXPUNGE (response) 107 | |||
| EXPUNGEISSUED (response code) 92 | EXPUNGEISSUED (response code) 94 | |||
| Envelope Structure (message attribute) 13 | Envelope Structure (message attribute) 13 | |||
| F | F | |||
| FAST (fetch item) 77 | FAST (fetch item) 79 | |||
| FETCH (command) 77 | FETCH (command) 79 | |||
| FETCH (response) 106 | FETCH (response) 108 | |||
| FLAGGED (search key) 74 | FLAGGED (search key) 76 | |||
| FLAGS (fetch item) 80 | FLAGS (fetch item) 82 | |||
| FLAGS (fetch result) 111 | FLAGS (fetch result) 113 | |||
| FLAGS (response) 104 | FLAGS (response) 106 | |||
| FLAGS <flag list> (store command data item) 81 | FLAGS <flag list> (store command data item) 83 | |||
| FLAGS.SILENT <flag list> (store command data item) 81 | FLAGS.SILENT <flag list> (store command data item) 83 | |||
| FROM <string> (search key) 74 | FROM <string> (search key) 76 | |||
| FULL (fetch item) 77 | FULL (fetch item) 79 | |||
| Flags (message attribute) 11 | Flags (message attribute) 11 | |||
| H | H | |||
| HEADER (part specifier) 78 | HEADER (part specifier) 80 | |||
| HEADER <field-name> <string> (search key) 74 | HEADER <field-name> <string> (search key) 76 | |||
| HEADER.FIELDS (part specifier) 78 | HEADER.FIELDS (part specifier) 80 | |||
| HEADER.FIELDS.NOT (part specifier) 78 | HEADER.FIELDS.NOT (part specifier) 80 | |||
| I | I | |||
| IDLE (command) 67 | IDLE (command) 69 | |||
| INTERNALDATE (fetch item) 80 | INTERNALDATE (fetch item) 82 | |||
| INTERNALDATE (fetch result) 111 | INTERNALDATE (fetch result) 113 | |||
| INUSE (response code) 92 | INUSE (response code) 94 | |||
| Internal Date (message attribute) 12 | Internal Date (message attribute) 12 | |||
| K | K | |||
| KEYWORD <flag> (search key) 74 | KEYWORD <flag> (search key) 76 | |||
| Keyword (type of flag) 12 | Keyword (type of flag) 12 | |||
| L | L | |||
| LARGER <n> (search key) 74 | LARGER <n> (search key) 76 | |||
| LIMIT (response code) 93 | LIMIT (response code) 95 | |||
| LIST (command) 41 | LIST (command) 42 | |||
| LIST (response) 100 | LIST (response) 102 | |||
| LOGOUT (command) 26 | LOGOUT (command) 26 | |||
| M | M | |||
| MAX (search result option) 72 | MAX (search result option) 74 | |||
| MAY (specification requirement term) 5 | MAY (specification requirement term) 5 | |||
| MESSAGES (status item) 64 | MESSAGES (status item) 66 | |||
| MIME (part specifier) 79 | MIME (part specifier) 81 | |||
| MIN (search result option) 72 | MIN (search result option) 74 | |||
| MOVE (command) 83 | MOVE (command) 85 | |||
| 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) 58 | NAMESPACE (command) 60 | |||
| NAMESPACE (response) 103 | NAMESPACE (response) 105 | |||
| NO (response) 96 | NO (response) 98 | |||
| NONEXISTENT (response code) 93 | NONEXISTENT (response code) 95 | |||
| NOOP (command) 25 | NOOP (command) 25 | |||
| NOPERM (response code) 93 | NOPERM (response code) 95 | |||
| NOT <search-key> (search key) 74 | NOT <search-key> (search key) 76 | |||
| NOT RECOMMENDED (specification requirement term) 5 | NOT RECOMMENDED (specification requirement term) 5 | |||
| O | O | |||
| OK (response) 96 | OK (response) 98 | |||
| ON <date> (search key) 74 | ON <date> (search key) 76 | |||
| OPTIONAL (specification requirement term) 5 | OPTIONAL (specification requirement term) 5 | |||
| OR <search-key1> <search-key2> (search key) 74 | OR <search-key1> <search-key2> (search key) 76 | |||
| OVERQUOTA (response code) 93 | OVERQUOTA (response code) 95 | |||
| P | P | |||
| PARSE (response code) 94 | PARSE (response code) 96 | |||
| PERMANENTFLAGS (response code) 94 | PERMANENTFLAGS (response code) 96 | |||
| PREAUTH (response) 97 | PREAUTH (response) 99 | |||
| PRIVACYREQUIRED (response code) 94 | PRIVACYREQUIRED (response code) 96 | |||
| Permanent Flag (class of flag) 12 | Permanent Flag (class of flag) 12 | |||
| Predefined keywords 12 | Predefined keywords 12 | |||
| R | R | |||
| READ-ONLY (response code) 94 | READ-ONLY (response code) 96 | |||
| READ-WRITE (response code) 95 | READ-WRITE (response code) 97 | |||
| RECOMMENDED (specification requirement term) 5 | RECOMMENDED (specification requirement term) 5 | |||
| RENAME (command) 39 | RENAME (command) 39 | |||
| REQUIRED (specification requirement term) 5 | REQUIRED (specification requirement term) 5 | |||
| RFC822.SIZE (fetch item) 80 | RFC822.SIZE (fetch item) 82 | |||
| RFC822.SIZE (fetch result) 112 | RFC822.SIZE (fetch result) 114 | |||
| S | S | |||
| SEARCH (command) 71 | SEARCH (command) 73 | |||
| SEEN (search key) 75 | SEEN (search key) 77 | |||
| SELECT (command) 34 | SELECT (command) 34 | |||
| SENTBEFORE <date> (search key) 75 | SENTBEFORE <date> (search key) 77 | |||
| SENTON <date> (search key) 75 | SENTON <date> (search key) 77 | |||
| SENTSINCE <date> (search key) 75 | SENTSINCE <date> (search key) 77 | |||
| SERVERBUG (response code) 95 | SERVERBUG (response code) 97 | |||
| 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) 75 | SINCE <date> (search key) 77 | |||
| SIZE (status item) 64 | SIZE (status item) 66 | |||
| SMALLER <n> (search key) 75 | SMALLER <n> (search key) 77 | |||
| STARTTLS (command) 27 | STARTTLS (command) 27 | |||
| STATUS (command) 63 | STATUS (command) 65 | |||
| STATUS (response) 103 | STATUS (response) 105 | |||
| STORE (command) 81 | STORE (command) 83 | |||
| SUBJECT <string> (search key) 75 | SUBJECT <string> (search key) 77 | |||
| SUBSCRIBE (command) 40 | SUBSCRIBE (command) 41 | |||
| Session Flag (class of flag) 12 | Session Flag (class of flag) 12 | |||
| System Flag (type of flag) 11 | System Flag (type of flag) 11 | |||
| T | T | |||
| TEXT (part specifier) 78 | TEXT (part specifier) 80 | |||
| TEXT <string> (search key) 75 | TEXT <string> (search key) 77 | |||
| TO <string> (search key) 75 | TO <string> (search key) 77 | |||
| TRYCREATE (response code) 95 | TRYCREATE (response code) 97 | |||
| U | U | |||
| UID (command) 85 | UID (command) 87 | |||
| UID (fetch item) 80 | UID (fetch item) 82 | |||
| UID (fetch result) 112 | UID (fetch result) 114 | |||
| UID <sequence set> (search key) 75 | UID <sequence set> (search key) 77 | |||
| UIDNEXT (response code) 95 | UIDNEXT (response code) 97 | |||
| UIDNEXT (status item) 64 | UIDNEXT (status item) 66 | |||
| UIDNOTSTICKY (response code) 95 | UIDNOTSTICKY (response code) 97 | |||
| UIDVALIDITY (response code) 95 | UIDVALIDITY (response code) 97 | |||
| UIDVALIDITY (status item) 64 | UIDVALIDITY (status item) 66 | |||
| UNANSWERED (search key) 75 | UNANSWERED (search key) 77 | |||
| UNAVAILABLE (response code) 96 | UNAVAILABLE (response code) 98 | |||
| UNDELETED (search key) 75 | UNDELETED (search key) 77 | |||
| UNDRAFT (search key) 75 | UNDRAFT (search key) 77 | |||
| UNFLAGGED (search key) 75 | UNFLAGGED (search key) 77 | |||
| UNKEYWORD <flag> (search key) 75 | UNKEYWORD <flag> (search key) 77 | |||
| UNKNOWN-CTE (response code) 96 | UNKNOWN-CTE (response code) 98 | |||
| UNSEEN (search key) 75 | UNSEEN (search key) 77 | |||
| UNSEEN (status item) 64 | UNSEEN (status item) 66 | |||
| UNSELECT (command) 70 | UNSELECT (command) 72 | |||
| UNSUBSCRIBE (command) 41 | UNSUBSCRIBE (command) 42 | |||
| Unique Identifier (UID) (message attribute) 9 | Unique Identifier (UID) (message attribute) 9 | |||
| X | X | |||
| X<atom> (command) 86 | X<atom> (command) 88 | |||
| [ | [ | |||
| [RFC-5322] Size (message attribute) 13 | [RFC-5322] Size (message attribute) 13 | |||
| \ | \ | |||
| \All (mailbox name attribute) 101 | \All (mailbox name attribute) 103 | |||
| \Answered (system flag) 11 | \Answered (system flag) 11 | |||
| \Archive (mailbox name attribute) 102 | \Archive (mailbox name attribute) 104 | |||
| \Deleted (system flag) 12 | \Deleted (system flag) 12 | |||
| \Draft (system flag) 12 | \Draft (system flag) 12 | |||
| \Drafts (mailbox name attribute) 102 | \Drafts (mailbox name attribute) 104 | |||
| \Flagged (mailbox name attribute) 102 | \Flagged (mailbox name attribute) 104 | |||
| \Flagged (system flag) 11 | \Flagged (system flag) 11 | |||
| \HasChildren (mailbox name attribute) 100 | \HasChildren (mailbox name attribute) 102 | |||
| \HasNoChildren (mailbox name attribute) 101 | \HasNoChildren (mailbox name attribute) 103 | |||
| \Junk (mailbox name attribute) 102 | \Junk (mailbox name attribute) 104 | |||
| \Marked (mailbox name attribute) 101 | \Marked (mailbox name attribute) 103 | |||
| \Noinferiors (mailbox name attribute) 100 | \Noinferiors (mailbox name attribute) 102 | |||
| \NonExistent (mailbox name attribute) 100 | \NonExistent (mailbox name attribute) 102 | |||
| \Noselect (mailbox name attribute) 100 | \Noselect (mailbox name attribute) 102 | |||
| \Recent (system flag) 12 | \Recent (system flag) 12 | |||
| \Remote (mailbox name attribute) 101 | \Remote (mailbox name attribute) 103 | |||
| \Seen (system flag) 11 | \Seen (system flag) 11 | |||
| \Sent (mailbox name attribute) 102 | \Sent (mailbox name attribute) 104 | |||
| \Subscribed (mailbox name attribute) 101 | \Subscribed (mailbox name attribute) 103 | |||
| \Trash (mailbox name attribute) 102 | \Trash (mailbox name attribute) 104 | |||
| \Unmarked (mailbox name attribute) 101 | \Unmarked (mailbox name attribute) 103 | |||
| 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. 71 change blocks. | ||||
| 311 lines changed or deleted | 386 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/ | ||||