← RFC Reference

RFC 2045 : MIME Partie 1 — Format des corps de messages Internet

Voie de normalisation MIME — Extensions polyvalentes du courrier Internet Published March 2026
ELI5: Le courrier électronique original ne pouvait transporter que du texte anglais brut — comme un télégraphe. MIME est l'invention de l'enveloppe : il vous permet de mettre des photos, des documents, des pages HTML et du texte dans n'importe quelle langue à l'intérieur d'un courrier électronique. RFC 2045 définit l'enveloppe elle-même — les en-têtes qui indiquent « ce courrier électronique contient un corps HTML codé en UTF-8 » ou « il y a un PDF joint, codé en base64 ».

Pourquoi cela existe

RFC 5322 (et son prédécesseur RFC 822) ont défini les messages électroniques comme du texte US-ASCII pur avec une longueur de ligne maximale de 998 caractères. C'était acceptable en 1982. Ce ne l'est pas pour les e-mails modernes, qui doivent transporter :

MIME (Extensions de courrier Internet multifonctionnel) est une suite de cinq RFC qui étendent le courrier électronique pour gérer tout cela tout en restant rétro-compatible avec l'infrastructure ASCII originale. RFC 2045 est la partie 1 : elle définit les champs d'en-tête et les mécanismes de codage qui rendent tout le reste possible.

Comment cela fonctionne

RFC 2045 introduit trois champs d'en-tête critiques et deux schémas de codage.

L'en-tête MIME-Version

Tout message MIME doit inclure :

MIME-Version: 1.0

Cela signale aux clients de messagerie receveurs que le message utilise les conventions MIME. Sans cet en-tête, le message est traité comme du texte US-ASCII pur selon RFC 5322. La version est 1.0 depuis 1996 et n'a jamais changé.

L'en-tête Content-Type

Déclare le type de média et le sous-type du corps, ainsi que des paramètres facultatifs :

Content-Type: type/subtype; parameter=value

Exemples :

; E-mail en texte brut en UTF-8
Content-Type: text/plain; charset=utf-8

; E-mail HTML
Content-Type: text/html; charset=utf-8

; Pièce jointe PDF
Content-Type: application/pdf; name="invoice.pdf"

; Message multipart (texte + HTML + pièces jointes)
Content-Type: multipart/mixed; boundary="----=_Part_123"

Si aucun Content-Type n'est présent, la valeur par défaut est text/plain; charset=us-ascii — conservant la rétro-compatibilité avec les messages pré-MIME.

L'en-tête Content-Transfer-Encoding

SMTP a été conçu pour transporter du texte ASCII 7 bits avec des lignes ne dépassant pas 998 caractères. Les données binaires (images, PDF) et le texte 8 bits (UTF-8) doivent être codés pour respecter ces contraintes. RFC 2045 définit cinq encodages de transfert :

Encodage Cas d'utilisation Surcharge
7bit Texte US-ASCII (par défaut). Aucun encodage nécessaire. Aucune
8bit Texte 8 bits (p. ex., UTF-8). Nécessite l'extension SMTP 8BITMIME. Aucune
binary Données binaires arbitraires. Nécessite l'extension SMTP BINARYMIME. Aucune
quoted-printable Texte principalement ASCII avec quelques caractères non-ASCII. ~5-10%
base64 Données binaires (images, fichiers) ou texte fortement non-ASCII. ~33%

Encodage Quoted-Printable

Conçu pour un texte qui est principalement ASCII avec des caractères non-ASCII occasionnels. Chaque octet non-ASCII est codé comme =XX où XX est la valeur hexadécimale. Les lignes plus longues que 76 caractères sont enveloppées en douceur avec = à la fin.

; Original : « René sent the café menu »
Content-Transfer-Encoding: quoted-printable

Ren=C3=A9 sent the caf=C3=A9 menu

Le =C3=A9 est l'encodage UTF-8 de é (U+00E9), chaque octet étant codé en hexadécimal.

Encodage Base64

Encode les données binaires arbitraires en caractères ASCII (A-Z, a-z, 0-9, +, /). Chaque 3 octets d'entrée devient 4 caractères ASCII. Les lignes sont enveloppées à 76 caractères.

Content-Type: image/png; name="logo.png"
Content-Transfer-Encoding: base64

iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34
AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAApgAAAKYB
zN+OGwAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBl

Détails techniques clés

L'en-tête Content-Disposition

Bien que ne faisant pas partie de RFC 2045 lui-même (il provient de RFC 2183), Content-Disposition est étroitement lié et universellement utilisé avec MIME :

; Afficher en ligne (p. ex., une image intégrée)
Content-Disposition: inline

; Proposer comme pièce jointe téléchargeable
Content-Disposition: attachment; filename="report.pdf"

Un message MIME complet

En mettant tout ensemble — un message avec des corps texte et HTML, plus une pièce jointe :

MIME-Version: 1.0
From: sender@example.com
To: recipient@example.com
Subject: Invoice attached
Content-Type: multipart/mixed; boundary="----=_outer"

------=_outer
Content-Type: multipart/alternative; boundary="----=_inner"

------=_inner
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Please find your invoice attached.

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

<p>Please find your invoice attached.</p>

------=_inner--
------=_outer
Content-Type: application/pdf; name="invoice.pdf"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="invoice.pdf"

JVBERi0xLjQKJeLjz9MKMSAwIG9iago8PCAvVHlwZSAv
Q2F0YWxvZyAvUGFnZXMgMiAwIFIgPj4KZW5kb2JqCg==

------=_outer--

Notez la structure : multipart/mixed contient le corps et la pièce jointe. Le corps lui-même est multipart/alternative avec des versions texte et HTML. Voir RFC 2046 pour tous les détails sur les types multipart.

Paramètre Charset

Le paramètre charset sur les types text/* déclare l'encodage des caractères. Pour les e-mails modernes, utilisez toujours utf-8 :

Content-Type: text/plain; charset=utf-8
Content-Type: text/html; charset=utf-8

Les jeux de caractères hérités comme iso-8859-1, windows-1252 et shift_jis sont toujours rencontrés mais ne doivent pas être utilisés dans les nouveaux messages.

Erreurs courantes

Impact sur la livraison

Related RFCs