# 18.1.7. `email.encoders`: エンコーダ

何もないところから `Message` を作成するときしばしば必要になるのが、ペイロードをメールサーバに通すためにエンコードすることです。これはとくにバイナリデータを含んだ image/* や text/* タイプのメッセージで必要です。

`email` パッケージでは、 `encoders` モジュールにおいていくかの便宜的なエンコーディングをサポートしています。実際にはこれらのエンコーダは `MIMEAudio` および `MIMEImage` クラスのコンストラクタでデフォルトエンコーダとして使われています。すべてのエンコーディング関数は、エンコードするメッセージオブジェクトひとつだけを引数にとります。これらはふつうペイロードを取りだし、それをエンコードして、ペイロードをエンコードされたものにセットしなおします。これらはまた Content-Transfer-Encoding ヘッダを適切な値に設定します。

マルチパートメッセージにこれら関数を使うことは全く無意味です。それらは各々のサブパートごとに適用されるべきものです。メッセージがマルチパートのものを渡すと `TypeError` が発生します。

提供されているエンコーディング関数は以下のとおりです:

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

  ペイロードを quoted-printable 形式にエンコードし、 Content-Transfer-Encoding ヘッダを `quoted-printable` 1 に設定します。これはそのペイロードのほとんどが通常の印刷可能な文字からなっているが、印刷不可能な文字がすこしだけあるときのエンコード方法として適しています。

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

  ペイロードを base64 形式でエンコードし、 Content-Transfer-Encoding ヘッダを `base64` に変更します。これはペイロード中のデータのほとんどが印刷不可能な文字である場合に適しています。 quoted-printable 形式よりも結果としてはコンパクトなサイズになるからです。 base64 形式の欠点は、これが人間にはまったく読めないテキストになってしまうことです。

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

  これは実際にはペイロードを変更はしませんが、ペイロードの形式に応じて Content-Transfer-Encoding ヘッダを `7bit` あるいは `8bit` に適した形に設定します。

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

  これは何もしないエンコーダです。 Content-Transfer-Encoding ヘッダを設定さえしません。

注記

1

  注意: `encode_quopri()` を使ってエンコードすると、データ中のタブ文字や空白文字もエンコードされます。