# 19.3. `mailcap` — Manipulation de fichiers Mailcap

Code source : Lib/mailcap.py

Les fichiers mailcap sont utilisés pour configurer la façon dont les applications compatibles avec MIME, comme les clients mails ou les navigateurs, réagissent aux différents fichiers de types MIME. (Le nom mailcap est une contraction de l’expression « mail capability ».) Par exemple, un fichier mailcap peut contenir une ligne de type `video/mpeg; xmpeg %s`. Ensuite, si l’utilisateur récupère un message mail ou un document web avec un type MIME video/mpeg, `%s` est remplacé par un nom de fichier (généralement celui d’un fichier temporaire) et le programme xmpeg peut automatiquement débuter la lecture de ce dernier.

Le format mailcap est documenté dans la RFC 1524 « A User Agent Configuration Mechanism For Multimedia Mail Format Information », mais n’est pas un standard Internet. Cependant, la plupart des systèmes Unix savent gérer les fichiers mailcap.

`mailcap.``findmatch`(caps, MIMEtype, key='view', filename='/dev/null', plist=[])

  Renvoie un tuple à deux éléments ; le premier élément est une chaîne de caractères (string) contenant la ligne de commande à exécuter (qui peut être passée à `os.system()`), et le second élément est l’entrée mailcap pour un type de MIME donné. Si le type MIME n’est pas identifié, `(None, None)` est renvoyé.

  key est le nom de champ souhaité, qui représente le type d’action à exécuter ; la valeur par défaut est `'view'`, puisque dans la majorité des cas le besoin consiste juste à lire le corps (body) de la donnée de type MIME. Les autres valeurs possibles peuvent être `'compose'` et `'edit'`, si le besoin consiste à créer un nouveau corps de données (body) ou modifier celui existant. Voir la RFC 1524 pour une liste complète des champs.

  filename est le nom de fichier à remplacer pour `%s` en ligne de commande ; la valeur par défaut est `’/dev/null’` qui n’est certainement pas celle que vous attendez. Donc la plupart du temps, le nom de fichier doit être indiqué.

  plist peut être une liste contenant des noms de paramètres ; la valeur par défaut est une simple liste vide. Chaque entrée dans la liste doit être une chaîne de caractères contenant le nom du paramètre, un signe égal (`’=‘`), ainsi que la valeur du paramètre. Les entrées mailcap peuvent contenir des noms de paramètres tels que `%{foo}`, remplacé par la valeur du paramètre nommé foo. Par exemple, si la ligne de commande `showpartial %{id} %{number} %{total}` est un fichier mailcap, et plist configuré à `[‘id=1’, ‘number=2’, ‘total=3’]`, la ligne de commande qui en résulte est `’showpartial 1 2 3’`.

  Dans un fichier mailcap, le champ « test » peut être renseigné de façon optionnelle afin de tester certaines conditions externes (comme l’architecture machine, ou le gestionnaire de fenêtre utilisé) afin de déterminer si la ligne mailcap est pertinente ou non. `findmatch()` vérifie automatiquement ces conditions et ignore l’entrée si la vérification échoue.

`mailcap.``getcaps`()

  Renvoie un dictionnaire qui associe les types MIME à une liste d’entrées de fichier mailcap. Ce dictionnaire doit être transmis à la fonction `findmatch()`. Une entrée est enregistrée en tant qu’une liste de dictionnaires, mais il n’est pas nécessaire de connaitre les détails de cette représentation.

  L’information provient de tous les fichiers mailcap trouvés dans le système. Les configurations réalisées dans le fichier mailcap du répertoire utilisateur `$HOME/.mailcap` outrepasse les configurations systèmes des fichiers mailcap `/etc/mailcap`, `/usr/etc/mailcap`, et `/usr/local/etc/mailcap`.

Un exemple d’utilisation :

    >>> import mailcap
    >>> d = mailcap.getcaps()
    >>> mailcap.findmatch(d, 'video/mpeg', filename='tmp1223')
    ('xmpeg tmp1223', {'view': 'xmpeg %s'})