« Multipurpose Internet Mail Extensions » : différence entre les versions
clarifications, entre autres pour encodage du texte / encodage de transfert |
m Bien que appele le subjonctif |
||
(32 versions intermédiaires par 25 utilisateurs non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
{{ |
{{Titre en italique|en}} |
||
{{Redirect|MIME|homonymie=Mime (homonymie)}} |
{{Redirect|MIME|homonymie=Mime (homonymie)}} |
||
'''''{{ |
'''''{{langue|en|Multipurpose Internet Mail Extensions}}''''' (''MIME'') ou '''Extensions multifonctions du courrier Internet'''<ref>[http://www.deb.at/doc/manuals/debian-reference/debian-reference.fr.txt Manuel Debian].</ref> est un [[standard internet]] qui étend le [[format de données]] des [[Courrier électronique|courriels]] pour supporter des textes en différents [[codage des caractères]] autres que l'[[American Standard Code for Information Interchange|ASCII]], des contenus non textuels, des contenus multiples, et des informations d'en-tête en d'autres codages que l'[[American Standard Code for Information Interchange|ASCII]]. Les courriels étant généralement envoyés via le protocole [[Simple Mail Transfer Protocol|SMTP]] au format MIME, ces courriels sont souvent appelés courriels ''SMTP/MIME''. |
||
À l'origine, SMTP avait été prévu pour ne transférer que des fichiers textes (codés en [[American Standard Code for Information Interchange|ASCII]]). Avec l'apparition du [[multimédia]] et l'utilisation croissante des applications bureautiques, le besoin s'est fait sentir d'échanger, en plus des fichiers textes, des fichiers binaires (format des applications bureautiques, images, sons, fichiers compressés). |
À l'origine, SMTP avait été prévu pour ne transférer que des fichiers textes (codés en [[American Standard Code for Information Interchange|ASCII]]). Avec l'apparition du [[multimédia]] et l'utilisation croissante des applications bureautiques, le besoin s'est fait sentir d'échanger, en plus des fichiers textes, des [[Fichier binaire|fichiers binaires]] (format des applications bureautiques, images, sons, fichiers compressés). |
||
Les types de contenus définis par le standard MIME peuvent être utilisés à d'autres fins que l'envoi de courriels, dans les [[protocoles de communication]] comme le [[Hypertext Transfer Protocol|HTTP]] pour le {{ |
Les types de contenus définis par le standard MIME peuvent être utilisés à d'autres fins que l'envoi de courriels, dans les [[protocoles de communication]] comme le [[Hypertext Transfer Protocol|HTTP]] pour le {{langue|en|[[World Wide Web]]}}. |
||
MIME est initialement spécifié dans cinq [[Request for comments|RFC]] : RFC |
MIME est initialement spécifié dans cinq [[Request for comments|RFC]] : {{RFC|2045|titre=Multipurpose Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies|date=novembre 1996}}, {{RFC|2046|titre=Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types|date=novembre 1996}}, {{RFC|2047|titre=MIME (Multipurpose Internet Mail Extensions) Part Three: Message Header Extensions for Non-ASCII Text|date=novembre 1996}}, {{RFC|2048|titre=Multipurpose Internet Mail Extensions (MIME) Part Four: Registration Procedures|date=novembre 1996}}, {{RFC|2049|titre=Multipurpose Internet Mail Extensions (MIME) Part Five: Conformance Criteria and Examples|date=novembre 1996}}. La [[:rfc:2045|RFC 2045]] est complétée par la {{RFC|2077|titre=The Model Primary Content Type for Multipurpose Internet Mail Extensions|date=janvier 1997}}. La [[:rfc:2048|RFC 2048]], maintenant obsolète, est remplacée par les {{RFC|6838|titre=Media Type Specifications and Registration Procedures|date=janvier 2013}} et {{RFC|4289|titre=Multipurpose Internet Mail Extensions (MIME) Part Four: Registration Procedures|date=décembre 2005}}. |
||
== Introduction == |
== Introduction == |
||
Le protocole de base de transmission de courriels, SMTP, ne supporte que les caractères ASCII (qui font {{nombre|7|[[bit] |
Le protocole de base de transmission de courriels, SMTP, ne supporte que les caractères ASCII (qui font {{nombre|7|[[bit]]s}}). Cela limite les courriels aux messages qui n’incluent que ces caractères, soient ceux rédigés dans un nombre très restreint de langues, telles que l’[[anglais]], qui lui-même utilise pourtant occasionnellement des caractères hors ASCII. Les autres langues basés sur l’[[alphabet latin]] incluant des [[diacritique]]s ne sont pas supportés par l’ASCII, ces messages ne peuvent donc pas être correctement représentés dans des courriels basiques. |
||
MIME définit des mécanismes pour |
MIME définit des mécanismes pour l’envoi d'autres sortes d’informations, comme des textes utilisant des codages de caractères autres que l’ASCII (et pouvant donc être dans une autre langue que l’anglais), ou des données binaires (dont des fichiers contenant des [[image]]s, des [[Son musical|sons]], des [[cinéma|films]] ou des [[programmes informatiques]]). |
||
MIME est également un composant fondamental des protocoles de communications comme [[Hypertext Transfer Protocol|HTTP]], qui requièrent |
MIME est également un composant fondamental des protocoles de communications comme [[Hypertext Transfer Protocol|HTTP]], qui requièrent l’envoi de données dans le même contexte que l’envoi de courriels{{c'est-à-dire}}, même si ces données ne sont pas des courriels. L’intégration ou l’extraction des données au format MIME est généralement automatiquement effectuée par le [[client de messagerie]] ou par le [[serveur de messagerie électronique]] quand le courriel est envoyé ou reçu. |
||
Le format de base des courriels est défini dans la RFC |
Le format de base des courriels est défini dans la {{RFC|2822|titre=Internet Message Format|date=avril 2001}} qui est une [[Mise à jour (informatique)|mise à jour]] de la {{RFC|822|titre=STANDARD FOR THE FORMAT OF ARPA INTERNET TEXT MESSAGES|date=13 août 1982}}. Ces standards spécifient le format des en-têtes et du corps des courriels contenant du texte, ainsi que les en-têtes généraux comme « <code>To:</code> », « <code>Subject:</code> », « <code>From:</code> » ou « <code>Date:</code> ». MIME définit un ensemble d’en-têtes additionnels pour le type de contenu du message (« <code>Content‑Type:</code> ») et son ''encodage de transfert'' (« <code>Content-Transfer-Encoding:</code> »). L’encodage de transfert est la façon de traduire le contenu du message vers l’ASCII. Grâce à cette traduction, le contenu initial peut contenir des données {{nombre|8|bits}} arbitraires (texte en [[UTF-8]], fichier binaire, etc.). MIME définit également un mécanisme pour utiliser cette fonctionnalité dans les en-têtes du message ; ceci autorise par exemple des accents dans le sujet d’un courriel ou dans le nom d’un destinataire. |
||
MIME est extensible. Sa définition inclut une méthode pour enregistrer de nouveaux types de contenus ou |
MIME est extensible. Sa définition inclut une méthode pour enregistrer de nouveaux types de contenus ou d’autres valeurs d'attributs. |
||
Un des autres buts explicites de la définition de MIME est de ne pas avoir à changer les serveurs de messagerie électronique préexistants, et de permettre le fonctionnement correct des courriels de base avec les clients préexistants. Ce but est réalisé par le fait que les attributs de messages MIME sont optionnels et que le comportement par défaut est la création |
Un des autres buts explicites de la définition de MIME est de ne pas avoir à changer les serveurs de messagerie électronique préexistants, et de permettre le fonctionnement correct des courriels de base avec les clients préexistants. Ce but est réalisé par le fait que les attributs de messages MIME sont optionnels et que le comportement par défaut est la création d’un message textuel sans MIME qui peut être interprété correctement par un client. |
||
== En-têtes MIME == |
== En-têtes MIME == |
||
=== <code>MIME-Version</code> === |
=== <code>MIME-Version</code> === |
||
La présence de cet en-tête indique que le contenu du message est formaté en MIME. La valeur est typiquement « 1.0 » donc l'en-tête |
La présence de cet en-tête indique que le contenu du message est formaté en MIME. La valeur est typiquement « 1.0 », donc l'en-tête apparaît comme : |
||
MIME-Version: 1.0 |
|||
=== <code>Content-Type</code> === |
=== <code>Content-Type</code> === |
||
Cet en-tête indique le [[type de média internet]] du contenu du message, consistant en un ''type'' et un ''sous-type'', par exemple : |
|||
Content-Type: text/plain |
|||
MIME permet aux messages d'avoir plusieurs parties organisées sous forme d'une [[structure arborescente]], en utilisant un type « |
MIME permet aux messages d'avoir plusieurs parties organisées sous forme d'une [[structure arborescente]], en utilisant un type « <code>multipart</code> » pour les nœuds internes. |
||
Ce mécanisme supporte notamment : |
Ce mécanisme supporte notamment : |
||
* les messages en texte simple avec « |
* les messages en texte simple avec « <code>text/plain</code> » (la valeur par défaut de l'en-tête « <code>Content-Type:</code> ») ; |
||
* les messages en [[Hypertext Markup Language|HTML]] avec « |
* les messages en [[Hypertext Markup Language|HTML]] avec « <code>text/html</code> » ; |
||
* les contenus multiples avec « |
* les contenus multiples avec « <code>multipart/mixed</code> » : ceci permet l’envoi d’un message avec pièces jointes, le corps du message constituant une partie (de type « <code>text</code> »), de même que chaque pièce jointe ; généralement, on indique le nom d’une pièce jointe avec un en-tête « <code>Content-Disposition:</code> » (le type du fichier est alors identifié par le type MIME et son [[extension de nom de fichier|extension]]) ; |
||
* les contenus alternatifs avec « |
* les contenus alternatifs avec « <code>multipart/alternative</code> » : ceci permet l’envoi d’un message contenant plusieurs formats alternatifs (typiquement, texte simple et HTML), le receveur (ou son client de messagerie) choisit alors le format sous lequel il veut visualiser le message. |
||
=== <code>Content-Transfer-Encoding</code> === |
=== <code>Content-Transfer-Encoding</code> === |
||
La spécification du MIME (RFC 2045) définit un ensemble de méthodes ou ''encodages de transfert'' (rappelées dans [http://www.iana.org/assignments/transfer-encodings cette liste de l'IANA]) pour représenter des données quelconques sous forme de texte ASCII. L'en-tête MIME « |
La spécification du MIME ([[:rfc:2045|RFC 2045]]) définit un ensemble de méthodes ou ''encodages de transfert'' (rappelées dans [http://www.iana.org/assignments/transfer-encodings cette liste de l'IANA]) pour représenter des données quelconques sous forme de texte ASCII. L'en-tête MIME « <code>Content-Transfer-Encoding</code> » indique la méthode utilisée. Il peut avoir l’une des valeurs (non sensibles à la [[casse (typographie)|casse]]) suivantes : |
||
* appropriées pour l'usage avec SMTP : |
* appropriées pour l'usage avec SMTP : |
||
** '''<code>7bit</code>''' — aucune transformation, limité aux caractères de l’ASCII (valeurs 1 à 127) avec au plus {{nombre|998|octets}} par ligne et les caractères <code>CR</code> et <code>LF</code> (retour chariot et défilement de ligne, {{nobr|codes 13}} et 10 respectivement) réservés pour les fins de ligne (<code>CRLF</code>). C'est la valeur par défaut. |
** '''<code>7bit</code>''' — aucune transformation, limité aux caractères de l’ASCII (valeurs 1 à 127) avec au plus {{nombre|998|octets}} par ligne et les caractères <code>CR</code> et <code>LF</code> ([[retour chariot]] et défilement de ligne, {{nobr|codes 13}} et 10 respectivement) réservés pour les fins de ligne (<code>CRLF</code>). C'est la valeur par défaut. |
||
** '''<code>[[quoted-printable]]</code>''' — encode des données arbitraires dans un format qui satisfait les règles de ''7bit''. Étudié pour être efficace et lisible par un humain quand il est utilisé pour encoder |
** '''<code>[[quoted-printable]]</code>''' — encode des données arbitraires dans un format qui satisfait les règles de ''7bit''. Étudié pour être efficace et lisible par un humain quand il est utilisé pour encoder du texte comportant une majorité de caractères ASCII. |
||
** '''<code>[[base64]]</code>''' — encode des données arbitraires dans |
** '''<code>[[base64]]</code>''' — encode des données arbitraires dans un format qui satisfait les règles de ''7bit''. Sa taille est fixe par rapport à la taille des données initiales. Il est utilisé pour les données non textuelles ou des textes à base non ASCII. |
||
* appropriées pour les serveurs SMTP qui supportent le transport {{lien|8BITMIME}} comme {{lien|trad=Extended SMTP |lang=en |fr=extension SMTP}} : |
* appropriées pour les serveurs SMTP qui supportent le transport {{lien|8BITMIME}} comme {{lien|trad=Extended SMTP |lang=en |fr=extension SMTP}} : |
||
** '''<code>8bit</code>''' — aucune transformation, séquence d’octets quelconques avec au plus {{nombre|998|octets}} par ligne et les caractères <code>CR</code> et <code>LF</code> réservés pour les fins de ligne. |
** '''<code>8bit</code>''' — aucune transformation, séquence d’octets quelconques avec au plus {{nombre|998|octets}} par ligne et les caractères <code>CR</code> et <code>LF</code> réservés pour les fins de ligne. |
||
Ligne 51 : | Ligne 53 : | ||
Aucun encodage n'est spécialement spécifié pour l'envoi de données binaires arbitraires par les transports SMTP avec l'extension 8BITMIME. Les méthodes ''Base64'' ou ''Quoted-Printable'' (avec leurs inefficacités respectives) doivent être utilisées. Ces restrictions ne s'appliquent pas aux autres utilisations de MIME comme les [[service web|services web]] avec attachement MIME ou [[Message Transmission Optimization Mechanism|MTOM]]. |
Aucun encodage n'est spécialement spécifié pour l'envoi de données binaires arbitraires par les transports SMTP avec l'extension 8BITMIME. Les méthodes ''Base64'' ou ''Quoted-Printable'' (avec leurs inefficacités respectives) doivent être utilisées. Ces restrictions ne s'appliquent pas aux autres utilisations de MIME comme les [[service web|services web]] avec attachement MIME ou [[Message Transmission Optimization Mechanism|MTOM]]. |
||
== |
== Encodage du texte == |
||
Depuis la RFC 2822, les noms des en–têtes de messages et leurs valeurs sont toujours en caractères ASCII. Les valeurs qui contiennent des données non ASCII doivent utiliser la syntaxe '''<code>encoded-word</code>''' de MIME (RFC 2047) à la place des valeurs textuelles standards. Cette syntaxe utilise des chaînes de caractères ASCII aussi bien pour préciser l'[[Codage des caractères|encodage original des caractères]] (équivalent de l’attribut ''<code>charset</code>'' de l’en-tête ''<code>Content-Type:</code>'') que l’encodage de transfert (équivalent de l’en-tête ''<code>Content-Transfer-Encoding:</code>'') qui fait correspondre les données du codage des caractères aux caractères ASCII. |
|||
Les données textuelles (type « <code>text</code> ») sont écrites selon un certain ''[[codage des caractères|encodage de caractères]]'', par exemple [[latin-9]] ou [[UTF-8]]. Cet encodage peut être précisé avec l’attribut « <code>charset=</code> » de l’en-tête « <code>Content-Type:</code> ». Celui-ci peut prendre n’importe quelle valeur définie par l’[[IANA]]. Par exemple : |
|||
La forme est : « <code>=?encodage?transfert?texte?=</code> ». |
|||
* <code>encodage</code> peut être n'importe quel encodage de caractères enregistré par l'[[Internet Assigned Numbers Authority|IANA]]. Typiquement, c'est le même que pour le corps du message. |
|||
* <code>transfert</code> est une lettre désignant la méthode de transfert : soit « <code>Q</code> » pour ''Q-encoding'' — encodage similaire à ''{{lang|en|[[Quoted-Printable]]}}'' —, soit « <code>B</code> » pour ''[[Base64]]''. |
|||
* <code>texte</code> est le texte encodé en ''Q-encoding'' ou ''Base64''. |
|||
Content-Type: text/plain; charset=utf-8 |
|||
=== Différence entre Q-encoding et {{lang|en|Quoted-Printable}} === |
|||
Cet encodage ne doit pas être confondu avec l’''encodage de transfert'', précisé par l’en-tête « <code>Content-Transfer-Encoding:</code> ». Dans le cas d’un contenu textuel, les deux encodages sont appliqués successivement. Par exemple : |
|||
Les codes ASCII pour le point d'interrogation (<code>?</code>) et le signe égal (<code>=</code>) ne devraient pas être représentés directement puisqu'ils sont utilisés pour délimiter les mots encodés. Le code ASCII pour le caractère espace ne devrait pas non plus être utilisé car il peut provoquer des erreurs sur les anciens encodeurs comme une séparation de mot non désirée. Pour rendre l'encodage plus léger et plus aisé à lire, le caractère ''{{lang|en|[[underscore]]}}'' (« <code>_</code> ») est utilisé pour représenter l'espace. Par conséquent, le caractère ''{{lang|en|underscore}}'' ne peut plus être représenté directement. L'utilisation de mots encodés dans certaines parties des en-têtes impose des restrictions sur les caractères à représenter directement. |
|||
Content-Type: text/plain; charset=utf-8 |
|||
Par exemple, <code>Subject: =?utf-8?Q?=C2=A1Hola,_se=C3=B1or!?=</code> est interprété comme « Subject: ¡Hola, señor! ». |
|||
Content-Transfer-Encoding: quoted-printable |
|||
Ceci est un message encod=C3=A9 en UTF-8, puis transform=C3=A9 en ASCII par |
|||
la m=C3=A9thode "Quoted-Printable". |
|||
Dans cet exemple, la lettre « é » s’encode en UTF-8 par deux octets de valeurs hexadécimales C3 et A9, qui sont à leur tour encodés en ''Quoted-Printable'' par la séquence « <code>=C3=A9</code> ». |
|||
Le format des mots encodés n'est pas utilisé pour les noms des en-têtes (par exemple <code>Subject:</code>). Ces noms d'en-têtes sont toujours en anglais dans le message. Quand le message est visualisé sur un client de courriels non anglophone, les noms d'en-têtes peuvent être traduits par le client. |
|||
== |
== Mots encodés == |
||
Depuis la [[:rfc:2822|RFC 2822]], les noms des en–têtes de messages et leurs valeurs sont toujours en caractères ASCII. Les valeurs qui contiennent des données non ASCII doivent utiliser la syntaxe dite « ''encoded-word'' » de MIME ([[:rfc:2047|RFC 2047]]) à la place des valeurs textuelles standards. Cette syntaxe utilise des [[Chaîne de caractères|chaînes de caractères]] ASCII aussi bien pour préciser l'encodage original du texte (équivalent de l’attribut <code>charset=</code> de l’en-tête <code>Content-Type:</code>) que l’encodage de transfert (équivalent de l’en-tête <code>Content-Transfer-Encoding:</code>). |
|||
Un message MIME multi-partie contient une séparation dans l'en-tête « <code>Content-type:</code> ». Cette séparation, qui ne doit ê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 : |
|||
<pre> |
|||
Content-type: multipart/mixed; boundary="'''frontier'''" |
|||
MIME-version: 1.0 |
|||
La syntaxe est : |
|||
This is a multi-part message in MIME format. |
|||
=?''encodage''?''méthode''?''texte''?= |
|||
--'''frontier''' |
|||
* <code>''encodage''</code> peut être n'importe quel encodage de caractères enregistré par l'[[Internet Assigned Numbers Authority|IANA]]. Typiquement, c'est le même que pour le corps du message. |
|||
Content-type: text/plain |
|||
* <code>''méthode''</code> est une lettre désignant l’encodage de transfert : soit « <code>Q</code> » pour ''Q-encoding'' — encodage similaire à ''{{langue|en|[[Quoted-Printable]]}}'' —, soit « <code>B</code> » pour ''[[Base64]]''. |
|||
* <code>''texte''</code> est le texte encodé. |
|||
=== Différence entre ''Q-encoding'' et ''{{langue|en|Quoted-Printable}}'' === |
|||
This is the body of the message. |
|||
Les codes ASCII pour le point d'interrogation (<code>?</code>) et le signe égal (<code>=</code>) ne devraient pas être représentés directement puisqu'ils sont utilisés pour délimiter les mots encodés. Le code ASCII pour le caractère espace ne devrait pas non plus être utilisé car il peut provoquer des erreurs sur les anciens encodeurs comme une séparation de mot non désirée. Pour rendre l'encodage plus léger et plus aisé à lire, le caractère ''{{langue|en|[[Tiret bas|underscore]]}}'' (« <code>_</code> ») est utilisé pour représenter l'espace. Par conséquent, le caractère ''{{langue|en|underscore}}'' ne peut plus être représenté directement. L'utilisation de mots encodés dans certaines parties des en-têtes impose des restrictions sur les caractères à représenter directement. |
|||
--'''frontier''' |
|||
Content-type: application/octet-stream |
|||
Content-transfer-encoding: base64 |
|||
Par exemple, |
|||
PGh0bWw+CiAgPGhlYWQ+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPHA+VGhpcyBpcyB0aGUg |
|||
Subject: =?utf-8?Q?=C2=A1Hola, _se=C3=B1or!?= |
|||
Ym9keSBvZiB0aGUgbWVzc2FnZS48L3A+CiAgPC9ib2R5Pgo8L2h0bWw+Cg== |
|||
est interprété comme : |
|||
: Subject: ¡Hola, señor! |
|||
Le format des mots encodés n'est pas utilisé pour les noms des en-têtes (par exemple « <code>Subject:</code> »). Ces noms d'en-têtes sont toujours en anglais dans le message. Quand le message est visualisé sur un client de courriels non anglophone, les noms d'en-têtes peuvent être traduits par le client. |
|||
--'''frontier'''-- |
|||
== Message en plusieurs parties == |
|||
Un message MIME multi-partie spécifie une ligne de séparation dans l'en-tête « <code>Content-type:</code> », ''via'' l’attribut « <code>boundary=</code> ». Cette séparation, qui ne doit apparaître nulle part ailleurs, est placée entre les parties et au début et à la fin du corps du message comme suit : |
|||
<pre> |
|||
Content-type: multipart/mixed; boundary="''frontière''" |
|||
MIME-version: 1.0 |
|||
This is a multi-part message in MIME format. |
|||
--''frontière'' |
|||
Content-type: text/plain |
|||
This is the body of the message. |
|||
--''frontière'' |
|||
Content-type: application/octet-stream |
|||
Content-transfer-encoding: base64 |
|||
PGh0bWw+CiAgPGhlYWQ+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPHA+VGhpcyBpcyB0aGUg |
|||
Ym9keSBvZiB0aGUgbWVzc2FnZS48L3A+CiAgPC9ib2R5Pgo8L2h0bWw+Cg== |
|||
--''frontière''-- |
|||
</pre> |
</pre> |
||
Chacune de ces parties consiste en |
Chacune de ces parties consiste en son propre en-tête de contenu (zéro, un ou plusieurs champs d'en-tête <code>Content-*:</code>) et un corps. Des parties multiples peuvent être incluses dans d'autres parties multiples avec pour chacune leur propre frontière. Le champ <code>Content-Transfer-Encoding:</code> d'un type à parties multiples doit être « <code>7bit</code> », « <code>8bit</code> » ou « <code>binary</code> » pour éviter les problèmes de décodage des différentes couches de parties multiples. Le bloc multi-parties n'a 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 : |
Notes : |
||
Ligne 95 : | Ligne 118 : | ||
=== Sous-types === |
=== Sous-types === |
||
Le standard MIME définit plusieurs sous |
Le standard MIME définit plusieurs sous-types de messages multi-parties 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 « <code>Content-type:</code> » du message englobant. Par exemple, un message MIME multi-parties utilisant le sous-type « <code>digest</code> » devrait avoir son en-tête « <code>Content-Type:</code> » à « <code>multipart/digest</code> ». |
||
La {{laquelle|RFC}} définit initialement quatre sous-types : |
La {{laquelle|RFC}} définit initialement quatre sous-types : « <code>mixed</code> », « <code>alternate</code> », « <code>digest</code> » et « <code>parallel</code> ». Une application doit supporter au moins les sous-types « <code>mixed</code> » et « <code>digest</code> », les autres sont optionnels. Des sous-types additionnels comme « <code>signed</code> » ou « <code>form-data</code> » ont été définis dans d'autres {{lesquelles|RFC}}. |
||
Les sous-types suivants sont ceux principalement utilisés : |
Les sous-types suivants sont ceux principalement utilisés : |
||
==== |
==== <code>mixed</code> ==== |
||
Le type « <code>multipart/mixed</code> » (défini dans [http://tools.ietf.org/html/rfc2046#section-5.1.3 RFC2046, {{nobr|Section 5.1.3}}]) est utilisé pour envoyer des fichiers avec différents en-têtes « <code>Content-type:</code> » (comme pièces-jointes). 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'un en-tête « <code>Content-disposition:</code> » ne spécifie le contraire). Sinon les fichiers sont vus comme des pièces jointes. Le type de contenu par défaut de ces parties est « <code>text/plain</code> ». |
|||
La RFC spécifie également que tous les sous-types de |
La RFC spécifie également que tous les sous-types de « <code>multipart</code> » non reconnus par une implémentation doivent être traités de la même manière que « <code>multipart/mixed</code> ». |
||
==== <code>digest</code> ==== |
|||
Défini dans [http://tools.ietf.org/html/rfc2046#section-5.1.3 RFC2046, {{nobr|Section 5.1.3}}]. |
|||
Le type « <code>multipart/digest</code> » (défini dans [http://tools.ietf.org/html/rfc2046#section-5.1.5 RFC2046, {{nobr|Section 5.1.5}}]) est la manière simple d'envoyer des messages à textes multiples. Le type de contenu par défaut est « <code>message/rfc822</code> ». |
|||
==== |
==== <code>alternative</code> ==== |
||
Le type « <code>multipart/alternative</code> » (défini dans [http://tools.ietf.org/html/rfc2046#section-5.1.4 RFC2046, {{nobr|Section 5.1.4}}]) 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 meilleure représentation qu'il est capable de traiter, en général, la dernière de la liste. |
|||
''<code>multipart/digest</code>'' est la manière simple d'envoyer des messages à textes multiples. Le type de contenu par défaut est « <code>message/rfc822</code> ». |
|||
Comme un client ne veut généralement pas envoyer un contenu moins 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 type « <code>multipart</code> » car c'est la partie visible en premier. |
|||
Défini dans [http://tools.ietf.org/html/rfc2046#section-5.1.5 RFC2046, {{nobr|Section 5.1.5}}]. |
|||
L'utilisation principale du type « <code>multipart/alternative</code> » est l'envoi de courriels au format [[Hypertext Markup Language|HTML]] avec son équivalent au format texte pour conserver la lisibilité du message pour un client courriel ne pouvant afficher de HTML (client texte). |
|||
==== Alternative ==== |
|||
''<code>multipart/alternative</code>'' 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 meilleure représentation qu'il est capable de traiter, en général, la dernière de la liste. |
|||
Bien que chaque partie du message soit censée représenter le même contenu, rien ne le garantit. Par exemple, il est plus facile pour un [[pourriel|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é. |
|||
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 <code>multipart</code> car c'est la partie visible en premier. |
|||
==== <code>related</code> ==== |
|||
L'utilisation principale du type ''<code>multipart/alternative</code>'' est l'envoi de courriels au format [[Hypertext Markup Language|HTML]] avec son équivalent au format texte pour conserver la lisibilité du message pour un client courriel ne pouvant afficher de HTML (client texte). |
|||
Le type « <code>multipart/related</code> » (défini dans [http://tools.ietf.org/html/rfc2387 RFC2387]) 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 « <code>Content-ID:</code> »). La syntaxe des références n'est pas spécifiée, elle est laissée à l'intention du protocole utilisé. |
|||
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 [[pourriel|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 [http://tools.ietf.org/html/rfc2046#section-5.1.4 RFC2046, {{nobr|Section 5.1.4}}]. |
|||
==== Related ==== |
|||
''<code>multipart/related</code>'' 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 ''<code>Content-ID</code>''). 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. |
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. |
||
==== <code>report</code> ==== |
|||
Défini dans [http://tools.ietf.org/html/rfc2387 RFC2387]. |
|||
Le type « <code>multipart/report</code> » (défini dans [http://tools.ietf.org/html/rfc3462 RFC3462]) représente un message qui contient des données formatées pour être lues par un serveur de courriels. Il contient une partie de type « <code>text/plain</code> » (ou tout autre contenu facilement lisible) et une autre de type « <code>message/delivery-status</code> » qui contient les données formatées pour le serveur de courriels. |
|||
==== Report ==== |
|||
''<code>multipart/report</code>'' 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 ''<code>text/plain</code>'' (ou tout autre contenu facilement lisible) et un ''<code>message/delivery-status</code>'' qui contient les données formatées pour le serveur de courriels. |
|||
Défini dans [http://tools.ietf.org/html/rfc3462 RFC3462]. |
|||
==== Signed ==== |
|||
''<code>multipart/signed</code>'' 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 ''<code>application/pgp-signature</code>'' ou ''<code>application/x-pkcs7-signature</code>''. |
|||
Défini dans [http://tools.ietf.org/html/rfc1847#section-2.1 RFC1847, {{nobr|Section 2.1}}]. |
|||
==== Encrypted ==== |
|||
''<code>multipart/encrypted</code>'' est utilisé pour envoyer un contenu [[Chiffrement|chiffré]]. Sa première partie définit les informations nécessaires pour décrypter la seconde partie (''<code>application/octet-stream</code>''). |
|||
==== <code>signed</code> ==== |
|||
Défini dans [http://tools.ietf.org/html/rfc1847#section-2.2 RFC1847, {{nobr|Section 2.2}}]. |
|||
Le type « <code>multipart/signed</code> » (défini dans [http://tools.ietf.org/html/rfc1847#section-2.1 RFC1847, {{nobr|Section 2.1}}]) est utilisé pour attacher une [[signature numérique]] à un message. Il est composé de deux parties : le corps du message et la 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 « <code>application/pgp-signature</code> » ou « <code>application/x-pkcs7-signature</code> ». |
|||
==== |
==== <code>encrypted</code> ==== |
||
Le type « <code>multipart/encrypted</code> » (défini dans [http://tools.ietf.org/html/rfc1847#section-2.2 RFC1847, {{nobr|Section 2.2}}]) est utilisé pour envoyer un contenu [[Chiffrement|chiffré]]. Sa première partie définit les informations nécessaires pour déchiffrer sa seconde partie (de type « <code>application/octet-stream</code> »). |
|||
''<code>multipart/form-data</code>'' est utilisé pour envoyer les données d'un formulaire. Défini à l'origine comme une partie de {{nobr|[[Hypertext Markup Language|HTML]] 4.0}}, il est plus couramment utilisé pour envoyer des fichiers via [[Hypertext Transfer Protocol|HTTP]]. |
|||
==== <code>form-data</code> ==== |
|||
Défini dans [http://tools.ietf.org/html/rfc2388 RFC2388]. |
|||
Le type « <code>multipart/form-data</code> » (défini dans [http://tools.ietf.org/html/rfc2388 RFC2388]) est utilisé pour envoyer les données d'un formulaire. Défini à l'origine comme une partie de {{nobr|[[Hypertext Markup Language|HTML]] 4.0}}, il est plus couramment utilisé pour envoyer des fichiers via [[Hypertext Transfer Protocol|HTTP]]. |
|||
== Références == |
== Références == |
||
{{Références}} |
{{Références}} |
||
; RFC 1847 : ''{{ |
; [[:rfc:1847|RFC 1847]] : ''{{langue|en|Security Multiparts for MIME: Multipart/Signed and Multipart/Encrypted}}'' |
||
; [[:rfc:2231|RFC 2231]] : ''{{langue|en|MIME Parameter Value and Encoded Word Extensions: Character Sets, Languages, and Continuations. N. Freed, K. Moore. November 1997.}}'' |
|||
; RFC 2045 : ''{{lang|en|MIME Part One: Format of Internet Message Bodies.}}'' |
|||
; [[:rfc:2387|RFC 2387]] : ''{{langue|en|The MIME Multipart/Related Content-type}}'' |
|||
; RFC 2046 : ''{{lang|en|MIME Part Two: Media Types. N. Freed, {{lien|Nathaniel Borenstein}}. November 1996.}}'' |
|||
; RFC 2047 : ''{{lang|en|MIME Part Three: Message Header Extensions for Non-ASCII Text. {{lien|Keith Moore}}. November 1996.}}'' |
|||
; RFC 4288 : ''{{lang|en|MIME Part Four: Media Type Specifications and Registration Procedures.}}'' |
|||
; RFC 4289 : ''{{lang|en|MIME Part Four: Registration Procedures. N. Freed, J. Klensin. December 2005.}}'' |
|||
; RFC 2049 : ''{{lang|en|MIME Part Five: Conformance Criteria and Examples. N. Freed, N. Borenstein. November 1996.}}'' |
|||
; RFC 2231 : ''{{lang|en|MIME Parameter Value and Encoded Word Extensions: Character Sets, Languages, and Continuations. N. Freed, K. Moore. November 1997.}}'' |
|||
; RFC 2387 : ''{{lang|en|The MIME Multipart/Related Content-type}}'' |
|||
== Voir aussi == |
== Voir aussi == |
||
Ligne 167 : | Ligne 168 : | ||
* [[Courrier électronique]] |
* [[Courrier électronique]] |
||
* [[MIME Encapsulation of Aggregate Documents, such as HTML|MHTML]] |
* [[MIME Encapsulation of Aggregate Documents, such as HTML|MHTML]] |
||
* [[S/MIME|S/MIME ({{ |
* [[S/MIME|S/MIME ({{langue|en|Secure MIME}})]] |
||
* [[File (Unix)|<code>file</code>]] est une commande Unix qui détermine le type MIME de fichiers. |
|||
=== Liens externes === |
=== Liens externes === |
||
Ligne 174 : | Ligne 176 : | ||
{{Palette|Modèle OSI|Schéma d'URI}} |
{{Palette|Modèle OSI|Schéma d'URI}} |
||
{{Portail|télécommunications}} |
{{Portail|télécommunications|Internet}} |
||
[[Catégorie:Courrier électronique]] |
[[Catégorie:Courrier électronique]] |
Dernière version du 11 mai 2024 à 08:44
Multipurpose Internet Mail Extensions (MIME) ou Extensions multifonctions du courrier Internet[1] est un standard internet qui étend le format de données des courriels pour supporter des textes en différents codage des caractères autres que l'ASCII, des contenus non textuels, des contenus multiples, et des informations d'en-tête en d'autres codages que l'ASCII. Les courriels étant généralement envoyés via le protocole SMTP au format MIME, ces courriels sont souvent appelés courriels SMTP/MIME.
À l'origine, SMTP avait été prévu pour ne transférer que des fichiers textes (codés en ASCII). Avec l'apparition du multimédia et l'utilisation croissante des applications bureautiques, le besoin s'est fait sentir d'échanger, en plus des fichiers textes, des fichiers binaires (format des applications bureautiques, images, sons, fichiers compressés).
Les types de contenus définis par le standard MIME peuvent être utilisés à d'autres fins que l'envoi de courriels, dans les protocoles de communication comme le HTTP pour le World Wide Web.
MIME est initialement spécifié dans cinq RFC : RFC 2045[2], RFC 2046[3], RFC 2047[4], RFC 2048[5], RFC 2049[6]. La RFC 2045 est complétée par la RFC 2077[7]. La RFC 2048, maintenant obsolète, est remplacée par les RFC 6838[8] et RFC 4289[9].
Introduction
[modifier | modifier le code]Le protocole de base de transmission de courriels, SMTP, ne supporte que les caractères ASCII (qui font 7 bits). Cela limite les courriels aux messages qui n’incluent que ces caractères, soient ceux rédigés dans un nombre très restreint de langues, telles que l’anglais, qui lui-même utilise pourtant occasionnellement des caractères hors ASCII. Les autres langues basés sur l’alphabet latin incluant des diacritiques ne sont pas supportés par l’ASCII, ces messages ne peuvent donc pas être correctement représentés dans des courriels basiques.
MIME définit des mécanismes pour l’envoi d'autres sortes d’informations, comme des textes utilisant des codages de caractères autres que l’ASCII (et pouvant donc être dans une autre langue que l’anglais), ou des données binaires (dont des fichiers contenant des images, des sons, des films ou des programmes informatiques).
MIME est également un composant fondamental des protocoles de communications comme HTTP, qui requièrent l’envoi de données dans le même contexte que l’envoi de courriels[C'est-à-dire ?], même si ces données ne sont pas des courriels. L’intégration ou l’extraction des données au format MIME est généralement automatiquement effectuée par le client de messagerie ou par le serveur de messagerie électronique quand le courriel est envoyé ou reçu.
Le format de base des courriels est défini dans la RFC 2822[10] qui est une mise à jour de la RFC 822[11]. Ces standards spécifient le format des en-têtes et du corps des courriels contenant du texte, ainsi que les en-têtes généraux comme « To:
», « Subject:
», « From:
» ou « Date:
». MIME définit un ensemble d’en-têtes additionnels pour le type de contenu du message (« Content‑Type:
») et son encodage de transfert (« Content-Transfer-Encoding:
»). L’encodage de transfert est la façon de traduire le contenu du message vers l’ASCII. Grâce à cette traduction, le contenu initial peut contenir des données 8 bits arbitraires (texte en UTF-8, fichier binaire, etc.). MIME définit également un mécanisme pour utiliser cette fonctionnalité dans les en-têtes du message ; ceci autorise par exemple des accents dans le sujet d’un courriel ou dans le nom d’un destinataire.
MIME est extensible. Sa définition inclut une méthode pour enregistrer de nouveaux types de contenus ou d’autres valeurs d'attributs.
Un des autres buts explicites de la définition de MIME est de ne pas avoir à changer les serveurs de messagerie électronique préexistants, et de permettre le fonctionnement correct des courriels de base avec les clients préexistants. Ce but est réalisé par le fait que les attributs de messages MIME sont optionnels et que le comportement par défaut est la création d’un message textuel sans MIME qui peut être interprété correctement par un client.
En-têtes MIME
[modifier | modifier le code]MIME-Version
[modifier | modifier le code]La présence de cet en-tête indique que le contenu du message est formaté en MIME. La valeur est typiquement « 1.0 », donc l'en-tête apparaît comme :
MIME-Version: 1.0
Content-Type
[modifier | modifier le code]Cet en-tête indique le type de média internet du contenu du message, consistant en un type et un sous-type, par exemple :
Content-Type: text/plain
MIME permet aux messages d'avoir plusieurs parties organisées sous forme d'une structure arborescente, en utilisant un type « multipart
» pour les nœuds internes.
Ce mécanisme supporte notamment :
- les messages en texte simple avec «
text/plain
» (la valeur par défaut de l'en-tête «Content-Type:
») ; - les messages en HTML avec «
text/html
» ; - les contenus multiples avec «
multipart/mixed
» : ceci permet l’envoi d’un message avec pièces jointes, le corps du message constituant une partie (de type «text
»), de même que chaque pièce jointe ; généralement, on indique le nom d’une pièce jointe avec un en-tête «Content-Disposition:
» (le type du fichier est alors identifié par le type MIME et son extension) ; - les contenus alternatifs avec «
multipart/alternative
» : ceci permet l’envoi d’un message contenant plusieurs formats alternatifs (typiquement, texte simple et HTML), le receveur (ou son client de messagerie) choisit alors le format sous lequel il veut visualiser le message.
Content-Transfer-Encoding
[modifier | modifier le code]La spécification du MIME (RFC 2045) définit un ensemble de méthodes ou encodages de transfert (rappelées dans cette liste de l'IANA) pour représenter des données quelconques sous forme de texte ASCII. L'en-tête MIME « Content-Transfer-Encoding
» indique la méthode utilisée. Il peut avoir l’une des valeurs (non sensibles à la casse) suivantes :
- appropriées pour l'usage avec SMTP :
7bit
— aucune transformation, limité aux caractères de l’ASCII (valeurs 1 à 127) avec au plus 998 octets par ligne et les caractèresCR
etLF
(retour chariot et défilement de ligne, codes 13 et 10 respectivement) réservés pour les fins de ligne (CRLF
). C'est la valeur par défaut.quoted-printable
— encode des données arbitraires dans un format qui satisfait les règles de 7bit. Étudié pour être efficace et lisible par un humain quand il est utilisé pour encoder du texte comportant une majorité de caractères ASCII.base64
— encode des données arbitraires dans un format qui satisfait les règles de 7bit. Sa taille est fixe par rapport à la taille des données initiales. Il est utilisé pour les données non textuelles ou des textes à base non ASCII.
- appropriées pour les serveurs SMTP qui supportent le transport 8BITMIME (en) comme extension SMTP (en) :
8bit
— aucune transformation, séquence d’octets quelconques avec au plus 998 octets par ligne et les caractèresCR
etLF
réservés pour les fins de ligne.
- non appropriée avec SMTP :
binary
— aucune transformation, séquence quelconque d'octets. Non utilisable avec les courriels SMTP.
Aucun encodage n'est spécialement spécifié pour l'envoi de données binaires arbitraires par les transports SMTP avec l'extension 8BITMIME. Les méthodes Base64 ou Quoted-Printable (avec leurs inefficacités respectives) doivent être utilisées. Ces restrictions ne s'appliquent pas aux autres utilisations de MIME comme les services web avec attachement MIME ou MTOM.
Encodage du texte
[modifier | modifier le code]Les données textuelles (type « text
») sont écrites selon un certain encodage de caractères, par exemple latin-9 ou UTF-8. Cet encodage peut être précisé avec l’attribut « charset=
» de l’en-tête « Content-Type:
». Celui-ci peut prendre n’importe quelle valeur définie par l’IANA. Par exemple :
Content-Type: text/plain; charset=utf-8
Cet encodage ne doit pas être confondu avec l’encodage de transfert, précisé par l’en-tête « Content-Transfer-Encoding:
». Dans le cas d’un contenu textuel, les deux encodages sont appliqués successivement. Par exemple :
Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Ceci est un message encod=C3=A9 en UTF-8, puis transform=C3=A9 en ASCII par la m=C3=A9thode "Quoted-Printable".
Dans cet exemple, la lettre « é » s’encode en UTF-8 par deux octets de valeurs hexadécimales C3 et A9, qui sont à leur tour encodés en Quoted-Printable par la séquence « =C3=A9
».
Mots encodés
[modifier | modifier le code]Depuis la RFC 2822, les noms des en–têtes de messages et leurs valeurs sont toujours en caractères ASCII. Les valeurs qui contiennent des données non ASCII doivent utiliser la syntaxe dite « encoded-word » de MIME (RFC 2047) à la place des valeurs textuelles standards. Cette syntaxe utilise des chaînes de caractères ASCII aussi bien pour préciser l'encodage original du texte (équivalent de l’attribut charset=
de l’en-tête Content-Type:
) que l’encodage de transfert (équivalent de l’en-tête Content-Transfer-Encoding:
).
La syntaxe est :
=?encodage?méthode?texte?=
encodage
peut être n'importe quel encodage de caractères enregistré par l'IANA. Typiquement, c'est le même que pour le corps du message.méthode
est une lettre désignant l’encodage de transfert : soit «Q
» pour Q-encoding — encodage similaire à Quoted-Printable —, soit «B
» pour Base64.texte
est le texte encodé.
Différence entre Q-encoding et Quoted-Printable
[modifier | modifier le code]Les codes ASCII pour le point d'interrogation (?
) et le signe égal (=
) ne devraient pas être représentés directement puisqu'ils sont utilisés pour délimiter les mots encodés. Le code ASCII pour le caractère espace ne devrait pas non plus être utilisé car il peut provoquer des erreurs sur les anciens encodeurs comme une séparation de mot non désirée. Pour rendre l'encodage plus léger et plus aisé à lire, le caractère underscore (« _
») est utilisé pour représenter l'espace. Par conséquent, le caractère underscore ne peut plus être représenté directement. L'utilisation de mots encodés dans certaines parties des en-têtes impose des restrictions sur les caractères à représenter directement.
Par exemple,
Subject: =?utf-8?Q?=C2=A1Hola, _se=C3=B1or!?=
est interprété comme :
- Subject: ¡Hola, señor!
Le format des mots encodés n'est pas utilisé pour les noms des en-têtes (par exemple « Subject:
»). Ces noms d'en-têtes sont toujours en anglais dans le message. Quand le message est visualisé sur un client de courriels non anglophone, les noms d'en-têtes peuvent être traduits par le client.
Message en plusieurs parties
[modifier | modifier le code]Un message MIME multi-partie spécifie une ligne de séparation dans l'en-tête « Content-type:
», via l’attribut « boundary=
». Cette séparation, qui ne doit apparaître nulle part ailleurs, est placée entre les parties et au début et à la fin du corps du message comme suit :
Content-type: multipart/mixed; boundary="''frontière''" MIME-version: 1.0 This is a multi-part message in MIME format. --''frontière'' Content-type: text/plain This is the body of the message. --''frontière'' Content-type: application/octet-stream Content-transfer-encoding: base64 PGh0bWw+CiAgPGhlYWQ+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPHA+VGhpcyBpcyB0aGUg Ym9keSBvZiB0aGUgbWVzc2FnZS48L3A+CiAgPC9ib2R5Pgo8L2h0bWw+Cg== --''frontière''--
Chacune de ces parties consiste en son 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 incluses dans d'autres parties multiples avec pour chacune leur propre frontière. Le champ Content-Transfer-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'a 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 clients 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 longue chaîne de caractères aléatoires.
Sous-types
[modifier | modifier le code]Le standard MIME définit plusieurs sous-types de messages multi-parties 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[Laquelle ?] définit initialement quatre sous-types : « mixed
», « alternate
», « digest
» et « parallel
». Une application doit supporter au moins les sous-types « mixed
» et « digest
», les autres sont optionnels. Des sous-types additionnels comme « signed
» ou « form-data
» ont été définis dans d'autres RFC[Lesquelles ?].
Les sous-types suivants sont ceux principalement utilisés :
mixed
[modifier | modifier le code]Le type « multipart/mixed
» (défini dans RFC2046, Section 5.1.3) est utilisé pour envoyer des fichiers avec différents en-têtes « Content-type:
» (comme pièces-jointes). 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'un en-tête « Content-disposition:
» ne spécifie le contraire). Sinon les fichiers sont vus comme des pièces jointes. Le type de contenu par défaut de ces parties est « text/plain
».
La RFC spécifie également que tous les sous-types de « multipart
» non reconnus par une implémentation doivent être traités de la même manière que « multipart/mixed
».
digest
[modifier | modifier le code]Le type « multipart/digest
» (défini dans RFC2046, Section 5.1.5) est la manière simple d'envoyer des messages à textes multiples. Le type de contenu par défaut est « message/rfc822
».
alternative
[modifier | modifier le code]Le type « multipart/alternative
» (défini dans RFC2046, Section 5.1.4) 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 meilleure représentation qu'il est capable de traiter, en général, la dernière de la liste.
Comme un client ne veut généralement pas envoyer un contenu moins 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 type « 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 soit 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é.
related
[modifier | modifier le code]Le type « multipart/related
» (défini dans RFC2387) 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.
report
[modifier | modifier le code]Le type « multipart/report
» (défini dans RFC3462) représente un message qui contient des données formatées pour être lues par un serveur de courriels. Il contient une partie de type « text/plain
» (ou tout autre contenu facilement lisible) et une autre de type « message/delivery-status
» qui contient les données formatées pour le serveur de courriels.
signed
[modifier | modifier le code]Le type « multipart/signed
» (défini dans RFC1847, Section 2.1) est utilisé pour attacher une signature numérique à un message. Il est composé de deux parties : le corps du message et la 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
».
encrypted
[modifier | modifier le code]Le type « multipart/encrypted
» (défini dans RFC1847, Section 2.2) est utilisé pour envoyer un contenu chiffré. Sa première partie définit les informations nécessaires pour déchiffrer sa seconde partie (de type « application/octet-stream
»).
form-data
[modifier | modifier le code]Le type « multipart/form-data
» (défini dans RFC2388) est utilisé pour envoyer les données d'un formulaire. Défini à l'origine comme une partie de HTML 4.0, il est plus couramment utilisé pour envoyer des fichiers via HTTP.
Références
[modifier | modifier le code]- Manuel Debian.
- (en) « Multipurpose Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies », Request for comments no 2045,
- (en) « Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types », Request for comments no 2046,
- (en) « MIME (Multipurpose Internet Mail Extensions) Part Three: Message Header Extensions for Non-ASCII Text », Request for comments no 2047,
- (en) « Multipurpose Internet Mail Extensions (MIME) Part Four: Registration Procedures », Request for comments no 2048,
- (en) « Multipurpose Internet Mail Extensions (MIME) Part Five: Conformance Criteria and Examples », Request for comments no 2049,
- (en) « The Model Primary Content Type for Multipurpose Internet Mail Extensions », Request for comments no 2077,
- (en) « Media Type Specifications and Registration Procedures », Request for comments no 6838,
- (en) « Multipurpose Internet Mail Extensions (MIME) Part Four: Registration Procedures », Request for comments no 4289,
- (en) « Internet Message Format », Request for comments no 2822,
- (en) « STANDARD FOR THE FORMAT OF ARPA INTERNET TEXT MESSAGES », Request for comments no 822,
- RFC 1847
- Security Multiparts for MIME: Multipart/Signed and Multipart/Encrypted
- RFC 2231
- MIME Parameter Value and Encoded Word Extensions: Character Sets, Languages, and Continuations. N. Freed, K. Moore. November 1997.
- RFC 2387
- The MIME Multipart/Related Content-type
Voir aussi
[modifier | modifier le code]Articles connexes
[modifier | modifier le code]- Type de média internet
- Courrier électronique
- MHTML
- S/MIME (Secure MIME)
file
est une commande Unix qui détermine le type MIME de fichiers.