Utilisation de MIME
sous GNU-Emacs

Article pour l'Echo de Linux (Juillet 1996)

Pierre Ficheux (pierre@rd.lectra.fr)


Résumé

Cet article indique comment installer et utiliser les composants permettant de lire et d'écrire du courrier électronique au standard MIME avec GNU-Emacs. La lecture de cet article nécessite d'être familier avec l'utilisation de GNU-Emacs.

Table des matières

Introduction

Le standard MIME (Multimedia Internet Mail Extensions) est le format officiel de transfert de données multimédias dans des courriers électroniques. Avec le développement de l'Internet, il est de plus en plus fréquent de vouloir transferer des données non texte à travers le réseau, comme par exemple des images, des fichiers audios ou bien des archives compressées.

De nombreux produits commerciaux permettent de manipuler le format MIME comme par exemple Z-Mail (développé initialement par Z-Code Software, aujourd'hui distribué par NCD) ou bien le célèbre Netscape dont la version 2.0 contient un module de traitement de courrier électronique au format MIME. Le mailer Z-Mail est livré en standard sur certains systèmes comme les Silicon Graphics ou bien sur la dernière version du desktop Caldera pour LINUX.

Le célèbre gratosware ELM est également capable de manipuler des messages MIME.

Manipuler le mail avec GNU-Emacs

GNU-Emacs, éditeur bien connu des utilisateurs de freeware, fournit un module de manipulation de mail relativement agréable à utiliser. La composition d'un courrier se fait dans un buffer Emacs grace à la commande C-x m (correspondant à la séquence M-x mail). La version de base de la distribution GNU-Emacs ne permet malheureusement pas de manipuler autre chose que du texte.

Pour manipuler du MIME avec GNU-Emacs, il est nécessaire d'installer les packages suivants :

que vous pouvez télécharger en cliquant sur les références ci-dessus.

Fonctionnement et installation de METAMAIL

Principe de base

Metamail a été initialement écrit par
Nathaniel S. Borenstein. Le programme metamail utilise un fichier mailcap (généralement localisé sur le répertoire /usr/local/etc) indiquant le programme auxiliaire à utiliser pour visualiser un mail reçu dans un format donné.

Le type des données du buffer de mail est indiqué par le header Content-Type. Par exemple un mail contenant un header

Content-Type: audio/au
indique la présence d'un fichier audio au format AU (utilisé en particulié sur les stations SUN ou sur LINUX). Le fichier mailcap indique par la ligne
audio/au; showaudio %s
qu'un fichier de ce type sera exploité par la commande showaudio qui sur mon PC Linux se réduit à un shell-script très simple

root@pcpf # cat /usr/bin/showaudio
#!/bin/sh
cat $1 > /dev/audio

Installation

La génération du package Metamail sur PC LINUX est extrèmement simple. Un simple
#define LINUX
dans le fichier config.h indique au Makefile la configuration pour LINUX. Le reste se reduit à make puis make install-all qui installe les binaires et les pages manuels.

Installation de TM

Le package Tm-7.43.1 est développé par
MORIOKA Tomohiko et KOBAYASHI Shuhei et se compose principalement de fichiers Lisp Emacs (.el) destinés à la manipulation de mail au format MIME. La documentation en anglais et en japonais sous forme de fichiers .texi est également fournie.

Après extraction de l'archives tm-7.43.1.tar.gz, il suffit de se positionner dans le sous-répertoire tm et de suivre les instructions du fichier README.en qui comme son nom l'indique est en anglais et non en japonais, ouf :-)

L'archives téléchargeable à partir de cet article est configurée pour une version d'Emacs supérieure ou égale à la 19.29 (la 19.30 est distribuée avec la distribution LINUX Slackware-3.0 et s'installe sur le répertoire /usr de l'arborescence LINUX). Ceux qui dispose d'une autre configuration doivent éditer le fichier config.tm.

Il est tout d'abord nécessaire de compiler et d'installer quelques commandes écrites en C par

make all
puis
make install
La génération et l'installation des fichier Lisp se fait ensuite par
make install-19_29
L'archive est configurée de manière à ce que les fichiers .el et .elc (Lisp compilé) soient installés sur /usr/lib/emacs/site-lisp.

La génération de la documentation installable sur le répertoire /usr/info se fait par :

cd doc
make info

Pour que le package installé soit pris en compte, vous devez ajouter la ligne

(load "mime-setup")
dans votre fichier $HOME/.emacs.

Composition et lecture de message MIME sous Emacs

Composition d'un message MIME

L'ouverture d'un buffer de composition de mail par C-x m doit faire apparaitre un nouveau menu intitulé MIME-Edit qui propose les options de manipulation d'un buffer MIME

Pour insérer dans votre mail un fichier binaire (une image GIF par exemple), il suffit de sélectionner l'option Insert File (C-c C-x TAB) puis de choisir le fichier avec Emacs. Après confirmation du type de codage utilisé (en général, MIME utilise le codage base64), Emacs insère le fichier codé dans votre buffer mail dans un identifieur appelé tag, comme indiqué dans l'exemple ci-dessous :

From: pierre@rd.lectra.fr (Pierre Ficheux)
Reply-To: pierre@rd.lectra.fr
To: truc@machin.fr
Subject: Test MIME Emacs
Mailer: GNU Emacs 19.30.1 (i486-slackware-linux, X toolkit) of Wed Nov 29 1995 on fuzzy
Organization: Cercle Linuxien pessacais : 4 avenue Mozart, Pessac, France
--text follows this line--

Ici j'insère une image du super programme MODARIS de Lectra-Systèmes :)

--[[image/gif
Content-Disposition: inline; filename="modaris.gif"][base64]]...

Vous pouvez également insérer un enregistrement direct par Insert Voice (C-c C-x v). Cet enregistrement utilise le device /dev/audio utilisé fréquemment sur station SUN mais également disponible sous LINUX. Une fois l'enregistrement terminé (par C-g) les données codées sont intégrées dans le buffer *mail* :
From: pierre@rd.lectra.fr (Pierre Ficheux)
Reply-To: pierre@rd.lectra.fr
To: truc@machin.fr
Subject: Test MIME Emacs
Mailer: GNU Emacs 19.30.1 (i486-slackware-linux, X toolkit) of Wed Nov 29 1995 on fuzzy
Organization: Cercle Linuxien pessacais : 4 avenue Mozart, Pessac, France
--text follows this line--

Ici j'insère un enregistrement

--[[audio/basic][base64]]

Un option intéressante est la possibilité de "pré-visualiser" votre buffer MIME avant de l'expédier par l'option Preview Message (C-c C-x C-p). La méthode de pré-visualisation est identique à celle décrite pour la lecture d'un courrier.

Quelques considérations sur le Quoted-Printable

Lorsque le module MIME est chargé par (load "mime-setup"), le codage par défaut du mail est le quoted-printable (ou QP), un codage très populaire dans certains logiciels commerciaux ou nom (Eudora, Netscape, ...) dont la particularité est de rendre très difficile à lire le message reçu dans le cas ou l'on ne dispose pas d'un mailer capable de décoder le QP. L'exemple suivant, dont les lectrices féminimes voudront bien pardonner le coté paillard (mais c'est pour la bonne cause), met en évidence le problème. Le message suivant :
Date: Sun, 7 Jul 1996 23:48:23 +0200
From: pierre@rd.lectra.fr (Pierre Ficheux)
Reply-To: pierre@rd.lectra.fr
To: pierre
Subject: Test QP
Mailer: GNU Emacs 19.30.1 (i486-slackware-linux, X toolkit) of Wed Nov 29 1995 on fuzzy
Organization: Cercle Linuxien pessacais : 4 avenue Mozart, Pessac, France
Mime-Version: 1.0 (generated by tm-edit 7.43)
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

 
L'=E9t=E9, y'a des t=E9t=E9s =E0 admirer
est illisible. Par contre la même chose en pur ISO-8859-1 :
Date: Sun, 7 Jul 1996 23:50:47 +0200
From: pierre@rd.lectra.fr (Pierre Ficheux)
Reply-To: pierre@rd.lectra.fr
To: pierre
Subject: Test QP2
Mailer: GNU Emacs 19.30.1 (i486-slackware-linux, X toolkit) of Wed Nov 29 1995 on fuzzy
Organization: Cercle Linuxien pessacais : 4 avenue Mozart, Pessac, France
Mime-Version: 1.0 (generated by tm-edit 7.43)
Content-Type: text/plain; charset=ISO-8859-1


L'été, y'a des tétés à admirer
est beaucoup plus sympathique.

Dans le cas du module Tm-7.41.1, le codage QP est positionné par défaut pour le texte codé ISO-8859-1 (et pour d'autres codages) si l'on reste en mode MIME. Il faut quitter le mode MIME (par C-c C-x C-z) pour supprimer ce codage par défaut (on revient en MIME par la commande M-x mime-mode).

La correspondance est donnée par la table suivante :

(defvar mime/charset-type-list
  '(("US-ASCII"       7 nil)
    ("ISO-8859-1"     8 "quoted-printable")
    ("ISO-8859-2"     8 "quoted-printable")
    ("ISO-8859-3"     8 "quoted-printable")
    ("ISO-8859-4"     8 "quoted-printable")
    ("ISO-8859-5"     8 "quoted-printable")
    ("KOI8-R"         8 "quoted-printable")
    ("ISO-8859-7"     8 "quoted-printable")
    ("ISO-8859-8"     8 "quoted-printable")
    ("ISO-8859-9"     8 "quoted-printable")
    ("ISO-2022-JP"    7 "base64")
    ("ISO-2022-KR"    7 "base64")
    ("EUC-KR"         8 "base64")
    ("ISO-2022-JP-2"  7 "base64")
    ("ISO-2022-INT-1" 7 "base64")
    ))
Pour supprimer le QP pour un ou plusieurs des codages, il suffit de re-définir cette table dans votre fichier .emacs en remplaçant "quoted-printable" par nil.
    ("ISO-8859-1"     8 nil)

La taille des données codées est bien évidement importante par apport à un mail texte classique. Comme de bien entendu , Emacs découpe les fichiers codés en paquets de 50 Ko en cas de transfert par un protocole type UUCP. Si vous désirez transférer votre courrier en un seul morceaux, vous devez le spécifier par l'option About split du menu (et répondre No !).
Notez que certains produits commerciaux (Netscape pour ne citer que lui ne supporte pas les mail découpés :( )

Lecture d'un message MIME

Lorsqu'un message est affiché dans le buffer RMAIL (obtenu par M-x rmail ou bien l'option Read Mail du menu Emacs/Tools), on peut visualiser les tags MIME par l'appui sur la touche v (M-x mime/viewer-mode) dans le buffer RMAIL. On obtient alors un buffer *Preview-RMAIL* de la forme suivante :
Date: Sun, 7 Jul 1996 17:29:29 +0200
From: pierre@rd.lectra.fr (Pierre Ficheux)
Reply-To: pierre@rd.lectra.fr
To: pierre
Subject: Essai
Mailer: GNU Emacs 19.30.1 (i486-slackware-linux, X toolkit) of Wed Nov 29 1995 on fuzzy
Organization: Cercle Linuxien pessacais : 4 avenue Mozart, Pessac, France
Mime-Version: 1.0 (generated by tm-edit 7.43)
Content-Transfer-Encoding: 7bit

[1  (text/plain)]

Voici la rédaction de l'"Echo de Linux"
[2 grotte3_1.gif (image/gif)]
Le buffer contient ici 2 tags (un texte déja visible et un image GIF). On peut visualiser la partie image en positionnant la souris (ou le curseur) sur le tag numéro 2 et en tapant de nouveau la touche v (ou bien en cliquant avec le bouton central de la souris). On obtient alors le résultat suivant :

qui montre la rédaction de l'Echo de Linux en pleine relaxation après le dernier congrès de Berlin :-)

La trace de traitement du message est affichée dans le buffer *MIME-out*. La méthode est la même si vous voulez pré-visualiser un message MIME avant de l'expédier.

La touche e permet de sauvegarder un tag dans le fichier correspondant (sous /tmp) comme le montre la trace du buffer *MIME-out* :

image/gif; base64 -> /tmp/grotte3_1.gif
/tmp/TMa00117 was removed.
extract to /tmp/grotte3_1.gif

Process tm-image finished
L'action sur la touche q supprime le buffer *Preview-RMAIL* et revient au buffer RMAIL normal.

Conclusion

Ce package permet de transformer Emacs en un excellent utilitaire de manipulation de message MIME. Pour une description complète des commandes et des possibilités du package, je vous conseille vivement d'installer la documentation en ligne au format info. Je tiens à remercier chaleureusement
Jean-Michel Soenen de Lectra-Systèmes pour la découverte de ce package très intéressant sans lequel bien entendu, cet article n'aurait jamais vu le jour.