| < draft-ietf-extra-imap4rev2-06.txt | draft-ietf-extra-imap4rev2-07.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: April 29, 2020 October 27, 2019 | Expires: May 7, 2020 November 4, 2019 | |||
| INTERNET MESSAGE ACCESS PROTOCOL - VERSION 4rev2 | INTERNET MESSAGE ACCESS PROTOCOL - VERSION 4rev2 | |||
| draft-ietf-extra-imap4rev2-06 | draft-ietf-extra-imap4rev2-07 | |||
| 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 April 29, 2020. | This Internet-Draft will expire on May 7, 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 42 ¶ | skipping to change at page 3, line 42 ¶ | |||
| 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 . . . . . . . . . . . . . . . . . . . 35 | |||
| 6.3.4. CREATE Command . . . . . . . . . . . . . . . . . . . 36 | 6.3.4. CREATE Command . . . . . . . . . . . . . . . . . . . 36 | |||
| 6.3.5. DELETE Command . . . . . . . . . . . . . . . . . . . 37 | 6.3.5. DELETE Command . . . . . . . . . . . . . . . . . . . 37 | |||
| 6.3.6. RENAME Command . . . . . . . . . . . . . . . . . . . 38 | 6.3.6. RENAME Command . . . . . . . . . . . . . . . . . . . 38 | |||
| 6.3.7. SUBSCRIBE Command . . . . . . . . . . . . . . . . . . 40 | 6.3.7. SUBSCRIBE Command . . . . . . . . . . . . . . . . . . 40 | |||
| 6.3.8. UNSUBSCRIBE Command . . . . . . . . . . . . . . . . . 41 | 6.3.8. UNSUBSCRIBE Command . . . . . . . . . . . . . . . . . 41 | |||
| 6.3.9. LIST Command . . . . . . . . . . . . . . . . . . . . 41 | 6.3.9. LIST Command . . . . . . . . . . . . . . . . . . . . 41 | |||
| 6.3.10. LSUB Command . . . . . . . . . . . . . . . . . . . . 58 | 6.3.10. NAMESPACE Command . . . . . . . . . . . . . . . . . . 57 | |||
| 6.3.11. NAMESPACE Command . . . . . . . . . . . . . . . . . . 59 | 6.3.11. STATUS Command . . . . . . . . . . . . . . . . . . . 62 | |||
| 6.3.12. STATUS Command . . . . . . . . . . . . . . . . . . . 63 | 6.3.12. APPEND Command . . . . . . . . . . . . . . . . . . . 63 | |||
| 6.3.13. APPEND Command . . . . . . . . . . . . . . . . . . . 65 | 6.3.13. IDLE Command . . . . . . . . . . . . . . . . . . . . 66 | |||
| 6.3.14. IDLE Command . . . . . . . . . . . . . . . . . . . . 67 | 6.4. Client Commands - Selected State . . . . . . . . . . . . 68 | |||
| 6.4. Client Commands - Selected State . . . . . . . . . . . . 69 | 6.4.1. CLOSE Command . . . . . . . . . . . . . . . . . . . . 68 | |||
| 6.4.1. CLOSE Command . . . . . . . . . . . . . . . . . . . . 69 | 6.4.2. UNSELECT Command . . . . . . . . . . . . . . . . . . 68 | |||
| 6.4.2. UNSELECT Command . . . . . . . . . . . . . . . . . . 70 | 6.4.3. EXPUNGE Command . . . . . . . . . . . . . . . . . . . 69 | |||
| 6.4.3. EXPUNGE Command . . . . . . . . . . . . . . . . . . . 70 | 6.4.4. SEARCH Command . . . . . . . . . . . . . . . . . . . 69 | |||
| 6.4.4. SEARCH Command . . . . . . . . . . . . . . . . . . . 71 | 6.4.5. FETCH Command . . . . . . . . . . . . . . . . . . . . 75 | |||
| 6.4.5. FETCH Command . . . . . . . . . . . . . . . . . . . . 77 | 6.4.6. STORE Command . . . . . . . . . . . . . . . . . . . . 79 | |||
| 6.4.6. STORE Command . . . . . . . . . . . . . . . . . . . . 81 | 6.4.7. COPY Command . . . . . . . . . . . . . . . . . . . . 80 | |||
| 6.4.7. COPY Command . . . . . . . . . . . . . . . . . . . . 82 | 6.4.8. MOVE Command . . . . . . . . . . . . . . . . . . . . 81 | |||
| 6.4.8. MOVE Command . . . . . . . . . . . . . . . . . . . . 83 | 6.4.9. UID Command . . . . . . . . . . . . . . . . . . . . . 83 | |||
| 6.4.9. UID Command . . . . . . . . . . . . . . . . . . . . . 85 | 6.5. Client Commands - Experimental/Expansion . . . . . . . . 85 | |||
| 6.5. Client Commands - Experimental/Expansion . . . . . . . . 87 | 6.5.1. X<atom> Command . . . . . . . . . . . . . . . . . . . 85 | |||
| 6.5.1. X<atom> Command . . . . . . . . . . . . . . . . . . . 87 | 7. Server Responses . . . . . . . . . . . . . . . . . . . . . . 85 | |||
| 7. Server Responses . . . . . . . . . . . . . . . . . . . . . . 87 | 7.1. Server Responses - Status Responses . . . . . . . . . . . 86 | |||
| 7.1. Server Responses - Status Responses . . . . . . . . . . . 88 | 7.1.1. OK Response . . . . . . . . . . . . . . . . . . . . . 94 | |||
| 7.1.1. OK Response . . . . . . . . . . . . . . . . . . . . . 96 | 7.1.2. NO Response . . . . . . . . . . . . . . . . . . . . . 94 | |||
| 7.1.2. NO Response . . . . . . . . . . . . . . . . . . . . . 96 | 7.1.3. BAD Response . . . . . . . . . . . . . . . . . . . . 95 | |||
| 7.1.3. BAD Response . . . . . . . . . . . . . . . . . . . . 97 | 7.1.4. PREAUTH Response . . . . . . . . . . . . . . . . . . 95 | |||
| 7.1.4. PREAUTH Response . . . . . . . . . . . . . . . . . . 97 | 7.1.5. BYE Response . . . . . . . . . . . . . . . . . . . . 95 | |||
| 7.1.5. BYE Response . . . . . . . . . . . . . . . . . . . . 97 | 7.2. Server Responses - Server and Mailbox Status . . . . . . 96 | |||
| 7.2. Server Responses - Server and Mailbox Status . . . . . . 98 | 7.2.1. The ENABLED Response . . . . . . . . . . . . . . . . 96 | |||
| 7.2.1. The ENABLED Response . . . . . . . . . . . . . . . . 98 | 7.2.2. CAPABILITY Response . . . . . . . . . . . . . . . . . 96 | |||
| 7.2.2. CAPABILITY Response . . . . . . . . . . . . . . . . . 98 | 7.2.3. LIST Response . . . . . . . . . . . . . . . . . . . . 97 | |||
| 7.2.3. LIST Response . . . . . . . . . . . . . . . . . . . . 99 | 7.2.4. NAMESPACE Response . . . . . . . . . . . . . . . . . 101 | |||
| 7.2.4. LSUB Response . . . . . . . . . . . . . . . . . . . . 102 | 7.2.5. STATUS Response . . . . . . . . . . . . . . . . . . . 101 | |||
| 7.2.5. NAMESPACE Response . . . . . . . . . . . . . . . . . 102 | 7.2.6. ESEARCH Response . . . . . . . . . . . . . . . . . . 101 | |||
| 7.2.6. STATUS Response . . . . . . . . . . . . . . . . . . . 103 | 7.2.7. FLAGS Response . . . . . . . . . . . . . . . . . . . 102 | |||
| 7.2.7. ESEARCH Response . . . . . . . . . . . . . . . . . . 103 | 7.3. Server Responses - Mailbox Size . . . . . . . . . . . . . 102 | |||
| 7.2.8. FLAGS Response . . . . . . . . . . . . . . . . . . . 104 | 7.3.1. EXISTS Response . . . . . . . . . . . . . . . . . . . 102 | |||
| 7.3. Server Responses - Mailbox Size . . . . . . . . . . . . . 104 | 7.4. Server Responses - Message Status . . . . . . . . . . . . 103 | |||
| 7.3.1. EXISTS Response . . . . . . . . . . . . . . . . . . . 104 | 7.4.1. EXPUNGE Response . . . . . . . . . . . . . . . . . . 103 | |||
| 7.4. Server Responses - Message Status . . . . . . . . . . . . 104 | 7.4.2. FETCH Response . . . . . . . . . . . . . . . . . . . 104 | |||
| 7.4.1. EXPUNGE Response . . . . . . . . . . . . . . . . . . 104 | 7.5. Server Responses - Command Continuation Request . . . . . 109 | |||
| 7.4.2. FETCH Response . . . . . . . . . . . . . . . . . . . 105 | 8. Sample IMAP4rev2 connection . . . . . . . . . . . . . . . . . 110 | |||
| 7.5. Server Responses - Command Continuation Request . . . . . 111 | 9. Formal Syntax . . . . . . . . . . . . . . . . . . . . . . . . 111 | |||
| 8. Sample IMAP4rev2 connection . . . . . . . . . . . . . . . . . 112 | ||||
| 9. Formal Syntax . . . . . . . . . . . . . . . . . . . . . . . . 113 | ||||
| 10. Author's Note . . . . . . . . . . . . . . . . . . . . . . . . 128 | 10. Author's Note . . . . . . . . . . . . . . . . . . . . . . . . 128 | |||
| 11. Security Considerations . . . . . . . . . . . . . . . . . . . 128 | 11. Security Considerations . . . . . . . . . . . . . . . . . . . 128 | |||
| 11.1. STARTTLS Security Considerations . . . . . . . . . . . . 128 | 11.1. STARTTLS Security Considerations . . . . . . . . . . . . 128 | |||
| 11.2. COPYUID and APPENDUID response codes . . . . . . . . . . 129 | 11.2. COPYUID and APPENDUID response codes . . . . . . . . . . 129 | |||
| 11.3. LIST command and Other Users' namespace . . . . . . . . 129 | 11.3. LIST command and Other Users' namespace . . . . . . . . 129 | |||
| 11.4. Other Security Considerations . . . . . . . . . . . . . 129 | 11.4. Other Security Considerations . . . . . . . . . . . . . 129 | |||
| 12. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 130 | 12. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 130 | |||
| 12.1. Updates to IMAP4 Capabilities registry . . . . . . . . . 130 | 12.1. Updates to IMAP4 Capabilities registry . . . . . . . . . 130 | |||
| 12.2. GSSAPI/SASL service name . . . . . . . . . . . . . . . . 131 | 12.2. GSSAPI/SASL service name . . . . . . . . . . . . . . . . 131 | |||
| 13. References . . . . . . . . . . . . . . . . . . . . . . . . . 131 | 13. References . . . . . . . . . . . . . . . . . . . . . . . . . 131 | |||
| 13.1. Normative References . . . . . . . . . . . . . . . . . . 131 | 13.1. Normative References . . . . . . . . . . . . . . . . . . 131 | |||
| 13.2. Informative References (related protocols) . . . . . . . 134 | 13.2. Informative References (related protocols) . . . . . . . 134 | |||
| 13.3. Informative References (historical aspects of IMAP and | 13.3. Informative References (historical aspects of IMAP and | |||
| related protocols) . . . . . . . . . . . . . . . . . . . 135 | related protocols) . . . . . . . . . . . . . . . . . . . 135 | |||
| Appendix A. Backward compatibility with IMAP4rev1 . . . . . . . 136 | Appendix A. Backward compatibility with IMAP4rev1 . . . . . . . 136 | |||
| A.1. Mailbox International Naming Convention . . . . . . . . . 136 | A.1. Mailbox International Naming Convention for compatibility | |||
| with IMAP4rev1 . . . . . . . . . . . . . . . . . . . . . 136 | ||||
| Appendix B. Backward compatibility with BINARY extension . . . . 138 | Appendix B. Backward compatibility with BINARY extension . . . . 138 | |||
| Appendix C. Changes from RFC 3501 / IMAP4rev1 . . . . . . . . . 138 | Appendix C. Changes from RFC 3501 / IMAP4rev1 . . . . . . . . . 138 | |||
| Appendix D. Acknowledgement . . . . . . . . . . . . . . . . . . 140 | Appendix D. Acknowledgement . . . . . . . . . . . . . . . . . . 140 | |||
| Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140 | Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 145 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 146 | |||
| 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 19, line 35 ¶ | skipping to change at page 19, line 35 ¶ | |||
| 5. Operational Considerations | 5. Operational Considerations | |||
| The following rules are listed here to ensure that all IMAP4rev2 | The following rules are listed here to ensure that all IMAP4rev2 | |||
| implementations interoperate properly. | implementations interoperate properly. | |||
| 5.1. Mailbox Naming | 5.1. Mailbox Naming | |||
| In IMAP4rev2, Mailbox names are encoded in Net-Unicode [NET-UNICODE] | In IMAP4rev2, Mailbox names are encoded in Net-Unicode [NET-UNICODE] | |||
| (this differs from IMAP4rev1). Client implementations MAY attempt to | (this differs from IMAP4rev1). Client implementations MAY attempt to | |||
| create Net-Unicode mailbox names, and MUST interpret any 8-bit | create Net-Unicode mailbox names, and MUST interpret any 8-bit | |||
| mailbox names returned by LIST or LSUB as [NET-UNICODE]. Server | mailbox names returned by LIST as [NET-UNICODE]. Server | |||
| implementations MUST prohibit the creation of 8-bit mailbox names | implementations MUST prohibit the creation of 8-bit mailbox names | |||
| that do not comply with Net-Unicode (however, servers MAY accept a | that do not comply with Net-Unicode (however, servers MAY accept a | |||
| de-normalized UTF-8 mailbox name and convert it to Net-Unicode prior | de-normalized UTF-8 mailbox name and convert it to Net-Unicode prior | |||
| to mailbox creation). | to mailbox creation). | |||
| The case-insensitive mailbox name INBOX is a special name reserved to | The case-insensitive mailbox name INBOX is a special name reserved to | |||
| mean "the primary mailbox for this user on this server". (Note that | mean "the primary mailbox for this user on this server". (Note that | |||
| this special name may not exist on some servers for some users.) The | this special name may not exist on some servers for some users, for | |||
| example if the user has no access to personal namespace.) The | ||||
| interpretation of all other names is implementation-dependent. | interpretation of all other names is implementation-dependent. | |||
| In particular, this specification takes no position on case | In particular, this specification takes no position on case | |||
| sensitivity in non-INBOX mailbox names. Some server implementations | sensitivity in non-INBOX mailbox names. Some server implementations | |||
| are fully case-sensitive in ASCII range; others preserve case of a | are fully case-sensitive in ASCII range; others preserve case of a | |||
| newly-created name but otherwise are case-insensitive; and yet others | newly-created name but otherwise are case-insensitive; and yet others | |||
| coerce names to a particular case. Client implementations MUST | coerce names to a particular case. Client implementations MUST | |||
| interact with any of these. | interact with any of these. | |||
| There are certain client considerations when creating a new mailbox | There are certain client considerations when creating a new mailbox | |||
| skipping to change at page 20, line 18 ¶ | skipping to change at page 20, line 18 ¶ | |||
| 1. Any character which is one of the atom-specials (see the Formal | 1. Any character which is one of the atom-specials (see the Formal | |||
| Syntax) will require that the mailbox name be represented as a | Syntax) will require that the mailbox name be represented as a | |||
| quoted string or literal. | quoted string or literal. | |||
| 2. CTL and other non-graphic characters are difficult to represent | 2. CTL and other non-graphic characters are difficult to represent | |||
| in a user interface and are best avoided. Servers MAY refuse to | in a user interface and are best avoided. Servers MAY refuse to | |||
| create mailbox names containing Unicode CTL characters. | create mailbox names containing Unicode CTL characters. | |||
| 3. Although the list-wildcard characters ("%" and "*") are valid in | 3. Although the list-wildcard characters ("%" and "*") are valid in | |||
| a mailbox name, it is difficult to use such mailbox names with | a mailbox name, it is difficult to use such mailbox names with | |||
| the LIST and LSUB commands due to the conflict with wildcard | the LIST command due to the conflict with wildcard | |||
| interpretation. | interpretation. | |||
| 4. Usually, a character (determined by the server implementation) is | 4. Usually, a character (determined by the server implementation) is | |||
| reserved to delimit levels of hierarchy. | reserved to delimit levels of hierarchy. | |||
| 5. Two characters, "#" and "&", have meanings by convention, and | 5. Two characters, "#" and "&", have meanings by convention, and | |||
| should be avoided except when used in that convention. | should be avoided except when used in that convention. | |||
| 5.1.1. Mailbox Hierarchy Naming | 5.1.1. Mailbox Hierarchy Naming | |||
| skipping to change at page 25, line 46 ¶ | skipping to change at page 25, line 46 ¶ | |||
| Responses: no specific responses for this command (but see below) | Responses: no specific responses for this command (but see below) | |||
| Result: OK - noop completed | Result: OK - noop completed | |||
| BAD - command unknown or arguments invalid | BAD - command unknown or arguments invalid | |||
| The NOOP command always succeeds. It does nothing. | The NOOP command always succeeds. It does nothing. | |||
| Since any command can return a status update as untagged data, the | Since any command can return a status update as untagged data, the | |||
| NOOP command can be used as a periodic poll for new messages or | NOOP command can be used as a periodic poll for new messages or | |||
| message status updates during a period of inactivity (the IDLE | message status updates during a period of inactivity (the IDLE | |||
| command Section 6.3.14 should be used instead of NOOP if real-time | command Section 6.3.13 should be used instead of NOOP if real-time | |||
| updates to mailbox state are desirable). The NOOP command can also | updates to mailbox state are desirable). The NOOP command can also | |||
| be used to reset any inactivity autologout timer on the server. | be used to reset any inactivity autologout timer on the server. | |||
| Example: C: a002 NOOP | Example: C: a002 NOOP | |||
| S: a002 OK NOOP completed | S: a002 OK NOOP completed | |||
| . . . | . . . | |||
| C: a047 NOOP | C: a047 NOOP | |||
| S: * 22 EXPUNGE | S: * 22 EXPUNGE | |||
| S: * 23 EXISTS | S: * 23 EXISTS | |||
| S: * 14 FETCH (UID 1305 FLAGS (\Seen \Deleted)) | S: * 14 FETCH (UID 1305 FLAGS (\Seen \Deleted)) | |||
| skipping to change at page 32, line 5 ¶ | skipping to change at page 32, line 5 ¶ | |||
| 6.3. Client Commands - Authenticated State | 6.3. Client Commands - Authenticated State | |||
| In the authenticated state, commands that manipulate mailboxes as | In the authenticated state, commands that manipulate mailboxes as | |||
| atomic entities are permitted. Of these commands, the SELECT and | atomic entities are permitted. Of these commands, the SELECT and | |||
| EXAMINE commands will select a mailbox for access and enter the | EXAMINE commands will select a mailbox for access and enter the | |||
| selected state. | selected state. | |||
| In addition to the universal commands (CAPABILITY, NOOP, and LOGOUT), | In addition to the universal commands (CAPABILITY, NOOP, and LOGOUT), | |||
| the following commands are valid in the authenticated state: ENABLE, | the following commands are valid in the authenticated state: ENABLE, | |||
| SELECT, EXAMINE, NAMESPACE, CREATE, DELETE, RENAME, SUBSCRIBE, | SELECT, EXAMINE, NAMESPACE, CREATE, DELETE, RENAME, SUBSCRIBE, | |||
| UNSUBSCRIBE, LIST, LSUB, STATUS, APPEND and IDLE. | UNSUBSCRIBE, LIST, STATUS, APPEND and IDLE. | |||
| 6.3.1. ENABLE Command | 6.3.1. ENABLE Command | |||
| Arguments: capability names | Arguments: capability names | |||
| Responses: no specific responses for this command | Responses: no specific responses for this command | |||
| Result: OK - Relevant capabilities enabled | Result: OK - Relevant capabilities enabled | |||
| BAD - No arguments, or syntax error in an argument | BAD - No arguments, or syntax error in an argument | |||
| skipping to change at page 35, line 29 ¶ | skipping to change at page 35, line 29 ¶ | |||
| 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 | |||
| Note that IMAP4rev1 compliant servers can also send the untagged | ||||
| RECENT response which was depractated in IMAP4rev2. E.g. "* 0 | ||||
| RECENT". Pure IMAP4rev2 clients are advised to ignore the untagged | ||||
| 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 | |||
| 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 | |||
| skipping to change at page 40, line 43 ¶ | skipping to change at page 40, line 43 ¶ | |||
| Arguments: mailbox | Arguments: mailbox | |||
| Responses: no specific responses for this command | Responses: no specific responses for this command | |||
| Result: OK - subscribe completed | Result: OK - subscribe completed | |||
| NO - subscribe failure: can't subscribe to that name | NO - subscribe failure: can't subscribe to that name | |||
| BAD - command unknown or arguments invalid | BAD - command unknown or arguments invalid | |||
| The SUBSCRIBE command adds the specified mailbox name to the server's | The SUBSCRIBE command adds the specified mailbox name to the server's | |||
| set of "active" or "subscribed" mailboxes as returned by the LSUB | set of "active" or "subscribed" mailboxes as returned by the LIST | |||
| command. This command returns a tagged OK response only if the | (SUBSCRIBED) command. This command returns a tagged OK response only | |||
| subscription is successful. | if the subscription is successful. | |||
| A server MAY validate the mailbox argument to SUBSCRIBE to verify | A server MAY validate the mailbox argument to SUBSCRIBE to verify | |||
| that it exists. However, it MUST NOT unilaterally remove an existing | that it exists. However, it MUST NOT unilaterally remove an existing | |||
| mailbox name from the subscription list even if a mailbox by that | mailbox name from the subscription list even if a mailbox by that | |||
| name no longer exists. | name no longer exists. | |||
| Note: This requirement is because a server site can choose to | Note: This requirement is because a server site can choose to | |||
| routinely remove a mailbox with a well-known name (e.g., "system- | routinely remove a mailbox with a well-known name (e.g., "system- | |||
| alerts") after its contents expire, with the intention of | alerts") after its contents expire, with the intention of | |||
| recreating it when new contents are appropriate. | recreating it when new contents are appropriate. | |||
| skipping to change at page 41, line 25 ¶ | skipping to change at page 41, line 25 ¶ | |||
| Arguments: mailbox name | Arguments: mailbox name | |||
| Responses: no specific responses for this command | Responses: no specific responses for this command | |||
| Result: OK - unsubscribe completed | Result: OK - unsubscribe completed | |||
| NO - unsubscribe failure: can't unsubscribe that name | NO - unsubscribe failure: can't unsubscribe that name | |||
| BAD - command unknown or arguments invalid | BAD - command unknown or arguments invalid | |||
| The UNSUBSCRIBE command removes the specified mailbox name from the | The UNSUBSCRIBE command removes the specified mailbox name from the | |||
| server's set of "active" or "subscribed" mailboxes as returned by the | server's set of "active" or "subscribed" mailboxes as returned by the | |||
| LSUB command. This command returns a tagged OK response only if the | LIST (SUBSCRIBED) command. This command returns a tagged OK response | |||
| unsubscription is successful. | only if the unsubscription is successful. | |||
| Example: C: A002 UNSUBSCRIBE #news.comp.mail.mime | Example: C: A002 UNSUBSCRIBE #news.comp.mail.mime | |||
| S: A002 OK UNSUBSCRIBE completed | S: A002 OK UNSUBSCRIBE completed | |||
| 6.3.9. LIST Command | 6.3.9. LIST Command | |||
| Arguments (basic): reference name | Arguments (basic): reference name | |||
| mailbox name with possible wildcards | mailbox name with possible wildcards | |||
| Arguments (extended): selection options (OPTIONAL) | Arguments (extended): selection options (OPTIONAL) | |||
| reference name | reference name | |||
| mailbox patterns | mailbox patterns | |||
| return options (OPTIONAL) | return options (OPTIONAL) | |||
| Responses: untagged responses: LIST | Responses: untagged responses: LIST | |||
| Result: OK - list completed | Result: OK - list completed | |||
| NO - list failure: can't list that reference or name | NO - list failure: can't list that reference or name | |||
| BAD - command unknown or arguments invalid | BAD - command unknown or arguments invalid | |||
| THIS VERSION HAS ONLY AN INITIAL PASS AT ADDING THE EXTENDED LIST | ||||
| SYNTAX AND OPTIONS. THERE'S STILL A GOOD DEAL OR WORK TO DO ON IT, | ||||
| AND THE ABNF IS NOT THERE YET. | ||||
| The LIST command returns a subset of names from the complete set of | The LIST command returns a subset of names from the complete set of | |||
| all names available to the client. Zero or more untagged LIST | all names available to the client. Zero or more untagged LIST | |||
| replies are returned, containing the name attributes, hierarchy | replies are returned, containing the name attributes, hierarchy | |||
| delimiter, name, and possible extension information; see the | delimiter, name, and possible extension information; see the | |||
| description of the LIST reply for more detail. | description of the LIST reply for more detail. | |||
| The LIST command SHOULD return its data quickly, without undue delay. | The LIST command SHOULD return its data quickly, without undue delay. | |||
| For example, it SHOULD NOT go to excess trouble to calculate the | For example, it SHOULD NOT go to excess trouble to calculate the | |||
| \Marked or \Unmarked status or perform other processing; if each name | \Marked or \Unmarked status or perform other processing; if each name | |||
| requires 1 second of processing, then a list of 1200 names would take | requires 1 second of processing, then a list of 1200 names would take | |||
| 20 minutes! | 20 minutes! | |||
| The extended LIST command, originally introduced in [RFC5258], | The extended LIST command, originally introduced in [RFC5258], | |||
| provides capabilities beyond that of the original IMAP LIST command. | provides capabilities beyond that of the original IMAP LIST command. | |||
| The extended syntax is being used if one of the following conditions | The extended syntax is being used if one or more of the following | |||
| is true: | conditions is true: | |||
| 1. if the first word after the command name begins with a | 1. if the first word after the command name begins with a | |||
| parenthesis ("LIST selection options") | parenthesis ("LIST selection options") | |||
| 2. if the second word after the command name begins with a | 2. if the second word after the command name begins with a | |||
| parenthesis ("multiple mailbox patterns") | parenthesis ("multiple mailbox patterns") | |||
| 3. if the LIST command has more than 2 parameters ("LIST return | 3. if the LIST command has more than 2 parameters ("LIST return | |||
| options") | options") | |||
| skipping to change at page 43, line 5 ¶ | skipping to change at page 42, line 49 ¶ | |||
| hierarchy delimiter (or find out that the mailbox names are flat) | hierarchy delimiter (or find out that the mailbox names are flat) | |||
| even when no mailboxes by that name currently exist. | even when no mailboxes by that name currently exist. | |||
| In the extended syntax, any mailbox name arguments that are empty | In the extended syntax, any mailbox name arguments that are empty | |||
| strings are ignored. There is no special meaning for empty mailbox | strings are ignored. There is no special meaning for empty mailbox | |||
| names when the extended syntax is used. | names when the extended syntax is used. | |||
| The reference and mailbox name arguments are interpreted into a | The reference and mailbox name arguments are interpreted into a | |||
| canonical form that represents an unambiguous left-to-right | canonical form that represents an unambiguous left-to-right | |||
| hierarchy. The returned mailbox names will be in the interpreted | hierarchy. The returned mailbox names will be in the interpreted | |||
| form. | form, that we call "canonical LIST pattern" later in this document. | |||
| To define the term "canonical LIST pattern" formally: it refers to | ||||
| the canonical pattern constructed internally by the server from the | ||||
| reference and mailbox name arguments. | ||||
| Note: The interpretation of the reference argument is | Note: The interpretation of the reference argument is | |||
| implementation-defined. It depends upon whether the server | implementation-defined. It depends upon whether the server | |||
| implementation has a concept of the "current working directory" | implementation has a concept of the "current working directory" | |||
| and leading "break out characters", which override the current | and leading "break out characters", which override the current | |||
| working directory. | working directory. | |||
| For example, on a server which exports a UNIX or NT filesystem, | For example, on a server which exports a UNIX or NT filesystem, | |||
| the reference argument contains the current working directory, and | the reference argument contains the current working directory, and | |||
| the mailbox name argument would contain the name as interpreted in | the mailbox name argument would contain the name as interpreted in | |||
| skipping to change at page 44, line 41 ¶ | skipping to change at page 44, line 41 ¶ | |||
| details). | details). | |||
| If multiple mailbox patterns are used (in the extended syntax), a | If multiple mailbox patterns are used (in the extended syntax), a | |||
| mailbox matches if it matches at least one mailbox pattern. If a | mailbox matches if it matches at least one mailbox pattern. If a | |||
| mailbox matches more than one pattern, it is still only returned | mailbox matches more than one pattern, it is still only returned | |||
| once. Any syntactically valid pattern that is not accepted by a | once. Any syntactically valid pattern that is not accepted by a | |||
| server for any reason MUST be silently ignored. | server for any reason MUST be silently ignored. | |||
| Selection options tell the server to limit the mailbox names that are | Selection options tell the server to limit the mailbox names that are | |||
| selected by the LIST operation. If selection options are used, the | selected by the LIST operation. If selection options are used, the | |||
| mailboxes returned are those that match both the list of mailbox | mailboxes returned are those that match both the list of canonical | |||
| patterns and the selection options. Unless a particular selection | LIST patterns and the selection options. Unless a particular | |||
| option provides special rules, the selection options are cumulative: | selection option provides special rules, the selection options are | |||
| a mailbox that matches the mailbox patterns is selected only if it | cumulative: a mailbox that matches the mailbox patterns is selected | |||
| also matches all of the selection options. (An example of a | only if it also matches all of the selection options. (An example of | |||
| selection option with special rules is the RECURSIVEMATCH option.) | a selection option with special rules is the RECURSIVEMATCH option.) | |||
| Return options control what information is returned for each matched | Return options control what information is returned for each matched | |||
| mailbox. Return options MUST NOT cause the server to report | mailbox. Return options MUST NOT cause the server to report | |||
| information about additional mailbox names other than those that | information about additional mailbox names other than those that | |||
| match the patterns and selection options. If no return options are | match the canonical LIST patterns and selection options. If no | |||
| specified, the client is only expecting information about mailbox | return options are specified, the client is only expecting | |||
| attributes. The server MAY return other information about the | information about mailbox attributes. The server MAY return other | |||
| matched mailboxes, and clients MUST be able to handle that situation. | information about the matched mailboxes, and clients MUST be able to | |||
| handle that situation. | ||||
| Initial selection options and return options are defined in the | Initial selection options and return options are defined in the | |||
| following subsections, and new ones will also be defined in | following subsections, and new ones will also be defined in | |||
| extensions. Initial options MUST be supported. Each non-initial | extensions. Initial options defined in this document MUST be | |||
| option will be enabled by a capability string (one capability may | supported. Each non-initial option will be enabled by a capability | |||
| enable multiple options), and a client MUST NOT send an option for | string (one capability may enable multiple options), and a client | |||
| which the server has not advertised support. A server MUST respond | MUST NOT send an option for which the server has not advertised | |||
| to options it does not recognize with a BAD response. The client | support. A server MUST respond to options it does not recognize with | |||
| SHOULD NOT specify any option more than once; however, if the client | a BAD response. The client SHOULD NOT specify any option more than | |||
| does this, the server MUST act as if it received the option only | once; however, if the client does this, the server MUST act as if it | |||
| once. The order in which options are specified by the client is not | received the option only once. The order in which options are | |||
| significant. | specified by the client is not significant. | |||
| In general, each selection option except RECURSIVEMATCH will have a | In general, each selection option except RECURSIVEMATCH will have a | |||
| corresponding return option. The REMOTE selection option is an | corresponding return option. The REMOTE selection option is an | |||
| anomaly in this regard, and does not have a corresponding return | anomaly in this regard, and does not have a corresponding return | |||
| option. That is because it expands, rather than restricts, the set | option. That is because it expands, rather than restricts, the set | |||
| of mailboxes that are returned. Future extensions to this | of mailboxes that are returned. Future extensions to this | |||
| specification should keep parallelism in mind and define a pair of | specification should keep parallelism in mind and define a pair of | |||
| corresponding options. | corresponding options. | |||
| Server implementations are permitted to "hide" otherwise accessible | Server implementations are permitted to "hide" otherwise accessible | |||
| skipping to change at page 45, line 49 ¶ | skipping to change at page 45, line 50 ¶ | |||
| 6.3.9.1. LIST Selection Options | 6.3.9.1. LIST Selection Options | |||
| The selection options defined in this specification are as follows: | The selection options defined in this specification are as follows: | |||
| SUBSCRIBED - causes the LIST command to list subscribed names, | SUBSCRIBED - causes the LIST command to list subscribed names, | |||
| rather than the existing mailboxes. This will often be a subset | rather than the existing mailboxes. This will often be a subset | |||
| of the actual mailboxes. It's also possible for this list to | of the actual mailboxes. It's also possible for this list to | |||
| contain the names of mailboxes that don't exist. In any case, the | contain the names of mailboxes that don't exist. In any case, the | |||
| list MUST include exactly those mailbox names that match the | list MUST include exactly those mailbox names that match the | |||
| canonical list pattern and are subscribed to. This option is | canonical list pattern and are subscribed to. | |||
| intended to supplement the LSUB command. Of particular note are | ||||
| the mailbox attributes as returned by this option, compared with | ||||
| what is returned by LSUB. With the latter, the attributes | ||||
| returned may not reflect the actual attribute status on the | ||||
| mailbox name, and the \NoSelect attribute has a second special | ||||
| meaning (it indicates that this mailbox is not, itself, | ||||
| subscribed, but that it has descendant mailboxes that are). With | ||||
| the SUBSCRIBED selection option described here, the attributes are | ||||
| accurate and complete, and have no special meanings. "LSUB" and | ||||
| "LIST (SUBSCRIBED)" are, thus, not the same thing, and some | ||||
| servers must do significant extra work to respond to "LIST | ||||
| (SUBSCRIBED)". Because of this, clients SHOULD continue to use | ||||
| "LSUB" unless they specifically want the additional information | ||||
| offered by "LIST (SUBSCRIBED)". | ||||
| This option defines a new mailbox attribute, "\Subscribed", that | This option defines a mailbox attribute, "\Subscribed", that | |||
| indicates that a mailbox name is subscribed to. The "\Subscribed" | indicates that a mailbox name is subscribed to. The "\Subscribed" | |||
| attribute MUST be supported and MUST be accurately computed when | attribute MUST be supported and MUST be accurately computed when | |||
| the SUBSCRIBED selection option is specified. | the SUBSCRIBED selection option is specified. | |||
| Note that the SUBSCRIBED selection option implies the SUBSCRIBED | Note that the SUBSCRIBED selection option implies the SUBSCRIBED | |||
| return option (see below). | return option (see below). | |||
| REMOTE - causes the LIST command to show remote mailboxes as well as | REMOTE - causes the LIST command to show remote mailboxes as well as | |||
| local ones, as described in [RFC2193]. This option is intended to | local ones, as described in [RFC2193]. This option is intended to | |||
| replace the RLIST command and, in conjunction with the SUBSCRIBED | replace the RLIST command and, in conjunction with the SUBSCRIBED | |||
| selection option, the RLSUB command. | selection option, the RLSUB command. Servers that don't support | |||
| remote mailboxes just ignore this option. | ||||
| This option defines a new mailbox attribute, "\Remote", that | This option defines a mailbox attribute, "\Remote", that indicates | |||
| indicates that a mailbox is a remote mailbox. The "\Remote" | that a mailbox is a remote mailbox. The "\Remote" attribute MUST | |||
| attribute MUST be accurately computed when the REMOTE option is | be accurately computed when the REMOTE option is specified. | |||
| specified. | ||||
| The REMOTE selection option has no interaction with other options. | The REMOTE selection option has no interaction with other options. | |||
| Its effect is to tell the server to apply the other options, if | Its effect is to tell the server to apply the other options, if | |||
| any, to remote mailboxes, in addition to local ones. In | any, to remote mailboxes, in addition to local ones. In | |||
| particular, it has no interaction with RECURSIVEMATCH (see below). | particular, it has no interaction with RECURSIVEMATCH (see below). | |||
| A request for (REMOTE RECURSIVEMATCH) is invalid, because a | A request for (REMOTE RECURSIVEMATCH) is invalid, because a | |||
| request for (RECURSIVEMATCH) is. A request for (REMOTE | request for (RECURSIVEMATCH) is also invalid. A request for | |||
| RECURSIVEMATCH SUBSCRIBED) is asking for all subscribed mailboxes, | (REMOTE RECURSIVEMATCH SUBSCRIBED) is asking for all subscribed | |||
| both local and remote. | mailboxes, both local and remote. | |||
| RECURSIVEMATCH - this option forces the server to return information | RECURSIVEMATCH - this option forces the server to return information | |||
| 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.5. | Section 6.3.9.5. | |||
| 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. | |||
| skipping to change at page 47, line 29 ¶ | skipping to change at page 47, line 16 ¶ | |||
| before the client had a chance to access them. | before the client had a chance to access them. | |||
| 6.3.9.2. LIST Return Options | 6.3.9.2. LIST Return Options | |||
| The return options defined in this specification are as follows: | The return options defined in this specification are as follows: | |||
| SUBSCRIBED - causes the LIST command to return subscription state | SUBSCRIBED - causes the LIST command to return subscription state | |||
| for all matching mailbox names. The "\Subscribed" attribute MUST | for all matching mailbox names. The "\Subscribed" attribute MUST | |||
| 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 LSUB | accurately computed (this differs from the behavior of the | |||
| command). | 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.4, below, for details. This | in [RFC3348]. See Section 6.3.9.4, below, for details. This | |||
| option MUST be supported by all servers. | option MUST be supported by all servers. | |||
| 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 | |||
| skipping to change at page 49, line 38 ¶ | skipping to change at page 49, line 25 ¶ | |||
| \HasNoChildren | \HasNoChildren | |||
| The presence of this attribute indicates that the mailbox has NO | The presence of this attribute indicates that the mailbox has NO | |||
| child mailboxes that are accessible to the currently | child mailboxes that are accessible to the currently | |||
| authenticated user. | authenticated user. | |||
| It is an error for the server to return both a \HasChildren and a | It is an error for the server to return both a \HasChildren and a | |||
| \HasNoChildren attribute in the same LIST response. | \HasNoChildren attribute in the same LIST response. | |||
| Note: the \HasNoChildren attribute should not be confused with the | Note: the \HasNoChildren attribute should not be confused with the | |||
| IMAP4 defined attribute \NoInferiors, which indicates that no child | the \NoInferiors attribute, which indicates that no child mailboxes | |||
| mailboxes exist now and none can be created in the future. | exist now and none can be created in the future. | |||
| 6.3.9.5. CHILDINFO Extended Data Item | 6.3.9.5. CHILDINFO Extended Data Item | |||
| The CHILDINFO extended data item MUST NOT be returned unless the | The CHILDINFO extended data item MUST NOT be returned unless the | |||
| client has specified the RECURSIVEMATCH selection option. | client has specified the RECURSIVEMATCH selection option. | |||
| The CHILDINFO extended data item in a LIST response describes the | The CHILDINFO extended data item in a LIST response describes the | |||
| selection criteria that has caused it to be returned and indicates | selection criteria that has caused it to be returned and indicates | |||
| 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. | |||
| The LSUB command indicates this condition by using the "\NoSelect" | ||||
| attribute, but the LIST (SUBSCRIBED) command MUST NOT do that, since | ||||
| "\NoSelect" retains its original meaning here. Further, the | ||||
| CHILDINFO extended data item is more general, in that it can be used | ||||
| with any extended set of 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.6. | 11 in Section 6.3.9.6. | |||
| The returned selection criteria allow the client to distinguish a | The returned selection criteria allow the client to distinguish a | |||
| skipping to change at page 58, line 27 ¶ | skipping to change at page 57, line 48 ¶ | |||
| 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. | |||
| 6.3.10. LSUB Command | 6.3.10. NAMESPACE Command | |||
| Arguments: reference name | ||||
| mailbox name with possible wildcards | ||||
| Responses: untagged responses: LSUB | ||||
| Result: OK - lsub completed | ||||
| NO - lsub failure: can't list that reference or name | ||||
| BAD - command unknown or arguments invalid | ||||
| The LSUB command returns a subset of names from the set of names that | ||||
| the user has declared as being "active" or "subscribed". Zero or | ||||
| more untagged LSUB replies are returned. The arguments to LSUB are | ||||
| in the same form as those for LIST. | ||||
| The returned untagged LSUB response MAY contain different mailbox | ||||
| flags from a LIST untagged response. If this should happen, the | ||||
| flags in the untagged LIST are considered more authoritative. | ||||
| A special situation occurs when using LSUB with the % wildcard. | ||||
| Consider what happens if "foo/bar" (with a hierarchy delimiter of | ||||
| "/") is subscribed but "foo" is not. A "%" wildcard to LSUB must | ||||
| return foo, not foo/bar, in the LSUB response, and it MUST be flagged | ||||
| with the \Noselect attribute. | ||||
| The server MUST NOT unilaterally remove an existing mailbox name from | ||||
| the subscription list even if a mailbox by that name no longer | ||||
| exists. | ||||
| Example: C: A002 LSUB "#news." "comp.mail.*" | ||||
| S: * LSUB () "." #news.comp.mail.mime | ||||
| S: * LSUB () "." #news.comp.mail.misc | ||||
| S: A002 OK LSUB completed | ||||
| C: A003 LSUB "#news." "comp.%" | ||||
| S: * LSUB (\NoSelect) "." #news.comp.mail | ||||
| S: A003 OK LSUB completed | ||||
| 6.3.11. 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 | |||
| The NAMESPACE command causes a single ungagged NAMESPACE response to | The NAMESPACE command causes a single ungagged NAMESPACE response to | |||
| be returned. The untagged NAMESPACE response contains the prefix and | be returned. The untagged NAMESPACE response contains the prefix and | |||
| hierarchy delimiter to the server's Personal Namespace(s), Other | hierarchy delimiter to the server's Personal Namespace(s), Other | |||
| Users' Namespace(s), and Shared Namespace(s) that the server wishes | Users' Namespace(s), and Shared Namespace(s) that the server wishes | |||
| to expose. The response will contain a NIL for any namespace class | to expose. The response will contain a NIL for any namespace class | |||
| that is not available. Namespace-Response-Extensions ABNF non | that is not available. Namespace-Response-Extensions ABNF non | |||
| skipping to change at page 63, line 45 ¶ | skipping to change at page 62, line 18 ¶ | |||
| S: * NAMESPACE (("" "/")) (("~" "/")) NIL | S: * NAMESPACE (("" "/")) (("~" "/")) NIL | |||
| S: A001 OK NAMESPACE command completed | S: A001 OK NAMESPACE command completed | |||
| < List the mailboxes for user mark > | < List the mailboxes for user mark > | |||
| C: A002 LIST "" "~mark/%" | C: A002 LIST "" "~mark/%" | |||
| S: * LIST () "/" "~mark/INBOX" | S: * LIST () "/" "~mark/INBOX" | |||
| S: * LIST () "/" "~mark/foo" | S: * LIST () "/" "~mark/foo" | |||
| S: A002 OK LIST command completed | S: A002 OK LIST command completed | |||
| 6.3.12. STATUS Command | 6.3.11. STATUS Command | |||
| Arguments: mailbox name | Arguments: mailbox name | |||
| status data item names | status data item names | |||
| Responses: REQUIRED untagged responses: STATUS | Responses: REQUIRED untagged responses: STATUS | |||
| Result: OK - status completed | Result: OK - status completed | |||
| NO - status failure: no status for that name | NO - status failure: no status for that name | |||
| BAD - command unknown or arguments invalid | BAD - command unknown or arguments invalid | |||
| skipping to change at page 65, line 14 ¶ | skipping to change at page 63, line 35 ¶ | |||
| SIZE The total size of the mailbox in octets. This is not strictly | SIZE The total size of the mailbox in octets. This is not strictly | |||
| required to be an exact value, but it MUST be equal to or greater | required to be an exact value, but it MUST be equal to or greater | |||
| than the sum of the values of the RFC822.SIZE FETCH message data | than the sum of the values of the RFC822.SIZE FETCH message data | |||
| items (see Section 6.4.5) of all messages in the mailbox. | items (see Section 6.4.5) of all messages in the mailbox. | |||
| Example: C: A042 STATUS blurdybloop (UIDNEXT MESSAGES) | Example: C: A042 STATUS blurdybloop (UIDNEXT MESSAGES) | |||
| S: * STATUS blurdybloop (MESSAGES 231 UIDNEXT 44292) | S: * STATUS blurdybloop (MESSAGES 231 UIDNEXT 44292) | |||
| S: A042 OK STATUS completed | S: A042 OK STATUS completed | |||
| 6.3.13. APPEND Command | 6.3.12. APPEND Command | |||
| Arguments: mailbox name | Arguments: mailbox name | |||
| OPTIONAL flag parenthesized list | OPTIONAL flag parenthesized list | |||
| OPTIONAL date/time string | OPTIONAL date/time string | |||
| message literal | message literal | |||
| Responses: no specific responses for this command | Responses: no specific responses for this command | |||
| Result: OK - append completed | Result: OK - append completed | |||
| NO - append error: can't append to that mailbox, error | NO - append error: can't append to that mailbox, error | |||
| skipping to change at page 67, line 46 ¶ | skipping to change at page 66, line 19 ¶ | |||
| 319; therefore, UIDs 305 through 310 do not exist (refer to | 319; therefore, UIDs 305 through 310 do not exist (refer to | |||
| Section 2.3.1.1 for further explanation). A006 is an example of a | Section 2.3.1.1 for further explanation). A006 is an example of a | |||
| message being copied that did not return a COPYUID; and, as expected, | message being copied that did not return a COPYUID; and, as expected, | |||
| A007 shows that the mail store containing that mailbox does not | A007 shows that the mail store containing that mailbox does not | |||
| support persistent UIDs. | support persistent UIDs. | |||
| Note: The APPEND command is not used for message delivery, because | Note: The APPEND command is not used for message delivery, because | |||
| it does not provide a mechanism to transfer [SMTP] envelope | it does not provide a mechanism to transfer [SMTP] envelope | |||
| information. | information. | |||
| 6.3.14. IDLE Command | 6.3.13. IDLE Command | |||
| Arguments: none | Arguments: none | |||
| Responses: continuation data will be requested; the client sends the | Responses: continuation data will be requested; the client sends the | |||
| continuation data "DONE" to end the command | continuation data "DONE" to end the command | |||
| Result: OK - IDLE completed after client sent "DONE" | Result: OK - IDLE completed after client sent "DONE" | |||
| NO - failure: the server will not allow the IDLE command | NO - failure: the server will not allow the IDLE command | |||
| at this time | at this time | |||
| BAD - command unknown or arguments invalid | BAD - command unknown or arguments invalid | |||
| skipping to change at page 69, line 44 ¶ | skipping to change at page 68, line 12 ¶ | |||
| 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, LSUB , STATUS, | CREATE, DELETE, RENAME, SUBSCRIBE, UNSUBSCRIBE, LIST, STATUS, and | |||
| and APPEND), the following commands are valid in the selected state: | APPEND), the following commands are valid in the selected state: | |||
| CLOSE, UNSELECT, EXPUNGE, SEARCH, FETCH, STORE, COPY, MOVE, and UID. | CLOSE, UNSELECT, EXPUNGE, SEARCH, FETCH, STORE, COPY, MOVE, and UID. | |||
| 6.4.1. CLOSE Command | 6.4.1. CLOSE Command | |||
| Arguments: none | Arguments: none | |||
| Responses: no specific responses for this command | Responses: no specific responses for this command | |||
| Result: OK - close completed, now in authenticated state | Result: OK - close completed, now in authenticated state | |||
| BAD - command unknown or arguments invalid | BAD - command unknown or arguments invalid | |||
| The CLOSE command permanently removes all messages that have the | The CLOSE command permanently removes all messages that have the | |||
| \Deleted flag set from the currently selected mailbox, and returns to | \Deleted flag set from the currently selected mailbox, and returns to | |||
| the authenticated state from the selected state. No untagged EXPUNGE | the authenticated state from the selected state. No untagged EXPUNGE | |||
| responses are sent. | responses are sent. | |||
| No messages are removed, and no error is given, if the mailbox is | No messages are removed, and no error is given, if the mailbox is | |||
| selected by an EXAMINE command or is otherwise selected read-only. | selected by an EXAMINE command or is otherwise selected read-only. | |||
| skipping to change at page 80, line 39 ¶ | skipping to change at page 78, line 43 ¶ | |||
| ENVELOPE The envelope structure of the message. This is computed by | ENVELOPE The envelope structure of the message. This is computed by | |||
| the server by parsing the [RFC-5322] header into the component | the server by parsing the [RFC-5322] header into the component | |||
| parts, defaulting various fields as necessary. | parts, defaulting various fields as necessary. | |||
| FLAGS The flags that are set for this message. | FLAGS The flags that are set for this message. | |||
| INTERNALDATE The internal date of the message. | INTERNALDATE The internal date of the message. | |||
| RFC822 Functionally equivalent to BODY[], differing in the syntax of | RFC822 Functionally equivalent to BODY[], differing in the syntax of | |||
| the resulting untagged FETCH data (RFC822 is returned). | the resulting untagged FETCH data (RFC822 is returned). This | |||
| FETCH item is deprecated and will be removed in the next revision | ||||
| of this document. | ||||
| RFC822.HEADER Functionally equivalent to BODY.PEEK[HEADER], | RFC822.HEADER Functionally equivalent to BODY.PEEK[HEADER], | |||
| differing in the syntax of the resulting untagged FETCH data | differing in the syntax of the resulting untagged FETCH data | |||
| (RFC822.HEADER is returned). | (RFC822.HEADER is returned). This FETCH item is deprecated and | |||
| will be removed in the next revision of this document. | ||||
| RFC822.SIZE The [RFC-5322] size of the message. | RFC822.SIZE The [RFC-5322] size of the message. | |||
| RFC822.TEXT Functionally equivalent to BODY[TEXT], differing in the | RFC822.TEXT Functionally equivalent to BODY[TEXT], differing in the | |||
| syntax of the resulting untagged FETCH data (RFC822.TEXT is | syntax of the resulting untagged FETCH data (RFC822.TEXT is | |||
| returned). | returned). This FETCH item is deprecated and will be removed in | |||
| the next revision of this document. | ||||
| UID The unique identifier for the message. | UID The unique identifier for the message. | |||
| Example: C: A654 FETCH 2:4 (FLAGS BODY[HEADER.FIELDS (DATE FROM)]) | Example: C: A654 FETCH 2:4 (FLAGS BODY[HEADER.FIELDS (DATE FROM)]) | |||
| S: * 2 FETCH .... | S: * 2 FETCH .... | |||
| S: * 3 FETCH .... | S: * 3 FETCH .... | |||
| S: * 4 FETCH .... | S: * 4 FETCH .... | |||
| S: A654 OK FETCH completed | S: A654 OK FETCH completed | |||
| 6.4.6. STORE Command | 6.4.6. STORE Command | |||
| skipping to change at page 100, line 5 ¶ | skipping to change at page 98, line 5 ¶ | |||
| Contents: name attributes | Contents: name attributes | |||
| hierarchy delimiter | hierarchy delimiter | |||
| name | name | |||
| The LIST response occurs as a result of a LIST command. It returns a | The LIST response occurs as a result of a LIST command. It returns a | |||
| single name that matches the LIST specification. There can be | single name that matches the LIST specification. There can be | |||
| multiple LIST responses for a single LIST command. | multiple LIST responses for a single LIST command. | |||
| The following base name attributes are defined: | The following base name attributes are defined: | |||
| \NonExistent The "\NonExistent" attribute indicates that a mailbox | ||||
| name does not refer to an existing mailbox. Note that this | ||||
| attribute is not meaningful by itself, as mailbox names that match | ||||
| the canonical LIST pattern but don't exist must not be returned | ||||
| unless one of the two conditions listed below is also satisfied: | ||||
| 1. The mailbox name also satisfies the selection criteria (for | ||||
| example, it is subscribed and the "SUBSCRIBED" selection | ||||
| option has been specified). | ||||
| 2. "RECURSIVEMATCH" has been specified, and the mailbox name has | ||||
| at least one descendant mailbox name that does not match the | ||||
| LIST pattern and does match the selection criteria. | ||||
| In practice, this means that the "\NonExistent" attribute is | ||||
| usually returned with one or more of "\Subscribed", "\Remote", | ||||
| "\HasChildren", or the CHILDINFO extended data item. | ||||
| The "\NonExistent" attribute implies "\NoSelect". | ||||
| \Noinferiors It is not possible for any child levels of hierarchy to | \Noinferiors It is not possible for any child levels of hierarchy to | |||
| exist under this name; no child levels exist now and none can be | exist under this name; no child levels exist now and none can be | |||
| created in the future. | created in the future. | |||
| \Noselect It is not possible to use this name as a selectable | \Noselect It is not possible to use this name as a selectable | |||
| mailbox. | mailbox. | |||
| \HasChildren The presence of this attribute indicates that the | \HasChildren The presence of this attribute indicates that the | |||
| mailbox has child mailboxes. A server SHOULD NOT set this | mailbox has child mailboxes. A server SHOULD NOT set this | |||
| attribute if there are child mailboxes and the user does not have | attribute if there are child mailboxes and the user does not have | |||
| skipping to change at page 100, line 38 ¶ | skipping to change at page 99, line 12 ¶ | |||
| mailbox has NO child mailboxes that are accessible to the | mailbox has NO child mailboxes that are accessible to the | |||
| currently authenticated user. | currently authenticated user. | |||
| \Marked The mailbox has been marked "interesting" by the server; the | \Marked The mailbox has been marked "interesting" by the server; the | |||
| mailbox probably contains messages that have been added since the | mailbox probably contains messages that have been added since the | |||
| last time the mailbox was selected. | last time the mailbox was selected. | |||
| \Unmarked The mailbox does not contain any additional messages since | \Unmarked The mailbox does not contain any additional messages since | |||
| the last time the mailbox was selected. | the last time the mailbox was selected. | |||
| \Subscribed The mailbox name was subscribed to using the SUBSCRIBE | ||||
| command. | ||||
| \Remote The mailbox is a remote mailbox. | ||||
| It is an error for the server to return both a \HasChildren and a | It is an error for the server to return both a \HasChildren and a | |||
| \HasNoChildren attribute in the same LIST response. | \HasNoChildren attribute in the same LIST response. | |||
| Note: the \HasNoChildren attribute should not be confused with the | Note: the \HasNoChildren attribute should not be confused with the | |||
| \NoInferiors attribute, which indicates that no child mailboxes | \NoInferiors attribute, which indicates that no child mailboxes | |||
| exist now and none can be created in the future. | exist now and none can be created in the future. | |||
| If it is not feasible for the server to determine whether or not the | If it is not feasible for the server to determine whether or not the | |||
| mailbox is "interesting", the server SHOULD NOT send either \Marked | mailbox is "interesting", the server SHOULD NOT send either \Marked | |||
| or \Unmarked. The server MUST NOT send more than one of \Marked, | or \Unmarked. The server MUST NOT send more than one of \Marked, | |||
| skipping to change at page 102, line 24 ¶ | skipping to change at page 100, line 51 ¶ | |||
| unlikely to also serve as Barb's \Sent mailbox. | unlikely to also serve as Barb's \Sent mailbox. | |||
| The hierarchy delimiter is a character used to delimit levels of | The hierarchy delimiter is a character used to delimit levels of | |||
| hierarchy in a mailbox name. A client can use it to create child | hierarchy in a mailbox name. A client can use it to create child | |||
| mailboxes, and to search higher or lower levels of naming hierarchy. | mailboxes, and to search higher or lower levels of naming hierarchy. | |||
| All children of a top-level hierarchy node MUST use the same | All children of a top-level hierarchy node MUST use the same | |||
| 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 and LSUB commands. Unless | be valid for use as a reference in LIST command. Unless \Noselect or | |||
| \Noselect 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. | |||
| Example: S: * LIST (\Noselect) "/" ~/Mail/foo | Example: S: * LIST (\Noselect) "/" ~/Mail/foo | |||
| 7.2.4. LSUB Response | 7.2.4. NAMESPACE Response | |||
| Contents: name attributes | ||||
| hierarchy delimiter | ||||
| name | ||||
| The LSUB response occurs as a result of an LSUB command. It returns | ||||
| a single name that matches the LSUB specification. There can be | ||||
| multiple LSUB responses for a single LSUB command. The data is | ||||
| identical in format to the LIST response. | ||||
| Example: S: * LSUB () "." #news.comp.mail.misc | ||||
| 7.2.5. NAMESPACE Response | ||||
| Contents: the prefix and hierarchy delimiter to the server's | Contents: the prefix and hierarchy delimiter to the server's | |||
| Personal Namespace(s), Other Users' Namespace(s), and | Personal Namespace(s), Other Users' Namespace(s), and | |||
| Shared Namespace(s) | Shared Namespace(s) | |||
| The NAMESPACE response occurs as a result of a NAMESPACE command. It | The NAMESPACE response occurs as a result of a NAMESPACE command. It | |||
| contains the prefix and hierarchy delimiter to the server's Personal | contains the prefix and hierarchy delimiter to the server's Personal | |||
| Namespace(s), Other Users' Namespace(s), and Shared Namespace(s) that | Namespace(s), Other Users' Namespace(s), and Shared Namespace(s) that | |||
| the server wishes to expose. The response will contain a NIL for any | the server wishes to expose. The response will contain a NIL for any | |||
| namespace class that is not available. Namespace-Response-Extensions | namespace class that is not available. Namespace-Response-Extensions | |||
| ABNF non terminal is defined for extensibility and MAY be included in | ABNF non terminal is defined for extensibility and MAY be included in | |||
| the response. Namespace-Response-Extensions which are not on the | the response. Namespace-Response-Extensions which are not on the | |||
| IETF standards track, MUST be prefixed with an "X-". | IETF standards track, MUST be prefixed with an "X-". | |||
| Example: S: * NAMESPACE (("" "/")) (("~" "/")) NIL | Example: S: * NAMESPACE (("" "/")) (("~" "/")) NIL | |||
| 7.2.6. STATUS Response | 7.2.5. STATUS Response | |||
| Contents: name | Contents: name | |||
| status parenthesized list | status parenthesized list | |||
| The STATUS response occurs as a result of an STATUS command. It | The STATUS response occurs as a result of an STATUS command. It | |||
| returns the mailbox name that matches the STATUS specification and | returns the mailbox name that matches the STATUS specification and | |||
| the requested mailbox status information. | the requested mailbox status information. | |||
| Example: S: * STATUS blurdybloop (MESSAGES 231 UIDNEXT 44292) | Example: S: * STATUS blurdybloop (MESSAGES 231 UIDNEXT 44292) | |||
| 7.2.7. ESEARCH Response | 7.2.6. ESEARCH Response | |||
| Contents: one or more search-return-data pairs | Contents: one or more search-return-data pairs | |||
| The ESEARCH response occurs as a result of a SEARCH or UID SEARCH | The ESEARCH response occurs as a result of a SEARCH or UID SEARCH | |||
| command. | command. | |||
| The ESEARCH response starts with an optional search correlator. If | The ESEARCH response starts with an optional search correlator. If | |||
| it is missing, then the response was not caused by a particular IMAP | it is missing, then the response was not caused by a particular IMAP | |||
| command, whereas if it is present, it contains the tag of the command | command, whereas if it is present, it contains the tag of the command | |||
| that caused the response to be returned. | that caused the response to be returned. | |||
| skipping to change at page 104, line 5 ¶ | skipping to change at page 102, line 19 ¶ | |||
| item name SHOULD appear only once in an ESEARCH response. | item name SHOULD appear only once in an ESEARCH response. | |||
| [[TBD: describe the most common search data pairs returned.]] | [[TBD: describe the most common search data pairs returned.]] | |||
| Example: S: * ESEARCH UID COUNT 5 ALL 4:19,21,28 | Example: S: * ESEARCH UID COUNT 5 ALL 4:19,21,28 | |||
| Example: S: * ESEARCH (TAG "a567") UID COUNT 5 ALL 4:19,21,28 | Example: S: * ESEARCH (TAG "a567") UID COUNT 5 ALL 4:19,21,28 | |||
| Example: S: * ESEARCH COUNT 5 ALL 1:17,21 | Example: S: * ESEARCH COUNT 5 ALL 1:17,21 | |||
| 7.2.8. FLAGS Response | 7.2.7. FLAGS Response | |||
| Contents: flag parenthesized list | Contents: flag parenthesized list | |||
| The FLAGS response occurs as a result of a SELECT or EXAMINE command. | The FLAGS response occurs as a result of a SELECT or EXAMINE command. | |||
| The flag parenthesized list identifies the flags (at a minimum, the | The flag parenthesized list identifies the flags (at a minimum, the | |||
| system-defined flags) that are applicable for this mailbox. Flags | system-defined flags) that are applicable for this mailbox. Flags | |||
| other than the system flags can also exist, depending on server | other than the system flags can also exist, depending on server | |||
| implementation. | implementation. | |||
| The update from the FLAGS response MUST be recorded by the client. | The update from the FLAGS response MUST be recorded by the client. | |||
| skipping to change at page 117, line 7 ¶ | skipping to change at page 115, line 7 ¶ | |||
| ; 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. | |||
| 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 "(" | ||||
| list-select-base-opt-quoted | ||||
| *(SP list-select-base-opt-quoted) ")" | ||||
| ; Extended data item (mbox-list-extended-item) | ||||
| ; returned when the RECURSIVEMATCH | ||||
| ; selection option is specified. | ||||
| ; Note 1: the CHILDINFO tag can be returned | ||||
| ; with and without surrounding quotes, as per | ||||
| ; mbox-list-extended-item-tag production. | ||||
| ; Note 2: The selection options are always returned | ||||
| ; quoted, unlike their specification in | ||||
| ; the extended LIST command. | ||||
| child-mbox-flag = "\HasChildren" / "\HasNoChildren" | ||||
| ; attributes for CHILDREN return option, at most one | ||||
| ; possible per LIST response | ||||
| command = tag SP (command-any / command-auth / command-nonauth / | command = tag SP (command-any / command-auth / command-nonauth / | |||
| command-select) CRLF | command-select) CRLF | |||
| ; Modal based on state | ; Modal based on state | |||
| command-any = "CAPABILITY" / "LOGOUT" / "NOOP" / enable / x-command | command-any = "CAPABILITY" / "LOGOUT" / "NOOP" / enable / x-command | |||
| ; Valid in all states | ; Valid in all states | |||
| command-auth = append / create / delete / examine / list / lsub / | command-auth = append / create / delete / examine / list / | |||
| Namespace-Command / | Namespace-Command / | |||
| rename / select / status / subscribe / unsubscribe / | rename / select / status / subscribe / unsubscribe / | |||
| idle | idle | |||
| ; Valid only in Authenticated or Selected state | ; Valid only in Authenticated or Selected state | |||
| command-nonauth = login / authenticate / "STARTTLS" | command-nonauth = login / authenticate / "STARTTLS" | |||
| ; Valid only when in Not Authenticated state | ; Valid only when in Not Authenticated state | |||
| command-select = "CLOSE" / "UNSELECT" / "EXPUNGE" / copy / | command-select = "CLOSE" / "UNSELECT" / "EXPUNGE" / copy / | |||
| move / fetch / store / search / uid | move / fetch / store / search / uid | |||
| skipping to change at page 118, line 9 ¶ | skipping to change at page 116, line 26 ¶ | |||
| 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 | ||||
| ; a tag for extended list data defined in a Standard | ||||
| ; Track or Experimental RFC. | ||||
| eitem-vendor-tag = vendor-token "-" atom | ||||
| ; a vendor-specific tag for extended list data | ||||
| 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 118, line 28 ¶ | skipping to change at page 117, line 4 ¶ | |||
| env-cc = "(" 1*address ")" / nil | env-cc = "(" 1*address ")" / nil | |||
| env-date = nstring | env-date = nstring | |||
| env-from = "(" 1*address ")" / nil | env-from = "(" 1*address ")" / nil | |||
| env-in-reply-to = nstring | env-in-reply-to = nstring | |||
| env-message-id = nstring | env-message-id = nstring | |||
| env-reply-to = "(" 1*address ")" / nil | env-reply-to = "(" 1*address ")" / nil | |||
| env-sender = "(" 1*address ")" / nil | env-sender = "(" 1*address ")" / nil | |||
| env-subject = nstring | env-subject = nstring | |||
| env-to = "(" 1*address ")" / nil | env-to = "(" 1*address ")" / nil | |||
| esearch-response = "ESEARCH" [search-correlator] [SP "UID"] | esearch-response = "ESEARCH" [search-correlator] [SP "UID"] | |||
| *(SP search-return-data) | *(SP search-return-data) | |||
| ; ESEARCH response replaces SEARCH response | ; ESEARCH response replaces SEARCH response | |||
| ; from IMAP4rev1. | ; from IMAP4rev1. | |||
| examine = "EXAMINE" SP mailbox | examine = "EXAMINE" SP mailbox | |||
| fetch = "FETCH" SP sequence-set SP ("ALL" / "FULL" / "FAST" / | fetch = "FETCH" SP sequence-set SP ("ALL" / "FULL" / "FAST" / | |||
| fetch-att / "(" fetch-att *(SP fetch-att) ")") | fetch-att / "(" fetch-att *(SP fetch-att) ")") | |||
| fetch-att = "ENVELOPE" / "FLAGS" / "INTERNALDATE" / | fetch-att = "ENVELOPE" / "FLAGS" / "INTERNALDATE" / | |||
| "RFC822" [".HEADER" / ".SIZE" / ".TEXT"] / | "RFC822.SIZE" / | |||
| "BODY" ["STRUCTURE"] / "UID" / | "BODY" ["STRUCTURE"] / "UID" / | |||
| "BODY" section [partial] / | "BODY" section [partial] / | |||
| "BODY.PEEK" section [partial] / | "BODY.PEEK" section [partial] / | |||
| "BINARY" [".PEEK"] section-binary [partial] / | "BINARY" [".PEEK"] section-binary [partial] / | |||
| "BINARY.SIZE" section-binary | "BINARY.SIZE" section-binary / | |||
| fetch-att-deprecated | ||||
| fetch-att-deprecated = "RFC822" [".HEADER" / .TEXT"] | ||||
| flag = "\Answered" / "\Flagged" / "\Deleted" / | flag = "\Answered" / "\Flagged" / "\Deleted" / | |||
| "\Seen" / "\Draft" / flag-keyword / flag-extension | "\Seen" / "\Draft" / flag-keyword / flag-extension | |||
| ; Does not include "\Recent" | ; Does not include "\Recent" | |||
| flag-extension = "\" atom | flag-extension = "\" atom | |||
| ; Future expansion. Client implementations | ; Future expansion. Client implementations | |||
| ; MUST accept flag-extension flags. Server | ; MUST accept flag-extension flags. Server | |||
| ; implementations MUST NOT generate | ; implementations MUST NOT generate | |||
| ; flag-extension flags except as defined by | ; flag-extension flags except as defined by | |||
| skipping to change at page 119, line 26 ¶ | skipping to change at page 118, line 4 ¶ | |||
| ; future standard or standards-track | ; future standard or standards-track | |||
| ; revisions of this specification. | ; revisions of this specification. | |||
| ; "\Recent" was defined in RFC 3501 | ; "\Recent" was defined in RFC 3501 | |||
| ; and is now deprecated. | ; and is now deprecated. | |||
| flag-fetch = flag | flag-fetch = flag | |||
| flag-keyword = "$MDNSent" / "$Forwarded" / atom | flag-keyword = "$MDNSent" / "$Forwarded" / atom | |||
| flag-list = "(" [flag *(SP flag)] ")" | flag-list = "(" [flag *(SP flag)] ")" | |||
| flag-perm = flag / "\*" | flag-perm = flag / "\*" | |||
| greeting = "*" SP (resp-cond-auth / resp-cond-bye) CRLF | greeting = "*" SP (resp-cond-auth / resp-cond-bye) CRLF | |||
| header-fld-name = astring | header-fld-name = astring | |||
| header-list = "(" header-fld-name *(SP header-fld-name) ")" | header-list = "(" header-fld-name *(SP header-fld-name) ")" | |||
| idle = "IDLE" CRLF "DONE" | idle = "IDLE" CRLF "DONE" | |||
| initial-resp = (base64 / "=") | initial-resp = (base64 / "=") | |||
| ; "initial response" defined in | ; "initial response" defined in | |||
| ; Section 5.1 of [RFC4422] | ; Section 5.1 of [RFC4422] | |||
| list = "LIST" SP mailbox SP list-mailbox | list = "LIST" [SP list-select-opts] SP mailbox SP mbox-or-pat | |||
| [SP list-return-opts] | ||||
| list-mailbox = 1*list-char / string | list-mailbox = 1*list-char / string | |||
| list-char = ATOM-CHAR / list-wildcards / resp-specials | list-char = ATOM-CHAR / list-wildcards / resp-specials | |||
| list-return-opts = "RETURN" SP | ||||
| "(" [return-option *(SP return-option)] ")" | ||||
| ; list return options, e.g., CHILDREN | ||||
| list-select-base-opt = "SUBSCRIBED" / option-extension | ||||
| ; options that can be used by themselves | ||||
| list-select-base-opt-quoted = DQUOTE list-select-base-opt DQUOTE | ||||
| list-select-independent-opt = "REMOTE" / option-extension | ||||
| ; options that do not syntactically interact with | ||||
| ; other options | ||||
| list-select-mod-opt = "RECURSIVEMATCH" / option-extension | ||||
| ; options that require a list-select-base-opt | ||||
| ; to also be present | ||||
| list-select-opt = list-select-base-opt / list-select-independent-opt | ||||
| / list-select-mod-opt | ||||
| ; An option registration template is described in | ||||
| ; Section 9.3 of this document. | ||||
| list-select-opts = "(" [ | ||||
| (*(list-select-opt SP) list-select-base-opt | ||||
| *(SP list-select-opt)) | ||||
| / (list-select-independent-opt | ||||
| *(SP list-select-independent-opt)) | ||||
| ] ")" | ||||
| ; Any number of options may be in any order. | ||||
| ; If a list-select-mod-opt appears, then a | ||||
| ; list-select-base-opt must also appear. | ||||
| ; This allows these: | ||||
| ; () | ||||
| ; (REMOTE) | ||||
| ; (SUBSCRIBED) | ||||
| ; (SUBSCRIBED REMOTE) | ||||
| ; (SUBSCRIBED RECURSIVEMATCH) | ||||
| ; (SUBSCRIBED REMOTE RECURSIVEMATCH) | ||||
| ; But does NOT allow these: | ||||
| ; (RECURSIVEMATCH) | ||||
| ; (REMOTE RECURSIVEMATCH) | ||||
| list-wildcards = "%" / "*" | list-wildcards = "%" / "*" | |||
| literal = "{" number ["+"] "}" CRLF *CHAR8 | literal = "{" number ["+"] "}" CRLF *CHAR8 | |||
| ; <number> represents the number of CHAR8s. | ; <number> represents the number of CHAR8s. | |||
| ; A non-synchronizing literal is distinguished from | ; A non-synchronizing literal is distinguished from | |||
| ; a synchronizing literal by presence of the "+" | ; a synchronizing literal by presence of the "+" | |||
| ; before the closing "}". | ; before the closing "}". | |||
| ; Non synchronizing literals are not allowed when | ; Non synchronizing literals are not allowed when | |||
| ; sent from server to the client. | ; sent from server to the client. | |||
| literal8 = "~{" number "}" CRLF *OCTET | literal8 = "~{" number "}" CRLF *OCTET | |||
| ; <number> represents the number of OCTETs | ; <number> represents the number of OCTETs | |||
| ; in the response string. | ; in the response string. | |||
| login = "LOGIN" SP userid SP password | login = "LOGIN" SP userid SP password | |||
| lsub = "LSUB" SP mailbox SP list-mailbox | ||||
| mailbox = "INBOX" / astring | mailbox = "INBOX" / astring | |||
| ; INBOX is case-insensitive. All case variants of | ; INBOX is case-insensitive. All case variants of | |||
| ; INBOX (e.g., "iNbOx") MUST be interpreted as INBOX | ; INBOX (e.g., "iNbOx") MUST be interpreted as INBOX | |||
| ; not as an astring. An astring which consists of | ; not as an astring. An astring which consists of | |||
| ; the case-insensitive sequence "I" "N" "B" "O" "X" | ; the case-insensitive sequence "I" "N" "B" "O" "X" | |||
| ; is considered to be INBOX and not an astring. | ; is considered to be INBOX and not an astring. | |||
| ; Refer to section 5.1 for further | ; Refer to section 5.1 for further | |||
| ; semantic details of mailbox names. | ; semantic details of mailbox names. | |||
| mailbox-data = "FLAGS" SP flag-list / "LIST" SP mailbox-list / | mailbox-data = "FLAGS" SP flag-list / "LIST" SP mailbox-list / | |||
| "LSUB" SP mailbox-list / esearch-response / | esearch-response / | |||
| "STATUS" SP mailbox SP "(" [status-att-list] ")" / | "STATUS" SP mailbox SP "(" [status-att-list] ")" / | |||
| number SP "EXISTS" / Namespace-Response | number SP "EXISTS" / Namespace-Response | |||
| 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] | ||||
| ; This is the list information pointed to by the ABNF | ||||
| ; item "mailbox-data", which is defined in [IMAP4] | ||||
| mbox-list-extended = "(" [mbox-list-extended-item | ||||
| *(SP mbox-list-extended-item)] ")" | ||||
| mbox-list-extended-item = mbox-list-extended-item-tag SP | ||||
| tagged-ext-val | ||||
| mbox-list-extended-item-tag = astring | ||||
| ; The content MUST conform to either "eitem-vendor-tag" | ||||
| ; or "eitem-standard-tag" ABNF productions. | ||||
| 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" / flag-extension | mbx-list-oflag = "\Noinferiors" / child-mbox-flag / | |||
| "\Subscribed" / "\Remote" / flag-extension | ||||
| ; Other flags; multiple possible per LIST response | ; Other flags; multiple possible per LIST response | |||
| mbx-list-sflag = "\Noselect" / "\Marked" / "\Unmarked" | mbx-list-sflag = "\NonExistent" / "\Noselect" / "\Marked" / "\Unmarked" | |||
| ; Selectability flags; only one per LIST response | ; Selectability flags; only one per LIST response | |||
| media-basic = ((DQUOTE ("APPLICATION" / "AUDIO" / "IMAGE" / | media-basic = ((DQUOTE ("APPLICATION" / "AUDIO" / "IMAGE" / | |||
| "MESSAGE" / "VIDEO" / "FONT") DQUOTE) / string) SP | "MESSAGE" / "VIDEO" / "FONT") DQUOTE) / string) SP | |||
| media-subtype | media-subtype | |||
| ; Defined in [MIME-IMT]. | ; Defined in [MIME-IMT]. | |||
| ; FONT defined in RFC YYYY. | ; FONT defined in RFC YYYY. | |||
| media-message = DQUOTE "MESSAGE" DQUOTE SP | media-message = DQUOTE "MESSAGE" DQUOTE SP | |||
| DQUOTE ("RFC822" / "GLOBAL") DQUOTE | DQUOTE ("RFC822" / "GLOBAL") DQUOTE | |||
| skipping to change at page 122, line 4 ¶ | skipping to change at page 121, line 39 ¶ | |||
| 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' Namespace(s) | |||
| ; The third Namespace is the Shared 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 | |||
| ; 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) | |||
| password = astring | option-extension = (option-standard-tag / option-vendor-tag) | |||
| [SP option-value] | ||||
| option-standard-tag = atom | ||||
| ; an option defined in a Standards Track or | ||||
| ; Experimental RFC | ||||
| option-val-comp = astring / | ||||
| option-val-comp *(SP option-val-comp) / | ||||
| "(" option-val-comp ")" | ||||
| option-value = "(" option-val-comp ")" | ||||
| option-vendor-tag = vendor-token "-" atom | ||||
| ; a vendor-specific option, non-standard | ||||
| partial-range = number ["." nz-number] | partial-range = number ["." nz-number] | |||
| ; Copied from RFC 5092 (IMAP URL) | ; Copied from RFC 5092 (IMAP URL) | |||
| partial = "<" number "." nz-number ">" | partial = "<" number "." nz-number ">" | |||
| ; Partial FETCH request. 0-based offset of | ; Partial FETCH request. 0-based offset of | |||
| ; the first octet, followed by the number of octets | ; the first octet, followed by the number of octets | |||
| ; in the fragment. | ; in the fragment. | |||
| password = astring | ||||
| patterns = "(" list-mailbox *(SP list-mailbox) ")" | ||||
| quoted = DQUOTE *QUOTED-CHAR DQUOTE | quoted = DQUOTE *QUOTED-CHAR DQUOTE | |||
| QUOTED-CHAR = <any TEXT-CHAR except quoted-specials> / | QUOTED-CHAR = <any TEXT-CHAR except quoted-specials> / | |||
| "\" quoted-specials / UTF8-2 / UTF8-3 / UTF8-4 | "\" quoted-specials / UTF8-2 / UTF8-3 / UTF8-4 | |||
| quoted-specials = DQUOTE / "\" | quoted-specials = DQUOTE / "\" | |||
| rename = "RENAME" SP mailbox SP mailbox | rename = "RENAME" SP mailbox SP mailbox | |||
| ; Use of INBOX as a destination gives a NO error | ; Use of INBOX as a destination gives a NO error | |||
| skipping to change at page 123, line 38 ¶ | skipping to change at page 123, line 45 ¶ | |||
| "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 | ||||
| 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 / | |||
| "NEW" / "OLD" / "ON" SP date / "SEEN" / | "NEW" / "OLD" / "ON" SP date / "SEEN" / | |||
| "SINCE" SP date / "SUBJECT" SP astring / | "SINCE" SP date / "SUBJECT" SP astring / | |||
| "TEXT" SP astring / "TO" SP astring / | "TEXT" SP astring / "TO" SP astring / | |||
| "UNANSWERED" / "UNDELETED" / "UNFLAGGED" / | "UNANSWERED" / "UNDELETED" / "UNFLAGGED" / | |||
| "UNKEYWORD" SP flag-keyword / "UNSEEN" / | "UNKEYWORD" SP flag-keyword / "UNSEEN" / | |||
| ; Above this line were in [IMAP2] | ; Above this line were in [IMAP2] | |||
| skipping to change at page 136, line 38 ¶ | skipping to change at page 136, line 38 ¶ | |||
| Servers advertising both IMAP4rev1 and IMAP4rev2 SHOULD NOT generate | Servers advertising both IMAP4rev1 and IMAP4rev2 SHOULD NOT generate | |||
| UTF-8 quoted strings unless the client has issued "ENABLE IMAP4rev2". | UTF-8 quoted strings unless the client has issued "ENABLE IMAP4rev2". | |||
| Consider implementation of mechanisms described or referenced in | Consider implementation of mechanisms described or referenced in | |||
| [IMAP-UTF-8] to achieve this goal. | [IMAP-UTF-8] to achieve this goal. | |||
| Servers advertising both IMAP4rev1 and IMAP4rev2, and clients | Servers advertising both IMAP4rev1 and IMAP4rev2, and clients | |||
| intending to be compatible with IMAP4rev1 servers MUST be compatible | intending to be compatible with IMAP4rev1 servers MUST be compatible | |||
| with the international mailbox naming convention described in the | with the international mailbox naming convention described in the | |||
| following subsection. | following subsection. | |||
| A.1. Mailbox International Naming Convention | A.1. Mailbox International Naming Convention for compatibility with | |||
| IMAP4rev1 | ||||
| By convention, international mailbox names in IMAP4rev2 are specified | Support for the Mailbox International Naming Convention described in | |||
| this section is not required for IMAP4rev2-only clients and servers. | ||||
| By convention, international mailbox names in IMAP4rev1 are specified | ||||
| using a modified version of the UTF-7 encoding described in [UTF-7]. | using a modified version of the UTF-7 encoding described in [UTF-7]. | |||
| Modified UTF-7 may also be usable in servers that implement an | Modified UTF-7 may also be usable in servers that implement an | |||
| earlier version of this protocol. | earlier version of this protocol. | |||
| In modified UTF-7, printable US-ASCII characters, except for "&", | In modified UTF-7, printable US-ASCII characters, except for "&", | |||
| represent themselves; that is, characters with octet values 0x20-0x25 | represent themselves; that is, characters with octet values 0x20-0x25 | |||
| and 0x27-0x7e. The character "&" (0x26) is represented by the two- | and 0x27-0x7e. The character "&" (0x26) is represented by the two- | |||
| octet sequence "&-". | octet sequence "&-". | |||
| All other characters (octet values 0x00-0x1f and 0x7f-0xff) are | All other characters (octet values 0x00-0x1f and 0x7f-0xff) are | |||
| skipping to change at page 139, line 20 ¶ | skipping to change at page 139, line 24 ¶ | |||
| 8. Deprecate features: What should we do with NEW search key (which | 8. Deprecate features: What should we do with NEW search key (which | |||
| implies RECENT): deprecate it or just redefine it to ignore | implies RECENT): deprecate it or just redefine it to ignore | |||
| RECENT state? | RECENT state? | |||
| 9. Drop UTF-7, all mailboxes are always in UTF-8 - done. | 9. Drop UTF-7, all mailboxes are always in UTF-8 - done. | |||
| 10. Revise IANA registration of IMAP extensions and give advice on | 10. Revise IANA registration of IMAP extensions and give advice on | |||
| use of "X-" convention. | use of "X-" convention. | |||
| 11. Allow word-based searching (as per Chris Newman)? | 11. Allow word-based searching (as per Chris Newman)? Need to | |||
| discuss header field search, where exact/substring match is | ||||
| 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) and MOVE (RFC 6851) extensions. Also folded RFC 5530 and | |||
| FETCH side of the BINARY extension (RFC 3516). | 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 | |||
| skipping to change at page 140, line 16 ¶ | skipping to change at page 140, line 22 ¶ | |||
| 11. RECENT response on SELECT/EXAMINE, \Recent flag, RECENT STATUS | 11. RECENT response on SELECT/EXAMINE, \Recent flag, RECENT STATUS | |||
| item are now deprecated. | item are now deprecated. | |||
| 12. Clarified that the server doesn't need to send a new | 12. 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. | 13. Removed the CHECK command. Clients should use NOOP instead. | |||
| 14. Replaced DIGEST-MD5 SASL mechanism with SCRAM-SHA-256. DIGEST- | 14. RFC822, RFC822.HEADER and RFC822.TEXT FETCH data items are | |||
| deprecated, but supported in this document. | ||||
| 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 | ||||
| (SUBSCRIBED) instead. | ||||
| 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 for extensive feedback. | Thank you to Timo Sirainen, Bron Gondwana and Arnt Gulbrandsen for | |||
| extensive feedback. | ||||
| This document incorporate text from RFC 4315, RFC 4466, RFC 4731, RFC | This document incorporate text from RFC 4315, RFC 4466, RFC 4731, RFC | |||
| 5161, RFC 6154 so work done by authors/editors of these documents is | 5161, RFC 6154 so work done by authors/editors of these documents is | |||
| appreciated. | appreciated. | |||
| 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> 80 | |||
| +FLAGS.SILENT <flag list> 81 | +FLAGS.SILENT <flag list> 80 | |||
| - | - | |||
| -FLAGS <flag list> 82 | -FLAGS <flag list> 80 | |||
| -FLAGS.SILENT <flag list> 82 | -FLAGS.SILENT <flag list> 80 | |||
| A | A | |||
| ALERT (response code) 89 | ALERT (response code) 87 | |||
| ALL (fetch item) 77 | ALL (fetch item) 75 | |||
| ALL (search key) 73 | ALL (search key) 72 | |||
| ALL (search result option) 72 | ALL (search result option) 70 | |||
| ALREADYEXISTS (response code) 89 | ALREADYEXISTS (response code) 87 | |||
| ANSWERED (search key) 73 | ANSWERED (search key) 72 | |||
| APPEND (command) 65 | APPEND (command) 63 | |||
| APPENDUID (response code) 89 | APPENDUID (response code) 87 | |||
| AUTHENTICATE (command) 28 | AUTHENTICATE (command) 28 | |||
| AUTHENTICATIONFAILED (response code) 90 | AUTHENTICATIONFAILED (response code) 88 | |||
| AUTHORIZATIONFAILED (response code) 90 | AUTHORIZATIONFAILED (response code) 88 | |||
| B | B | |||
| BAD (response) 97 | BAD (response) 95 | |||
| BADCHARSET (response code) 90 | BADCHARSET (response code) 88 | |||
| BCC <string> (search key) 73 | BCC <string> (search key) 72 | |||
| BEFORE <date> (search key) 73 | BEFORE <date> (search key) 72 | |||
| BINARY.PEEK[<section-binary>]<<partial>> (fetch item) 78 | BINARY.PEEK[<section-binary>]<<partial>> (fetch item) 76 | |||
| BINARY.SIZE[<section-binary>] (fetch item) 78 | BINARY.SIZE[<section-binary>] (fetch item) 76 | |||
| BINARY.SIZE[<section-binary>] (fetch result) 106 | BINARY.SIZE[<section-binary>] (fetch result) 104 | |||
| BINARY[<section-binary>]<<number>> (fetch result) 105 | BINARY[<section-binary>]<<number>> (fetch result) 104 | |||
| BINARY[<section-binary>]<<partial>> (fetch item) 77 | BINARY[<section-binary>]<<partial>> (fetch item) 75 | |||
| BODY (fetch item) 78 | BODY (fetch item) 76 | |||
| BODY (fetch result) 106 | BODY (fetch result) 105 | |||
| BODY <string> (search key) 74 | BODY <string> (search key) 72 | |||
| BODY.PEEK[<section>]<<partial>> (fetch item) 80 | BODY.PEEK[<section>]<<partial>> (fetch item) 78 | |||
| BODYSTRUCTURE (fetch item) 80 | BODYSTRUCTURE (fetch item) 78 | |||
| BODYSTRUCTURE (fetch result) 107 | BODYSTRUCTURE (fetch result) 105 | |||
| BODY[<section>]<<origin octet>> (fetch result) 106 | BODY[<section>]<<origin octet>> (fetch result) 105 | |||
| BODY[<section>]<<partial>> (fetch item) 78 | BODY[<section>]<<partial>> (fetch item) 76 | |||
| BYE (response) 97 | BYE (response) 95 | |||
| Body Structure (message attribute) 13 | Body Structure (message attribute) 13 | |||
| C | C | |||
| CANNOT (response code) 90 | CANNOT (response code) 88 | |||
| CAPABILITY (command) 24 | CAPABILITY (command) 24 | |||
| CAPABILITY (response code) 90 | CAPABILITY (response code) 88 | |||
| CAPABILITY (response) 98 | CAPABILITY (response) 96 | |||
| CC <string> (search key) 74 | CC <string> (search key) 72 | |||
| CLIENTBUG (response code) 91 | CLIENTBUG (response code) 89 | |||
| CLOSE (command) 69 | CLOSE (command) 68 | |||
| CLOSED (response code) 91 | CLOSED (response code) 89 | |||
| CONTACTADMIN (response code) 91 | CONTACTADMIN (response code) 89 | |||
| COPY (command) 82 | COPY (command) 80 | |||
| COPYUID (response code) 91 | COPYUID (response code) 89 | |||
| CORRUPTION (response code) 92 | CORRUPTION (response code) 90 | |||
| COUNT (search result option) 72 | COUNT (search result option) 71 | |||
| CREATE (command) 36 | CREATE (command) 36 | |||
| D | D | |||
| DELETE (command) 37 | DELETE (command) 37 | |||
| DELETED (search key) 74 | DELETED (search key) 72 | |||
| DRAFT (search key) 74 | DRAFT (search key) 72 | |||
| E | E | |||
| ENABLE (command) 32 | ENABLE (command) 32 | |||
| ENVELOPE (fetch item) 80 | ENVELOPE (fetch item) 78 | |||
| ENVELOPE (fetch result) 109 | ENVELOPE (fetch result) 108 | |||
| ESEARCH (response) 103 | ESEARCH (response) 101 | |||
| EXAMINE (command) 35 | EXAMINE (command) 35 | |||
| EXPIRED (response code) 92 | EXPIRED (response code) 90 | |||
| EXPUNGE (command) 70 | EXPUNGE (command) 69 | |||
| EXPUNGE (response) 104 | EXPUNGE (response) 103 | |||
| EXPUNGEISSUED (response code) 92 | EXPUNGEISSUED (response code) 90 | |||
| Envelope Structure (message attribute) 13 | Envelope Structure (message attribute) 13 | |||
| F | F | |||
| FAST (fetch item) 77 | FAST (fetch item) 75 | |||
| FETCH (command) 77 | FETCH (command) 75 | |||
| FETCH (response) 105 | FETCH (response) 104 | |||
| FLAGGED (search key) 74 | FLAGGED (search key) 72 | |||
| FLAGS (fetch item) 80 | FLAGS (fetch item) 78 | |||
| FLAGS (fetch result) 111 | FLAGS (fetch result) 109 | |||
| FLAGS (response) 104 | FLAGS (response) 102 | |||
| FLAGS <flag list> (store command data item) 81 | FLAGS <flag list> (store command data item) 79 | |||
| FLAGS.SILENT <flag list> (store command data item) 81 | FLAGS.SILENT <flag list> (store command data item) 79 | |||
| FROM <string> (search key) 74 | FROM <string> (search key) 72 | |||
| FULL (fetch item) 77 | FULL (fetch item) 75 | |||
| Flags (message attribute) 11 | Flags (message attribute) 11 | |||
| H | H | |||
| HEADER (part specifier) 78 | HEADER (part specifier) 76 | |||
| HEADER <field-name> <string> (search key) 74 | HEADER <field-name> <string> (search key) 72 | |||
| HEADER.FIELDS (part specifier) 78 | HEADER.FIELDS (part specifier) 76 | |||
| HEADER.FIELDS.NOT (part specifier) 78 | HEADER.FIELDS.NOT (part specifier) 76 | |||
| I | I | |||
| IDLE (command) 67 | IDLE (command) 66 | |||
| INTERNALDATE (fetch item) 80 | INTERNALDATE (fetch item) 78 | |||
| INTERNALDATE (fetch result) 111 | INTERNALDATE (fetch result) 109 | |||
| INUSE (response code) 92 | INUSE (response code) 90 | |||
| Internal Date (message attribute) 12 | Internal Date (message attribute) 12 | |||
| K | K | |||
| KEYWORD <flag> (search key) 74 | KEYWORD <flag> (search key) 72 | |||
| Keyword (type of flag) 12 | Keyword (type of flag) 12 | |||
| L | L | |||
| LARGER <n> (search key) 74 | LARGER <n> (search key) 72 | |||
| LIMIT (response code) 93 | LIMIT (response code) 91 | |||
| LIST (command) 41 | LIST (command) 41 | |||
| LIST (response) 99 | LIST (response) 97 | |||
| LOGOUT (command) 26 | LOGOUT (command) 26 | |||
| LSUB (command) 58 | ||||
| LSUB (response) 102 | ||||
| M | M | |||
| MAX (search result option) 72 | MAX (search result option) 70 | |||
| MAY (specification requirement term) 5 | MAY (specification requirement term) 5 | |||
| MESSAGES (status item) 64 | MESSAGES (status item) 63 | |||
| MIME (part specifier) 79 | MIME (part specifier) 77 | |||
| MIN (search result option) 72 | MIN (search result option) 70 | |||
| MOVE (command) 83 | MOVE (command) 81 | |||
| 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) 59 | NAMESPACE (command) 57 | |||
| NAMESPACE (response) 102 | NAMESPACE (response) 101 | |||
| NEW (search key) 74 | NEW (search key) 72 | |||
| NO (response) 96 | NO (response) 94 | |||
| NONEXISTENT (response code) 93 | NONEXISTENT (response code) 91 | |||
| NOOP (command) 25 | NOOP (command) 25 | |||
| NOPERM (response code) 93 | NOPERM (response code) 91 | |||
| NOT <search-key> (search key) 74 | NOT <search-key> (search key) 73 | |||
| NOT RECOMMENDED (specification requirement term) 5 | NOT RECOMMENDED (specification requirement term) 5 | |||
| O | O | |||
| OK (response) 96 | OK (response) 94 | |||
| ON <date> (search key) 74 | ON <date> (search key) 73 | |||
| 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) 73 | |||
| OVERQUOTA (response code) 93 | OVERQUOTA (response code) 91 | |||
| P | P | |||
| PARSE (response code) 94 | PARSE (response code) 92 | |||
| PERMANENTFLAGS (response code) 94 | PERMANENTFLAGS (response code) 92 | |||
| PREAUTH (response) 97 | PREAUTH (response) 95 | |||
| PRIVACYREQUIRED (response code) 94 | PRIVACYREQUIRED (response code) 92 | |||
| 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) 92 | |||
| READ-WRITE (response code) 94 | READ-WRITE (response code) 92 | |||
| RECOMMENDED (specification requirement term) 5 | RECOMMENDED (specification requirement term) 5 | |||
| RENAME (command) 38 | RENAME (command) 38 | |||
| REQUIRED (specification requirement term) 5 | REQUIRED (specification requirement term) 5 | |||
| RFC822 (fetch item) 80 | RFC822 (fetch item) 78 | |||
| RFC822 (fetch result) 111 | RFC822 (fetch result) 109 | |||
| RFC822.HEADER (fetch item) 80 | RFC822.HEADER (fetch item) 78 | |||
| RFC822.HEADER (fetch result) 111 | RFC822.HEADER (fetch result) 109 | |||
| RFC822.SIZE (fetch item) 80 | RFC822.SIZE (fetch item) 79 | |||
| RFC822.SIZE (fetch result) 111 | RFC822.SIZE (fetch result) 109 | |||
| RFC822.TEXT (fetch item) 80 | RFC822.TEXT (fetch item) 79 | |||
| RFC822.TEXT (fetch result) 111 | RFC822.TEXT (fetch result) 109 | |||
| S | S | |||
| SEARCH (command) 71 | SEARCH (command) 69 | |||
| SEEN (search key) 74 | SEEN (search key) 73 | |||
| SELECT (command) 34 | SELECT (command) 34 | |||
| SENTBEFORE <date> (search key) 74 | SENTBEFORE <date> (search key) 73 | |||
| SENTON <date> (search key) 74 | SENTON <date> (search key) 73 | |||
| SENTSINCE <date> (search key) 75 | SENTSINCE <date> (search key) 73 | |||
| SERVERBUG (response code) 94 | SERVERBUG (response code) 92 | |||
| 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) 73 | |||
| SIZE (status item) 65 | SIZE (status item) 63 | |||
| SMALLER <n> (search key) 75 | SMALLER <n> (search key) 73 | |||
| STARTTLS (command) 27 | STARTTLS (command) 27 | |||
| STATUS (command) 63 | STATUS (command) 62 | |||
| STATUS (response) 103 | STATUS (response) 101 | |||
| STORE (command) 81 | STORE (command) 79 | |||
| SUBJECT <string> (search key) 75 | SUBJECT <string> (search key) 73 | |||
| SUBSCRIBE (command) 40 | SUBSCRIBE (command) 40 | |||
| 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) 76 | |||
| TEXT <string> (search key) 75 | TEXT <string> (search key) 73 | |||
| TO <string> (search key) 75 | TO <string> (search key) 73 | |||
| TRYCREATE (response code) 95 | TRYCREATE (response code) 93 | |||
| U | U | |||
| UID (command) 85 | UID (command) 83 | |||
| UID (fetch item) 80 | UID (fetch item) 79 | |||
| UID (fetch result) 111 | UID (fetch result) 109 | |||
| UID <sequence set> (search key) 75 | UID <sequence set> (search key) 73 | |||
| UIDNEXT (response code) 95 | UIDNEXT (response code) 93 | |||
| UIDNEXT (status item) 64 | UIDNEXT (status item) 63 | |||
| UIDNOTSTICKY (response code) 95 | UIDNOTSTICKY (response code) 93 | |||
| UIDVALIDITY (response code) 95 | UIDVALIDITY (response code) 93 | |||
| UIDVALIDITY (status item) 64 | UIDVALIDITY (status item) 63 | |||
| UNANSWERED (search key) 75 | UNANSWERED (search key) 73 | |||
| UNAVAILABLE (response code) 95 | UNAVAILABLE (response code) 93 | |||
| UNDELETED (search key) 75 | UNDELETED (search key) 73 | |||
| UNDRAFT (search key) 75 | UNDRAFT (search key) 73 | |||
| UNFLAGGED (search key) 75 | UNFLAGGED (search key) 73 | |||
| UNKEYWORD <flag> (search key) 75 | UNKEYWORD <flag> (search key) 74 | |||
| UNKNOWN-CTE (response code) 95 | UNKNOWN-CTE (response code) 93 | |||
| UNSEEN (search key) 75 | UNSEEN (search key) 74 | |||
| UNSEEN (status item) 64 | UNSEEN (status item) 63 | |||
| UNSELECT (command) 70 | UNSELECT (command) 68 | |||
| UNSUBSCRIBE (command) 41 | UNSUBSCRIBE (command) 41 | |||
| Unique Identifier (UID) (message attribute) 9 | Unique Identifier (UID) (message attribute) 9 | |||
| X | X | |||
| X<atom> (command) 87 | X<atom> (command) 85 | |||
| [ | [ | |||
| [RFC-5322] Size (message attribute) 13 | [RFC-5322] Size (message attribute) 13 | |||
| \ | \ | |||
| \All (mailbox name attribute) 101 | \All (mailbox name attribute) 99 | |||
| \Answered (system flag) 11 | \Answered (system flag) 11 | |||
| \Archive (mailbox name attribute) 101 | \Archive (mailbox name attribute) 99 | |||
| \Deleted (system flag) 11 | \Deleted (system flag) 11 | |||
| \Draft (system flag) 12 | \Draft (system flag) 12 | |||
| \Drafts (mailbox name attribute) 101 | \Drafts (mailbox name attribute) 99 | |||
| \Flagged (mailbox name attribute) 101 | \Flagged (mailbox name attribute) 100 | |||
| \Flagged (system flag) 11 | \Flagged (system flag) 11 | |||
| \HasChildren (mailbox name attribute) 100 | \HasChildren (mailbox name attribute) 98 | |||
| \HasNoChildren (mailbox name attribute) 100 | \HasNoChildren (mailbox name attribute) 98 | |||
| \Junk (mailbox name attribute) 101 | \Junk (mailbox name attribute) 100 | |||
| \Marked (mailbox name attribute) 100 | \Marked (mailbox name attribute) 99 | |||
| \Noinferiors (mailbox name attribute) 100 | \Noinferiors (mailbox name attribute) 98 | |||
| \Noselect (mailbox name attribute) 100 | \NonExistent (mailbox name attribute) 98 | |||
| \Noselect (mailbox name attribute) 98 | ||||
| \Recent (system flag) 12 | \Recent (system flag) 12 | |||
| \Remote (mailbox name attribute) 99 | ||||
| \Seen (system flag) 11 | \Seen (system flag) 11 | |||
| \Sent (mailbox name attribute) 101 | \Sent (mailbox name attribute) 100 | |||
| \Trash (mailbox name attribute) 101 | \Subscribed (mailbox name attribute) 99 | |||
| \Unmarked (mailbox name attribute) 100 | \Trash (mailbox name attribute) 100 | |||
| \Unmarked (mailbox name attribute) 99 | ||||
| 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 | |||
| Barry Leiba (editor) | Barry Leiba (editor) | |||
| Huawei Technologies | Huawei Technologies | |||
| End of changes. 110 change blocks. | ||||
| 360 lines changed or deleted | 441 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/ | ||||