4. Formats de données (Data Formats)
Un atome (Atom) se compose d'un ou plusieurs caractères non spéciaux.
4.2. Nombre (Number)
Un nombre (Number) se compose d'un ou plusieurs caractères numériques et représente une valeur numérique.
4.3. Chaîne de caractères (String)
Une chaîne de caractères (String) peut prendre deux formes : soit littérale (Literal), soit chaîne entre guillemets (Quoted String). La forme littérale est la forme générale de chaîne. La forme de chaîne entre guillemets est une alternative qui évite le surcoût de traitement d'un littéral au prix de limitations sur les caractères pouvant être utilisés.
Un littéral est une séquence de zéro ou plusieurs octets (y compris CR et LF), préfixée par un comptage d'octets sous la forme d'une accolade ouvrante ("), du nombre d'octets, d'une accolade fermante (") et de CRLF. Dans le cas de littéraux transmis du serveur au client, le CRLF est immédiatement suivi des données d'octets. Dans le cas de littéraux transmis du client au serveur, le client DOIT (MUST) attendre de recevoir une demande de continuation de commande (Command Continuation Request, décrite plus loin dans ce document) avant d'envoyer les données d'octets (et le reste de la commande).
Une chaîne entre guillemets est une séquence de zéro ou plusieurs caractères 7 bits, excluant CR et LF, avec des caractères guillemets doubles (<">) à chaque extrémité.
La chaîne vide est représentée soit comme "" (une chaîne entre guillemets avec zéro caractère entre les guillemets doubles), soit comme {0} suivi de CRLF (un littéral avec un comptage d'octets de 0).
Remarque : Même si le comptage d'octets est 0, un client transmettant un littéral DOIT (MUST) attendre de recevoir une demande de continuation de commande.
4.3.1. Chaînes 8 bits et binaires (8-bit and Binary Strings)
Le courrier textuel 8 bits et binaire est pris en charge grâce à l'utilisation d'un encodage de transfert de contenu [MIME-IMB] (Content Transfer Encoding). Les implémentations IMAP4rev1 PEUVENT (MAY) transmettre des caractères 8 bits ou multi-octets dans des littéraux, mais DEVRAIENT (SHOULD) ne le faire que lorsque le [CHARSET] est identifié.
Bien qu'un encodage de corps BINARY (Body Encoding) soit défini, les chaînes binaires non encodées ne sont pas autorisées. Une « chaîne binaire (Binary String) » est toute chaîne contenant des caractères NUL. Les implémentations DOIVENT (MUST) encoder les données binaires dans une forme textuelle, telle que BASE64, avant de transmettre les données. Une chaîne avec une quantité excessive de caractères CTL PEUT (MAY) également être considérée comme binaire.
4.4. Liste entre parenthèses (Parenthesized List)
Les structures de données (Data Structures) sont représentées sous forme de « liste entre parenthèses (Parenthesized List) » : une séquence d'éléments de données, délimités par des espaces et délimités à chaque extrémité par des parenthèses. Une liste entre parenthèses peut contenir d'autres listes entre parenthèses, en utilisant plusieurs niveaux de parenthèses pour indiquer l'imbrication.
La liste vide est représentée comme () -- une liste entre parenthèses sans membres.
4.5. NIL
La forme spéciale "NIL" représente la non-existence d'un élément de données particulier qui est représenté comme une chaîne ou une liste entre parenthèses, contrairement à la chaîne vide "" ou à la liste entre parenthèses vide ().
Remarque : NIL n'est jamais utilisé pour aucun élément de données qui prend la forme d'un atome. Par exemple, un nom de boîte aux lettres "NIL" est une boîte aux lettres nommée NIL plutôt qu'un nom de boîte aux lettres inexistant. En effet, la boîte aux lettres utilise la syntaxe "astring", qui est un atome ou une chaîne. À l'inverse, un addr-name NIL est un nom personnel inexistant, car addr-name utilise la syntaxe "nstring", qui est NIL ou une chaîne, mais jamais un atome.