# 18.1.7. `email.encoders` : Encodeurs

Au moment de la création d’objets `Message` à la main, il est souvent nécessaire d’encoder les charges utiles pour le transport à travers des serveurs mail conformes. C’est particulièrement vrai pour les messages de type image/* et text/* contenant des données binaires.

Le paquet `email` fournit quelques encodeurs pratiques dans son module `encoders`. Ces encodeurs sont d’ailleurs utilisés par les constructeurs des classes `MIMEAudio` et `MIMEImage` afin de fournir des encodages par défaut. Toutes les fonctions d’encodage prennent exactement un argument, l’objet message à encoder. Généralement, elles extraient la charge utile, l’encode, puis change la charge utile pour la nouvelle valeur encodée. Elles devraient également assigner l’en-tête Content-Transfer-Encoding si besoin.

À noter que ces fonctions n’ont pas de sens dans le cadre d’un message en plusieurs parties. Elles doivent à la place être appliquées aux sous-parties individuelles, et lèvent `TypeError` si on leur passe un message en plusieurs parties.

Voici les fonctions d’encodages fournies :

`email.encoders.``encode_quopri`(msg)

  Encode la charge utile au format Quoted-Printable, et assigne `quoted-printable` [1] à l’en-tête Content-Transfer-Encoding. C’est un bon encodage à utiliser quand la majorité de la charge utile contient essentiellement des données imprimables, à l’exceptions de quelques caractères.

`email.encoders.``encode_base64`(msg)

  Encode la charge utile au format base64, et assigne `base64` à l’en-tête Content-Transfer-Encoding. C’est un bon encodage à utiliser quand la majorité de la charge utile est non imprimable puisque c’est une forme plus compacte que quoted-printable.

`email.encoders.``encode_7or8bit`(msg)

  Ceci ne modifie pas effectivement la charge utile du message, mais va bien en revanche assigner la valeur `7bit` ou `8bit` à l’en-tête Content-Transfer-Encoding selon la nature de la charge utile.

`email.encoders.``encode_noop`(msg)

  Ceci ne fait rien; et ne va même pas changer la valeur de l’en-tête Content-Transfer-Encoding.

Notes

[1] | À noter que l’encodage avec `encode_quopri()` encode également tous les caractères tabulation et espace.