# requirements-9051-2.3.1.1 tool: get_requirements args: {"rfc":9051,"section":"2.3.1.1"} --- json --- { "rfc": 9051, "filter": { "section": "2.3.1.1", "level": "all" }, "stats": { "total": 13, "byLevel": { "MUST NOT": 4, "SHOULD NOT": 1, "MUST": 7, "SHOULD": 1 } }, "requirements": [ { "id": "R-2.3.1.1-1", "level": "MUST NOT", "text": "A UID is an unsigned non-zero 32-bit value assigned to each message, which when used with the unique identifier validity value (see below) forms a 64-bit value that MUST NOT refer to any other message in the mailbox or any subsequent mailbox with the same name forever.", "section": "2.3.1.1", "sectionTitle": "Unique Identifier (UID) Message Attribute", "fullContext": "A UID is an unsigned non-zero 32-bit value assigned to each message, which when used with the unique identifier validity value (see below) forms a 64-bit value that MUST NOT refer to any other message in the mailbox or any subsequent mailbox with the same name forever. Unique identifiers are assigned in a strictly ascending fashion in the mailbox; as each message is added to the mailbox, it is assigned a higher UID than those of all message(s) that are already in the mailbox. Unlike message sequence numbers, unique identifiers are not necessarily contiguous.", "subject": "value", "condition": "used with the unique identifier validity value (see below) forms a 64-bit value that MUST NOT refer to any other message in the mailbox or any subsequent mailbox with the same name forever", "action": "refer to any other message in the mailbox or any subsequent mailbox with the same name forever" }, { "id": "R-2.3.1.1-2", "level": "MUST NOT", "text": "The unique identifier of a message MUST NOT change during the session and SHOULD NOT change between sessions.", "section": "2.3.1.1", "sectionTitle": "Unique Identifier (UID) Message Attribute", "fullContext": "The unique identifier of a message MUST NOT change during the session and SHOULD NOT change between sessions. Any change of unique identifiers between sessions MUST be detectable using the UIDVALIDITY mechanism discussed below. Persistent unique identifiers are required for a client to resynchronize its state from a previous session with the server (e.g., disconnected or offline access clients [IMAP-MODEL]); this is discussed further in [IMAP-DISC].", "subject": "message", "action": "change during the session and SHOULD NOT change between sessions" }, { "id": "R-2.3.1.1-3", "level": "SHOULD NOT", "text": "The unique identifier of a message MUST NOT change during the session and SHOULD NOT change between sessions.", "section": "2.3.1.1", "sectionTitle": "Unique Identifier (UID) Message Attribute", "fullContext": "The unique identifier of a message MUST NOT change during the session and SHOULD NOT change between sessions. Any change of unique identifiers between sessions MUST be detectable using the UIDVALIDITY mechanism discussed below. Persistent unique identifiers are required for a client to resynchronize its state from a previous session with the server (e.g., disconnected or offline access clients [IMAP-MODEL]); this is discussed further in [IMAP-DISC].", "subject": "message", "action": "change between sessions" }, { "id": "R-2.3.1.1-4", "level": "MUST", "text": "Any change of unique identifiers between sessions MUST be detectable using the UIDVALIDITY mechanism discussed below.", "section": "2.3.1.1", "sectionTitle": "Unique Identifier (UID) Message Attribute", "fullContext": "The unique identifier of a message MUST NOT change during the session and SHOULD NOT change between sessions. Any change of unique identifiers between sessions MUST be detectable using the UIDVALIDITY mechanism discussed below. Persistent unique identifiers are required for a client to resynchronize its state from a previous session with the server (e.g., disconnected or offline access clients [IMAP-MODEL]); this is discussed further in [IMAP-DISC].", "subject": "between sessions", "action": "be detectable using the UIDVALIDITY mechanism discussed below" }, { "id": "R-2.3.1.1-5", "level": "MUST", "text": "Unless the unique identifier validity also changes (see below), the next unique identifier value MUST have the following two characteristics.", "section": "2.3.1.1", "sectionTitle": "Unique Identifier (UID) Message Attribute", "fullContext": "The next unique identifier value is the predicted value that will be assigned to a new message in the mailbox. Unless the unique identifier validity also changes (see below), the next unique identifier value MUST have the following two characteristics. First, the next unique identifier value MUST NOT change unless new messages are added to the mailbox; and second, the next unique identifier value MUST change whenever new messages are added to the mailbox, even if those new messages are subsequently expunged.", "subject": "identifier value", "exception": "the unique identifier validity also changes (see below)", "action": "have the following two characteristics" }, { "id": "R-2.3.1.1-6", "level": "MUST NOT", "text": "First, the next unique identifier value MUST NOT change unless new messages are added to the mailbox; and second, the next unique identifier value MUST change whenever new messages are added to the mailbox, even if those new messages are subsequently expunged.", "section": "2.3.1.1", "sectionTitle": "Unique Identifier (UID) Message Attribute", "fullContext": "The next unique identifier value is the predicted value that will be assigned to a new message in the mailbox. Unless the unique identifier validity also changes (see below), the next unique identifier value MUST have the following two characteristics. First, the next unique identifier value MUST NOT change unless new messages are added to the mailbox; and second, the next unique identifier value MUST change whenever new messages are added to the mailbox, even if those new messages are subsequently expunged.", "subject": "identifier value", "condition": "those new messages are subsequently expunged", "exception": "new messages are added to the mailbox; and second", "action": "change unless new messages are added to the mailbox; and second" }, { "id": "R-2.3.1.1-7", "level": "MUST", "text": "First, the next unique identifier value MUST NOT change unless new messages are added to the mailbox; and second, the next unique identifier value MUST change whenever new messages are added to the mailbox, even if those new messages are subsequently expunged.", "section": "2.3.1.1", "sectionTitle": "Unique Identifier (UID) Message Attribute", "fullContext": "The next unique identifier value is the predicted value that will be assigned to a new message in the mailbox. Unless the unique identifier validity also changes (see below), the next unique identifier value MUST have the following two characteristics. First, the next unique identifier value MUST NOT change unless new messages are added to the mailbox; and second, the next unique identifier value MUST change whenever new messages are added to the mailbox, even if those new messages are subsequently expunged.", "subject": "identifier value", "condition": "those new messages are subsequently expunged", "exception": "new messages are added to the mailbox; and second", "action": "change whenever new messages are added to the mailbox" }, { "id": "R-2.3.1.1-8", "level": "MUST", "text": "If unique identifiers from an earlier session fail to persist in this session, the unique identifier validity value MUST be greater than the one used in the earlier session.", "section": "2.3.1.1", "sectionTitle": "Unique Identifier (UID) Message Attribute", "fullContext": "The unique identifier validity value is sent in a UIDVALIDITY response code in an OK untagged response at mailbox selection time. If unique identifiers from an earlier session fail to persist in this session, the unique identifier validity value MUST be greater than the one used in the earlier session. A good UIDVALIDITY value to use is a 32-bit representation of the current date/time when the value is assigned: this ensures that the value is unique and always increases. Another possible alternative is a global counter that gets incremented every time a mailbox is created.", "subject": "validity value", "condition": "unique identifiers from an earlier session fail to persist in this session", "action": "be greater than the one used in the earlier session" }, { "id": "R-2.3.1.1-9", "level": "SHOULD", "text": "Note: Ideally, unique identifiers SHOULD persist at all times.", "section": "2.3.1.1", "sectionTitle": "Unique Identifier (UID) Message Attribute", "fullContext": "Note: Ideally, unique identifiers SHOULD persist at all times. Although this specification recognizes that failure to persist can be unavoidable in certain server environments, it strongly encourages message store implementation techniques that avoid this problem. For example:", "subject": "unique identifiers", "action": "persist at all times" }, { "id": "R-2.3.1.1-10", "level": "MUST", "text": "Unique identifiers MUST be strictly ascending in the mailbox at all times.", "section": "2.3.1.1", "sectionTitle": "Unique Identifier (UID) Message Attribute", "fullContext": "Unique identifiers MUST be strictly ascending in the mailbox at all times. If the physical message store is reordered by a non-IMAP agent, the unique identifiers in the mailbox MUST be regenerated, since the former unique identifiers are no longer strictly ascending as a result of the reordering.", "subject": "unique identifiers", "action": "be strictly ascending in the mailbox at all times" }, { "id": "R-2.3.1.1-11", "level": "MUST", "text": "If the physical message store is reordered by a non-IMAP agent, the unique identifiers in the mailbox MUST be regenerated, since the former unique identifiers are no longer strictly ascending as a result of the reordering.", "section": "2.3.1.1", "sectionTitle": "Unique Identifier (UID) Message Attribute", "fullContext": "Unique identifiers MUST be strictly ascending in the mailbox at all times. If the physical message store is reordered by a non-IMAP agent, the unique identifiers in the mailbox MUST be regenerated, since the former unique identifiers are no longer strictly ascending as a result of the reordering.", "subject": "mailbox", "condition": "the physical message store is reordered by a non-IMAP agent", "action": "be regenerated" }, { "id": "R-2.3.1.1-12", "level": "MUST", "text": "In particular, the internal date, RFC822.SIZE, envelope, body structure, and message texts (all BODY[...] fetch data items) MUST never change.", "section": "2.3.1.1", "sectionTitle": "Unique Identifier (UID) Message Attribute", "fullContext": "The combination of mailbox name, UIDVALIDITY, and UID must refer to a single, immutable (or expunged) message on that server forever. In particular, the internal date, RFC822.SIZE, envelope, body structure, and message texts (all BODY[...] fetch data items) MUST never change. This does not include message numbers, nor does it include attributes that can be set by a STORE command (such as FLAGS). When a message is expunged, its UID MUST NOT be reused under the same UIDVALIDITY value.", "action": "never change" }, { "id": "R-2.3.1.1-13", "level": "MUST NOT", "text": "When a message is expunged, its UID MUST NOT be reused under the same UIDVALIDITY value.", "section": "2.3.1.1", "sectionTitle": "Unique Identifier (UID) Message Attribute", "fullContext": "The combination of mailbox name, UIDVALIDITY, and UID must refer to a single, immutable (or expunged) message on that server forever. In particular, the internal date, RFC822.SIZE, envelope, body structure, and message texts (all BODY[...] fetch data items) MUST never change. This does not include message numbers, nor does it include attributes that can be set by a STORE command (such as FLAGS). When a message is expunged, its UID MUST NOT be reused under the same UIDVALIDITY value.", "subject": "uid", "condition": "a message is expunged", "action": "be reused under the same UIDVALIDITY value" } ], "_source": "xml" }