Multipurpose Internet Mail Extension. Comme son nom l'indique, c'est une suite d'extensions pour permettre, principalement aux e-mails, de transporter autre chose que du texte, à savoir, du son, des images, de la vidéo... Autant de choses pour lesquelles la messagerie n'est à priori pas faite.
Ces extensions servent également sur le web, lorsque l'on utilise HTTP pour transporter autre chose que du texte (ce qui est souvent le cas). Voyez le chapitre sur HTTP à ce propos.
MIME rassemble deux choses distinctes :
C'est ici que MIME prend toute son importance. En effet, en plus de pouvoir définir des types de documents, il peut aussi définir des types d'encodages, comme Base64 ou Quoted-Printable.
Un seul exemple significatif. Il reprendra ce que nous avons eu l'occasion de voir par ailleurs.
Le message contient le texte ::
juste un texte légèrement accentué... Suivi d'une image gif.
codé Quoted-Printable , suivi d'une image gif en pièce jointe. Voici le message tel qu'il est reçu :
Return-Path: <christian.caleca@free.fr> ... From: "Christian Caleca" <christian.caleca@free.fr> To: <christian.caleca@free.fr> Subject: demo MIME Date: Sat, 9 Nov 2002 11:29:09 +0100 MIME-Version: 1.0 Content-Type: multipart/mixed; On est averti qu'il y aura plusieurs morceaux de type différents... boundary="----=_NextPart_000_0044_01C287E3.38B13A20" Avec un séparateur bien défini. X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook Express 6.00.2800.1106 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1106 This is a multi-part message in MIME format. ------=_NextPart_000_0044_01C287E3.38B13A20 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable La partie texte, codée "quoted-printable"... juste un texte l=E9g=E8rement accentu=E9... Suivi d'une image gif. Voilà qui est fait. ------=_NextPart_000_0044_01C287E3.38B13A20 Content-Type: application/octet-stream; name="moineau1.gif" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="moineau1.gif" On ne peut pas être plus précis : type :flux d'octets nom : moineau1.gif codage : Base64... R0lGODlhcgH8APf/AP//////zP//mf//Zv//M///AP/M///MzP/Mmf/MZv/MM//MAP+Z//+ZzP+Z ... GZACDvqwAvWAOgEBADs= ------=_NextPart_000_0044_01C287E3.38B13A20--
Comme prévu, ce message contient bien deux parties :
L'image, dans Outlook Express, va apparaître sous le texte, séparée par un filet horizontal.
Selon toute logique, le codage Base64 devrait pouvoir être universellement exploité dans la messagerie, puis qu'il permet à coup sûr de transporter correctement le message codé (sur 7 bits) et définit complètement la table de codage ASCII quelque soit l'alphabet utilisé par l'auteur.
Bien entendu, la situation n'est pas aussi simple. D'abord, les dernières versions de SMTP savent transporter du texte sur 8 bits, ce qui rend le codage inutile, ensuite, nombre de clients de messagerie ne savent pas encore décoder le Base64, voire le quoted-printable. Tous les clients qui ne sont pas compatibles MIME, et il y en a encore pas mal en service. Si bien que la méthode la plus efficace (la moins hasardeuse) reste d'utiliser la police iso-8859-1 sans aucun codage et de rédiger l'objet du message sans accents ni symboles particuliers, ça fera au moins ça de lisible à coup sûr.
Nous en avons déjà un exemple dans le chapitre HTTP, pour transporter une image gif dans une page html. Mais dans ce cas, il n'y a pas de codage (type Base64 ou quoted-printable), les octets sont brutalement transportés par le protocole. MIME sert juste à définir le type de document.
Voici juste un exemple, où HTTP va transporter un document MS Word. La manipulation est faite avec Internet Explorer 6 et Mozilla 1.1 sur une plateforme Windows disposant de MS Word. Un sniffeur regarde ce qu'il se passe au niveau HTTP.
Frame 4 (387 on wire, 387 captured) ... Internet Protocol, Src Addr: 192.168.0.10, Dst Addr: 192.168.0.253 ... Hypertext Transfer Protocol GET /odj.doc HTTP/1.1\r\n Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*\r\n Nous le savons, IE6 accepte explicitement les fichiers au format MS Office si ce dernier est installé. Accept-Language: fr\r\n Accept-Encoding: gzip, deflate\r\n User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)\r\n Host: linux.maison.mrs\r\n Connection: Keep-Alive\r\n \r\n
Frame 6 (1514 on wire, 1514 captured)
...
Internet Protocol, Src Addr: 192.168.0.253, Dst Addr: 192.168.0.10
...
Hypertext Transfer Protocol
HTTP/1.1 200 OK\r\n
Date: Sat, 09 Nov 2002 09:32:41 GMT\r\n
Server: Apache-AdvancedExtranetServer/1.3.26 (Mandrake Linux/6.1mdk)
auth_ldap/1.6.0 mod_ssl/2.8.10 OpenSSL/0.9.6g PHP/4.2.3\r\n
Last-Modified: Thu, 06 Jul 2000 15:07:29 GMT\r\n
ETag: "57d5a-7800-3964a0b1"\r\n
Accept-Ranges: bytes\r\n
Content-Length: 30720\r\n
Keep-Alive: timeout=15, max=100\r\n
Connection: Keep-Alive\r\n
Content-Type: application/msword\r\n
\r\n
Apache connait le type MIME msword et signale le type de contenu,
puis, commence à envoyer les données.
Data (1067 bytes)
0000 d0 cf 11 e0 a1 b1 1a e1 00 00 00 00 00 00 00 00 ................ 0010 00 00 00 00 00 00 00 00 3e 00 03 00 fe ff 09 00 ........>....... ... Les octets surlignés montrent à l'évidence que HTTP transporte sur 8 bitsUne fois la réception terminée, Internet Explorer va afficher directement le document, en utilisant MS Word comme "plug-in".
Frame 6 (534 on wire, 534 captured) ... Internet Protocol, Src Addr: 192.168.0.10, Dst Addr: 192.168.0.253 ... Hypertext Transfer Protocol GET /odj.doc HTTP/1.1\r\n Host: linux.maison.mrs\r\n User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.1) Gecko/20020826\r\n Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9, text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2, text/css,*/*;q=0.1\r\n Mozilla ne connaît pas quant à lui les formats Microsoft. Accept-Language: fr-fr, en-us;q=0.66, en;q=0.33\r\n Accept-Encoding: gzip, deflate, compress;q=0.9\r\n Accept-Charset: ISO-8859-1, utf-8;q=0.66, *;q=0.66\r\n Plus respectueux de HTTP, il indique les jeux de caractères qu'il préfère iso-8859-1 (latin-1) d'abord, utf-8 (unicode) ensuite, * (n'importe quoi) enfin. Keep-Alive: 300\r\n Connection: keep-alive\r\n \r\n
Frame 8 (1514 on wire, 1514 captured)
...
Internet Protocol, Src Addr: 192.168.0.253, Dst Addr: 192.168.0.10
...
Hypertext Transfer Protocol
HTTP/1.1 200 OK\r\n
Date: Sat, 09 Nov 2002 09:35:06 GMT\r\n
Server: Apache-AdvancedExtranetServer/1.3.26 (Mandrake Linux/6.1mdk)
auth_ldap/1.6.0 mod_ssl/2.8.10 OpenSSL/0.9.6g PHP/4.2.3\r\n
Last-Modified: Thu, 06 Jul 2000 15:07:29 GMT\r\n
ETag: "57d5a-7800-3964a0b1"\r\n
Accept-Ranges: bytes\r\n
Content-Length: 30720\r\n
Keep-Alive: timeout=15, max=100\r\n
Connection: Keep-Alive\r\n
Content-Type: application/msword\r\n
\r\n
Data (1067 bytes)
0000 d0 cf 11 e0 a1 b1 1a e1 00 00 00 00 00 00 00 00 ................ 0010 00 00 00 00 00 00 00 00 3e 00 03 00 fe ff 09 00 ........>.......
Rien de changé de ce côté là. Mozilla, une fois le fichier reçu proposera de l'enregistrer ou de l'afficher en démarrant MS Word, comme une application séparée.
Dans la lancée, la même manip, sous Linux (Mandrake 9, avec OpenOffice installé), avec le même Mozilla 1.1 et Konqueror 3.0.3. Les sniffs donnant toujours la même chose, inutile de les répéter.
Konqueror montre que l'on peut facilement le configurer de manière à ce qu'il ouvre la "bonne application" en fonction du type MIME annoncé. L'illustration ci-dessus montre la correction faite pour que Konqueror ouvre désormais les types application/msword avec OpenOffice Writer. L'objet de cette manipulation est, vous l'avez compris, de montrer l'intérêt du type MIME annoncé dans une transmission HTTP.
Ce chapitre vous aura, je l'espère, aidé à mieux comprendre :
Comment le Net arrive tout de même plutôt bien à se sortir élégamment du piège permanent que présente le transport de données au niveau mondial,
certains messages que vos navigateurs web peuvent vous envoyer lorsque vous visitez des sites étrangers,
pourquoi certains mails que vous pouvez recevoir peuvent être illisibles, et, peut-être, comment y remédier,
les précautions qu'il faut prendre pour avoir de bonnes chances d'envoyer des e-mails lisibles par le plus grand nombre...