Un message MIME multi parties contient une séparation dans l'en-tête "Content-type:". Cette séparation, qui ne doit pas être présente dans aucune des autres parties, est placée entre les parties et au début et à la fin du corps du message comme suit :
Content-type: multipart/mixed; boundary="frontier"
MIME-version: 1.0
This is a multi-part message in MIME format.
--frontier
Content-type: text/plain
This is the body of the message.
--frontier
Content-type: application/octet-stream
Content-transfer-encoding: base64
PGh0bWw+CiAgPGhlYWQ+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPHA+VGhpcyBpcyB0aGUg
Ym9keSBvZiB0aGUgbWVzc2FnZS48L3A+CiAgPC9ib2R5Pgo8L2h0bWw+Cg==
--frontier--
Chacune de ces parties consistent en sa propre en-tête de contenu (zéro, un ou plusieurs champs d'en-tête Content-) et un corps. Des parties multiples peuvent être incluent dans d'autres parties multiples avec pour chacune leur propre frontière (boundary) définit. Le champ content-transfert-encoding d'un type à parties multiples doit être "7bit", "8bit" ou "binary" pour éviter les problèmes de décodage des différentes couches de parties multiples. Le bloc multi parties n'as pas de jeu de caractères, les caractères non ASCII dans les en-têtes sont traités par le système des mots encodés et les corps peuvent avoir un jeu de caractères spécifié approprié à leur contenu.
Notes :
- La zone se trouvant avant le premier séparateur est ignorée par les clients MIME. Cette zone est généralement utilisée pour stocker un message à l'attention des client ne supportant pas MIME.
- Le choix du séparateur de parties revient au programme client. Celui-ci doit le choisir de façon à éviter toute collision avec le contenu des différents contenus. Généralement, le séparateur est généré à partir d'une large chaine de caractères aléatoires.
Sous-types
Le standard MIME définit plusieurs sous types de messages multiparties pour en spécifier la nature des différentes parties du message et leurs relations avec les autres parties. Le sous type est spécifié par l'en-tête Content-type du message englobant. Par exemple, un message MIME multi parties utilisant le sous-type digest devrait avoir son en-tête Content-Type à multipart/digest. La RFC définit initialement quatre sous types : mixed, alternate, digest et parallel. Une application qui implémente le minimum de cette spécification doit supporter les types mixed et digest, les autres sous types sont optionnels. Les sous types additionnels, comme signed ou form-data ont été définis dans d'autres RFCs.
Les sous types suivants sont ceux principalement utilisés :
Mixed
multipart/mixed est utilisé pour envoyer des fichiers avec différentes en-têtes Content-type (comme attachements). Si les fichiers sont facilement lisibles ou sont des images, la plupart des clients de courriels affichent ces fichiers directement dans le contenu du message (à moins qu'une en-tête Content-disposition ne la spécifie). Sinon les fichiers sont vus comme des pièces jointes. Le type de contenu par défaut de ces parties est "text/plain".
Défini dans RFC2231, Section 5.1.3
Digest
multipart/digest est la manière simple d'envoyer des messages à textes multiples. Le type de contenu par défaut est "message/rfc822".
Défini dans RFC2231, Section 5.1.5
Alternative
multipart/alternative indique que chaque partie est une version alternative d'un même contenu dans un format différent. Les formats sont ordonnés dans l'ordre croissant de fidélité au contenu original. Le receveur peut ainsi choisir la meilleur représentation qu'il est capable de traiter, en générale, la dernière de la liste.
Comme un client ne veut généralement pas envoyer un contenu plus significatif que le texte brut, celui-ci est envoyé en premier, ce qui permet de simplifier le traitement par les clients ne comprenant pas le multipart car c'est la partie visible en premier.
L'utilisation principale du type multipart/alternative est l'envoi de courriels au format HTML avec son équivalent au format texte pour conserver la lisibilité du message pour un client courriel ne pouvant afficher de HTML (client texte).
Bien que chaque partie du message est censée représenter le même contenu, rien ne le garantit. Par exemple, il est plus facile pour un filtre anti pourriel d'analyser la partie texte pur d'un message plutôt que la partie HTML; alors que l'éditeur de pourriel va plutôt construire un message HTML avec son contenu publicitaire et un message en texte pur anodin ou sans rapport avec sa publicité.
Défini dans RFC2231, Section 5.1.4
Related
multipart/related est utilisé pour préciser que les différentes parties ne devraient pas être traitées individuellement mais comme un tout. Le message consiste en une partie racine (la première, par défaut) qui référence les autres parties, qui peuvent aussi référencer d'autres parties. Les parties de messages sont souvent référencées par leur identifiant de contenu (en-tête Content-ID). La syntaxe des références n'est pas spécifiée, elle est laissée à l'intention du protocole utilisé.
Un des usages courant de ce sous type est l'envoi d'une page web avec ses images en un seul message. La partie racine contient le document HTML et les images sont stockées dans les parties suivantes.
Défini dans RFC2387
Report
multipart/report est un type de message qui contient des données formatées pour être lues par un serveur de courriels. Il est séparé entre un text/plain (ou tout autre contenu facilement lisible) et un message/delivery-status qui contient les données formatées pour le serveur de courriels.
Défini dans RFC3462
Signed
multipart/signed est utilisé pour attacher une signature numérique à un message. Il est composé de deux parties : le corps du message et la partie signature. L'ensemble de la partie corps du message, y compris les en-têtes MIME, est utilisé pour générer la signature. Différents types de signatures sont possibles comme application/pgp-signature ou application/x-pkcs7-signature.
Défini dans RFC1847, Section 2.1
Encrypted
multipart/encrypted est utilisé pour envoyer un contenu encrypté. Sa première partie définit les informations nécessaires pour décrypter la seconde partie (application/octet-stream).
Défini dans RFC1847, Section 2.2
Form Data
multipart/form-data est utilisé pour envoyer les données d'un formulaire. définit à l'origine comme une partie de HTML 4.0, il est plus couramment utilisé pour envoyer des fichiers via HTTP.
Défini dans RFC2388