← RFC Reference

RFC 2049 : MIME Partie 5 — Critères de conformité et exemples

Voie de normalisation MIME — Extensions Multipurposes Internet Mail Published March 2026
ELI5: Les RFC 2045-2047 définissent les règles MIME. La RFC 2049 est l'examen : elle énonce précisément ce que votre logiciel doit faire pour être conforme à MIME et fournit des exemples travaillés pour vérifier votre implémentation. Si MIME était un code du bâtiment, ce serait la liste de contrôle d'inspection.

Pourquoi cela existe

La spécification MIME s'étend sur quatre RFC techniques (2045, 2046, 2047, et 2048). Les implémenteurs ont besoin d'une réponse claire à : « quel est le minimum que mon logiciel doit gérer pour être conforme à MIME ? » RFC 2049 fournit cette réponse, ainsi que des messages de test canoniques que les implémenteurs peuvent utiliser pour vérifier leurs analyseurs.

Sans document de conformité, différentes implémentations supporteraient différents sous-ensembles de MIME, entraînant des défaillances d'interopérabilité. RFC 2049 établit le minimum : chaque système conscient de MIME doit au moins gérer ces types de contenu, encodages et structures.

Comment cela fonctionne

RFC 2049 définit deux niveaux de conformité, chacun avec des exigences spécifiques.

Exigences de l'agent d'envoi

Un agent d'envoi conforme à MIME (MUA ou bibliothèque de courrier) doit :

  1. Toujours inclure MIME-Version: 1.0 dans chaque message qui utilise des fonctionnalités MIME.
  2. Inclure un en-tête Content-Type quand le corps est autre que du texte ASCII simple.
  3. Utiliser un Content-Transfer-Encoding valide qui garantit que le corps du message peut survivre au transport par des passerelles SMTP 7 bits (base64 ou quoted-printable pour le contenu non-ASCII).
  4. Encoder correctement les champs d'en-tête en utilisant les mots codés RFC 2047 quand des caractères non-ASCII apparaissent dans des en-têtes comme Subject ou les noms d'affichage From.
  5. Générer des délimiteurs multipart valides qui n'apparaissent dans aucune partie du corps incluse.

Exigences de l'agent de réception

Un agent de réception conforme à MIME doit :

  1. Reconnaître MIME-Version: 1.0 et traiter le message comme encodé en MIME.
  2. Analyser les en-têtes Content-Type et Content-Transfer-Encoding, y compris tous les paramètres.
  3. Décoder base64 et quoted-printable encodages de transfert de contenu.
  4. Gérer tous les types multipart — au minimum multipart/mixed, multipart/alternative, multipart/digest, et multipart/parallel. Les sous-types multipart inconnus doivent être traités comme multipart/mixed.
  5. Gérer message/rfc822 — afficher le message encapsulé ou au moins le proposer pour enregistrement.
  6. Gérer les types de contenu non reconnus avec grâce — proposer d'enregistrer la partie du corps en tant que fichier plutôt que de crasher ou de la supprimer silencieusement. Les types non reconnus doivent être traités comme application/octet-stream.
  7. Décoder les mots codés RFC 2047 dans les champs d'en-tête.
  8. Gérer le paramètre charset sur les types texte, supportant au minimum US-ASCII et ISO-8859-1, et idéalement UTF-8.

Principe de robustesse

RFC 2049 réaffirme la loi de Postel pour MIME : être strict dans ce que vous envoyez, libéral dans ce que vous acceptez. Un récepteur conforme doit faire un meilleur effort pour afficher même des messages MIME légèrement malformés plutôt que de les rejeter d'emblée.

Détails techniques clés

Exemples canoniques

RFC 2049 inclut des exemples développés de messages MIME. Voici le schéma pour un message multipart/alternative bien formé avec du texte brut et du HTML :

MIME-Version: 1.0
From: sender@example.com
To: recipient@example.com
Subject: MIME conformance test
Content-Type: multipart/alternative; boundary="boundary42"

--boundary42
Content-Type: text/plain; charset=us-ascii

This is the plain text version.

--boundary42
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: quoted-printable

<html><body><p>This is the <strong>HTML</strong> version.</p></body></html>

--boundary42--

Gestion des types inconnus

Une exigence de conformité clé : quand un agent de réception rencontre un Content-Type qu'il ne comprend pas, il doit le traiter comme application/octet-stream et proposer de l'enregistrer. Cette règle assure la compatibilité prospective — de nouveaux types de médias peuvent être définis sans casser les clients existants.

; Type inconnu rencontré par un client
Content-Type: application/vnd.custom-format
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="data.custom"

; Le client conforme traite ceci comme application/octet-stream
; et propose à l'utilisateur un dialogue « Enregistrer sous »

Sous-types multipart inconnus

De même, les sous-types multipart inconnus doivent être traités comme multipart/mixed. Cela signifie que le client affiche chaque partie séquentiellement. Par exemple, multipart/report (défini plus tard dans RFC 3462) s'affichera toujours correctement dans les anciens clients qui le traitent comme mixte.

Support minimal de charset

Les implémentations conformes doivent supporter au minimum :

En pratique, toute implémentation moderne doit supporter UTF-8. Ne pas le faire en 2024+ est un manquement à la conformité par essence, même si la spécification de 1996 ne l'exigeait pas.

La limite MIME/non-MIME

Les messages sans en-tête MIME-Version: 1.0 sont traités comme du texte ASCII brut pré-MIME, indépendamment du fait qu'ils contiennent accidentellement des en-têtes Content-Type. L'en-tête MIME-Version est le gardien : sans lui, le traitement MIME ne s'active pas.

Erreurs courantes

Impact sur la délivrabilité

Related RFCs