19.1.7. email.mime: メールと MIME オブジェクトを一から作成¶
ソースコード: Lib/email/mime/
ふつう、メッセージオブジェクト構造はファイルまたは何がしかのテキストをパーザに通すことで得られます。パーザは与えられたテキストを解析し、基底となる root のメッセージオブジェクトを返します。しかし、完全なメッセージオブジェクト構造を何もないところから作成することもまた可能です。個別の Message を手で作成することさえできます。実際には、すでに存在するメッセージオブジェクト構造をとってきて、そこに新たな Message オブジェクトを追加したり、あるものを別のところへ移動させたりできます。これは MIME メッセージを切ったりおろしたりするために非常に便利なインターフェイスを提供します。
新しいメッセージオブジェクト構造は Message インスタンスを作成することにより作れます。ここに添付ファイルやその他適切なものをすべて手で加えてやればよいのです。MIME メッセージの場合、 email パッケージはこれらを簡単におこなえるようにするためにいくつかの便利なサブクラスを提供しています。
以下がそのサブクラスです:
- 
class email.mime.base.MIMEBase(_maintype, _subtype, **_params)¶
- モジュール: - email.mime.base- これはすべての - Messageの MIME 用サブクラスの基底となるクラスです。とくに- MIMEBaseのインスタンスを直接作成することは (可能ではありますが) ふつうはしないでしょう。- MIMEBaseは単により特化された MIME 用サブクラスのための便宜的な基底クラスとして提供されています。- _maintype は Content-Type の主形式 (maintype) であり (text や image など)、 _subtype は Content-Type の副形式 (subtype) です (plain や gif など)。 _params は各パラメータのキーと値を格納した辞書であり、これは直接 - Message.add_headerに渡されます。- MIMEBaseクラスはつねに (_maintype 、 _subtype 、および _params にもとづいた) Content-Type ヘッダと、 MIME-Version ヘッダ (必ず- 1.0に設定される) を追加します。
- 
class email.mime.nonmultipart.MIMENonMultipart¶
- モジュール: - email.mime.nonmultipart- MIMEBaseのサブクラスで、これは multipart 形式でない MIME メッセージのための中間的な基底クラスです。このクラスのおもな目的は、通常 multipart 形式のメッセージに対してのみ意味をなす- attach()メソッドの使用をふせぐことです。もし- attach()メソッドが呼ばれた場合、これは- MultipartConversionError例外を発生します。
- 
class email.mime.multipart.MIMEMultipart(_subtype='mixed', boundary=None, _subparts=None, **_params)¶
- モジュール: - email.mime.multipart- MIMEBaseのサブクラスで、これは multipart 形式の MIME メッセージのための中間的な基底クラスです。オプション引数 _subtype はデフォルトでは mixed になっていますが、そのメッセージの副形式 (subtype) を指定するのに使うことができます。メッセージオブジェクトには multipart/_subtype という値をもつ Content-Type ヘッダとともに、 MIME-Version ヘッダが追加されるでしょう。- オプション引数 boundary は multipart の境界文字列です。これが - Noneの場合 (デフォルト)、境界は必要に応じて計算されます(例えばメッセージがシリアライズされるときなど)。- _subparts はそのペイロードの subpart の初期値からなるシーケンスです。このシーケンスはリストに変換できるようになっている必要があります。新しい subpart はつねに - Message.attachメソッドを使ってそのメッセージに追加できるようになっています。- Content-Type ヘッダに対する追加のパラメータはキーワード引数 _params を介して取得あるいは設定されます。これはキーワード辞書になっています。 
- 
class email.mime.application.MIMEApplication(_data, _subtype='octet-stream', _encoder=email.encoders.encode_base64, **_params)¶
- モジュール: - email.mime.application- MIMENonMultipartのサブクラスである- MIMEApplicationクラスは MIME メッセージオブジェクトのメジャータイプ application を表します。 _data は生のバイト列が入った文字列です。オプション引数 _subtype は MIME のサブタイプを設定します。サブタイプのデフォルトは octet-stream です。- オプション引数の _encoder は呼び出し可能なオブジェクト (関数など) で、データの転送に使う実際のエンコード処理を行います。この呼び出し可能なオブジェクトは引数を 1 つ取り、それは - MIMEApplicationのインスタンスです。ペイロードをエンコードされた形式に変更するために- get_payload()と- set_payload()を使い、必要に応じて Content-Transfer-Encoding やその他のヘッダをメッセージオブジェクトに追加するべきです。デフォルトのエンコードは base64 です。組み込みのエンコーダの一覧は- email.encodersモジュールを見てください。- _params は基底クラスのコンストラクタにそのまま渡されます。 
- 
class email.mime.audio.MIMEAudio(_audiodata, _subtype=None, _encoder=email.encoders.encode_base64, **_params)¶
- モジュール: - email.mime.audio- MIMEAudioクラスは- MIMENonMultipartのサブクラスで、主形式 (maintype) が audio の MIME オブジェクトを作成するのに使われます。 _audiodata は実際の音声データを格納した文字列です。もしこのデータが標準の Python モジュール- sndhdrによって認識できるものであれば、 Content-Type ヘッダの副形式 (subtype) は自動的に決定されます。そうでない場合はその画像の形式 (subtype) を _subtype で明示的に指定する必要があります。副形式が自動的に決定できず、 _subtype の指定もない場合は、- TypeErrorが発生します。- オプション引数の _encoder は呼び出し可能なオブジェクト (関数など) で、オーディオデータの転送に使う実際のエンコード処理を行います。この呼び出し可能なオブジェクトは引数を 1 つ取り、それは - MIMEAudioのインスタンスです。ペイロードをエンコードされた形式に変更するために- get_payload()と- set_payload()を使い、必要に応じて Content-Transfer-Encoding やその他のヘッダをメッセージオブジェクトに追加するべきです。デフォルトのエンコードは base64 です。組み込みのエンコーダの一覧は- email.encodersモジュールを見てください。- _params は基底クラスのコンストラクタにそのまま渡されます。 
- 
class email.mime.image.MIMEImage(_imagedata, _subtype=None, _encoder=email.encoders.encode_base64, **_params)¶
- モジュール: - email.mime.image- MIMEImageクラスは- MIMENonMultipartのサブクラスで、主形式 (maintype) が image の MIME オブジェクトを作成するのに使われます。 _imagedata は実際の画像データを格納した文字列です。もしこのデータが標準の Python モジュール- imghdrによって認識できるものであれば、 Content-Type ヘッダの副形式 (subtype) は自動的に決定されます。そうでない場合はその画像の形式 (subtype) を _subtype で明示的に指定する必要があります。副形式が自動的に決定できず、 _subtype の指定もない場合は、- TypeErrorが発生します。- オプション引数の _encoder は呼び出し可能なオブジェクト (関数など) で、画像データの転送に使う実際のエンコード処理を行います。この呼び出し可能なオブジェクトは引数を 1 つ取り、それは - MIMEImageのインスタンスです。ペイロードをエンコードされた形式に変更するために- get_payload()と- set_payload()を使い、必要に応じて Content-Transfer-Encoding やその他のヘッダをメッセージオブジェクトに追加するべきです。デフォルトのエンコードは base64 です。組み込みのエンコーダの一覧は- email.encodersモジュールを見てください。- _params は - MIMEBaseコンストラクタに直接渡されます。
- 
class email.mime.message.MIMEMessage(_msg, _subtype='rfc822')¶
- モジュール: - email.mime.message- MIMEMessageクラスは- MIMENonMultipartのサブクラスで、主形式 (maintype) が message の MIME オブジェクトを作成するのに使われます。ペイロードとして使われるメッセージは _msg になります。これは- Messageクラス (あるいはそのサブクラス) のインスタンスでなければいけません。そうでない場合、この関数は- TypeErrorを発生します。- オプション引数 _subtype はそのメッセージの副形式 (subtype) を設定します。デフォルトではこれは rfc822 になっています。 
- 
class email.mime.text.MIMEText(_text, _subtype='plain', _charset=None)¶
- モジュール: - email.mime.text- MIMETextクラスは- MIMENonMultipartのサブクラスで、主形式 (maintype) が text の MIME オブジェクトを作成するのに使われます。ペイロードの文字列は _text になります。 _subtype には副形式 (subtype) を指定し、デフォルトは plain です。 _charset はテキストの文字セットで、- MIMENonMultipartコンストラクタに引数として渡されます。この値は、文字列が- asciiコードポイントのみを含む場合- us-ascii、それ以外は- utf-8がデフォルトになっています。 _charset パラメータは、文字列と- Charsetインスタンスの両方を受け付けます。- Unless the _charset argument is explicitly set to - None, the MIMEText object created will have both a Content-Type header with a- charsetparameter, and a Content-Transfer-Encoding header. This means that a subsequent- set_payloadcall will not result in an encoded payload, even if a charset is passed in the- set_payloadcommand. You can "reset" this behavior by deleting the- Content-Transfer-Encodingheader, after which a- set_payloadcall will automatically encode the new payload (and add a new Content-Transfer-Encoding header).- バージョン 3.5 で変更: _charset は - Charsetインスタンスも受け取ります。
