# `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.

The mailcap format is documented in RFC 1524, "A User Agent Configuration Mechanism For Multimedia Mail Format Information", but is not an Internet standard. However, mailcap files are supported on most Unix systems.

`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.

  Modifié dans la version 3.8.16: To prevent security issues with shell metacharacters (symbols that have special effects in a shell command line), `findmatch` will refuse to inject ASCII characters other than alphanumerics and `@+=:,./-_` into the returned command line.

  If a disallowed character appears in filename, `findmatch` will always return `(None, None)` as if no entry was found. If such a character appears elsewhere (a value in plist or in MIMEtype), `findmatch` will ignore all mailcap entries which use that value. A `warning` will be raised in either case.

`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'})