Standard MIME (Multipurpose Internet Mail Extensions)

Introduction à MIME

MIME (Multipurpose Internet Mail Extensions) est un standard qui a été proposé par les laboratoires Bell Communications en 1991 afin d'étendre les possibilités limitées du courrier électronique (mail) et notamment de permettre d'insérer des documents (images, sons, texte, ...) dans un courrier. Il est défini à l'origine par les RFC 1341 et 1342 datant de juin 1992.

MIME propose de décrire, grâce à des en-têtes, le type de contenu du message et le codage utilisé. MIME apporte à la messagerie les fonctionnalités suivantes :

  • Possibilité d'avoir plusieurs objets (pièces jointes) dans un même message ;
  • Une longueur de message illimitée ;
  • L'utilisation de jeux de caractères (alphabets) autres que le code ASCII ;
  • L'utilisation de texte enrichi (mise en forme des messages, polices de caractères, couleurs, etc.) ;
  • Des pièces jointes binaires (exécutables, images, fichiers audio ou vidéo, etc.), comportant éventuellement plusieurs parties ;

MIME utilise des directives d'entête spécifiques pour décrire le format utilisé dans le corps d'un message, afin de permettre au client de messagerie de pouvoir l'interpréter correctement :

  • MIME-Version: Il s'agit de version du standard MIME utilisée dans le message. Actuellement seule la version 1.0 existe.
  • Content-type : Décrit le type et les sous-type des données. Il peut posséder un paramètre « charset », séparé par un point-virtule, définissant le jeu de caractères utilisé.
  • Content-Transfer-Encoding : Définit l'encodage utilisé dans le corps du message.
  • Content-ID : Représente un identificateur unique de partie de message.
  • Content-Description : Donne des informations complémentaires sur le contenu du message.
  • Content-Disposition : Définit les paramètres de la pièce jointe, notamment le nom associé au fichier grâce à l'attribut filename.

Types MIME principaux

Le type MIME, utilisé dans l'entête Content-Type, est utilisé d'une part pour typer les documents attachés à un courrier. Un type MIME est constitué de la manière suivante :

Content-type: type_mime_principal/sous_type_mime

Une image GIF possèdera par exemple le type MIME suivant :

Content-type: image/gif

Les types principaux de données, appelés parfois « types de données discrets », sont les suivants :

  • text: données textuelles lisibles.

    text/rfc822 [RFC822] ; text/plain [RFC2646] ; text/html [RFC2854]

    .

  • image: données binaires représentant des images numériques

    image/jpeg ; image/gif ; image/png

    .

  • audio: données numériques sonores

    audio/basic ; audio/wav
  • video : données vidéos :

    video/mpeg
  • application : données binaires autres.

    application/octet-stream ; application/pdf

Le type MIME est également utilisé sur le Web, pour typer les documents transférés par le protocole HTTP. Ainsi, lors d'une transaction entre un serveur web et un navigateur internet, le serveur web envoie en premier lieu
le type MIME du fichier envoyé au navigateur, afin que ce dernier puisse savoir comment afficher le document.

Formats de codage

Pour transférer des données binaires, MIME propose cinq formats de codage pouvant être utilisé dans l'entête Transfer-encoding :

  • 7bit : format texte codé sur 7 bits (pour les messages non accentués) ;
  • 8bit : format texte 8 bits ;
  • quoted-printable : format Quoted-Printable, recommandé pour les messages utilisant un alphabet codé sur plus de 7 bits (présence d'accents par exemple) ;
  • base64 : format Base 64, recommandé pour l'envoi de fichiers binaires en pièce jointe ;
  • binary : format binaire, déconseillé.

MIME, étant très ouvert, permet d'utiliser des formats de codage tierstels que les suivants :

  • BinHex (format propriétaire appartenant à Apple),
  • uuencode,
  • xxencode

Encodage de entêtes

L'utilisation de l'entête Transfer-encoding permet de préciser un format d'encodage pour le corps du message, mais ne résout pas le problème de l'encodage des entêtes eux-mêmes (par exemple le sujet du message).

Ainsi, pour permettre d'encoder les entêtes avec des alphabets de plus de 7 bits, et permettre par exemple d'avoir un sujet de mail accentué, le standard MIME propose le format suivant :

=?charset?encodage?resultat?=
  • charset représente le jeu de caractère utilisé,
  • encodage définit l'encodage souhaité avec deux valeurs possibles :
    • Q pour quoted-printable
    • B pour base64
  • resultat: texte encodé selon la méthode spécifiée.

Voici ci-dessous un exemple en codage Quoted-Printable avec « Comment ça marche ? » comme sujet de message :

Subject: Comment =?ISO-8859-1?Q?=E7a_marche_=3F?=

Messages composites

Grâce au type MIME « multipart » le standard MIME permet de définir des messages composites, c'est-à-dire des messages comportant plusieurs pièces jointes, éventuellement emboîtées.

Pour ce faire, MIME permet de définir un séparateur appelé boundary. Il s'agit d'une chaîne arbitraire définie en attribut de l'entête Content-type :

Content-Type: multipart/mixed;
boundary="------------020005090303070203010601"

Chaque séparateur délimite un contenu commençant par les entêtes Content-Type et Content-Encoding. Il est essentiel que la valeur de ce séparateur n'existe pas dans le contenu du message.

Il existe plusieurs types de séparateurs :

  • multipart/mixed définit une suite de plusieurs éléments
  • multipart/alternative définit différentes alternatives pour une même information, par exemple un message

au format texte et HTML. Si le client de messagerie est capable et configuré pour l'afficher avec une mise en forme, il affichera
la version HTML, sinon il affichera la version texte.

  • multipart/parallel définit des données présenter en même temps (son et image par exemple).
  • multipart/signed définit une signature numérique pour les données du message
  • multipart/related définit des informations liées entre elles

Liste des types MIME

Les types MIME sont normalisés par un organisme appelé IANA (Internet Assigned Numbers Authority). Voici une liste non exhaustive des types MIME les plus courants

Type MIME Type de fichier Extension associée
application/atom+xml Fichiers au format ATOM atom
application/iges Fichiers CAS iges
application/javascript Fichiers Javascript js
application/dxf Fichiers AutoCAD dxf
application/mp4 Fichiers MPEG4 mp4
application/iges Format d'échange CAO IGES igs,iges
application/octet-stream Fichiers binaires non interprétés bin
application/msword Fichiers bureautique au format Microsoft Word doc
application/pdf Fichiers Adobe Acrobat pdf
application/postscript Fichiers PostScript ai,eps,ps
application/rtf Format de texte enrichi rtf
application/sgml Fichiers SGML sgml
application/vnd.ms-excel Fichiers tableur au format Microsoft Excel xls
application/vnd.ms-powerpoint Fichiers diaporama au format Microsoft Powerpoint ppt
application/xml fichier XML xml
application/x-tar Fichiers compressés tar tar
application/zip Fichiers compressés ZIP man
audio/basic Fichiers audio basiques au,snd
audio/mpeg Fichiers audio MPEG mpg,mp3
audio/mp4 Fichiers audio MPEG-4 mp4
audio/x-aiff Fichiers audio AIFF aif,aiff,aifc
audio/x-wav Fichiers audio Wave wav
image/gif Images gif man
image/jpeg Images JPEG jpg,jpeg,jpe
image/png Images PNG png
image/tiff Images Tiff tiff,tif
image/x-portable-bitmap Fichiers Bitmap PBM pbm
image/x-portable-graymap Fichiers Graymap PBM pgm
image/x-portable-pixmap Fichiers Pixmap PBM ppm
multipart/x-zip Fichiers archive zip zip
multipart/x-gzip Fichiers archive GNU zip gz,gzip
text/css Feuille de style css
text/csv Fichiers texte avec séparation des valeurs csv
text/html Fichiers HTML htm,html
text/plain Fichiers texte sans mise en forme txt,g,h,c,cc,hh,m,f90
text/richtext Fichiers texte enrichis rtx
text/rtf Fichiers texte au format Rich Text Format rtf
text/tab-separated-value Fichiers texte avec séparation des valeurs tsv
text/xml Fichiers XML xml
video/h264 Vidéos H.264 h264
video/dv Vidéos au format DV dv
video/mpeg Vidéos MPEG mpeg,mpg,mpe
video/quicktime Vidéos QuickTime qt,mov
video/msvideo Vidéos Microsoft Windows avi

Plus d'information

  • Liste officielle des types MIME (IANA - )
  • RFC principales :
    • RFC 2045: MIME Part One: Format of Internet Message Bodies
    • RFC 2046: MIME Part Two: Media Types
    • RFC 2047: MIME Part Three: Message Header Extensions for Non-ASCII Text
    • RFC 2048: MIME Part Four: Registration Procedures
    • RFC 2049: MIME Part Five: Conformance Criteria and Examples
  • RFC annexes :
    • RFC 1524: The formal description of mailcap files. Mailcap files describe how to handle media types.
    • RFC 2015: MIME Security with Pretty Good Privacy (PGP).
    • RFC 2110: MIME E-mail Encapsulation of Aggregate Documents, such as HTML (MHTML).
    • RFC 2111: Content-ID and Message-ID Uniform Resource Locators.
    • RFC 2112: The MIME Multipart/Related Content-type.
    • RFC 2183: Defines the syntax and sematics of the "Content-Disposition" header to convey presentational information.
    • RFC 2184: MIME Parameter Value and Encoded Word Extensions: Character Sets, Languages, and Continuations
Cet article est régulièrement mis à jour par des experts sous la
direction de Jean-François Pillou, fondateur de CommentCaMarche.
A voir également
Ce document intitulé « Standard MIME (Multipurpose Internet Mail Extensions) » issu de Comment Ça Marche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.