email.contentmanager: MIME コンテンツの管理¶
ソースコード: Lib/email/contentmanager.py
Added in version 3.6: [1]
- class email.contentmanager.ContentManager¶
コンテンツマネージャーの基底クラスです。 MIME コンテンツと他の表現との変換処理を登録する標準のレジストリ機構と、処理を振り分ける
get_content()、set_content()メソッドを提供します。- get_content(msg, *args, **kw)¶
msg の
mimetypeに基づいてハンドラー関数を探し (次の段落を参照)、すべての引数をそのまま渡して呼び出し、その結果を返します。 ハンドラーは msg からペイロードを抽出し、抽出したデータの情報を表すオブジェクトを返すことを想定しています。ハンドラーを見つけるには、レジストリで次のキーを順に探し、最初に見つかったものを使います。
完全な MIME 型を表す文字列 (
maintype/subtype)maintypeを表す文字列空の文字列
どのキーでもハンドラーが見つからない場合、完全な MIME 型を示す
KeyErrorを送出します。
- set_content(msg, obj, *args, **kw)¶
maintypeがmultipartの場合はTypeErrorを送出します。 そうでなければ、obj の型に基づいてハンドラー関数を探し (次の段落を参照)、msg のclear_content()を呼び出してから、すべての引数をそのまま渡してハンドラー関数を呼び出します。 ハンドラーは obj を変換して msg に格納することを想定しています。 格納したデータの解釈に必要な情報を表す MIME ヘッダーを追加するなど、msg に他の変更を加えることもあります。ハンドラーを見つけるには、obj の型を取得し (
typ = type(obj))、レジストリで次のキーを順に探して最初に見つかったものを使います。型自身 (
typ)型の完全修飾名 (
typ.__module__ + '.' + typ.__qualname__).型の
qualname(typ.__qualname__)型の
name(typ.__name__)。
いずれも一致しない場合、MRO (
typ.__mro__) 内の各型について、上記の確認をすべて繰り返します。 それでもハンドラーが見つからない場合、最後にキーNoneのハンドラーを探します。Noneのハンドラーもなければ、型の完全修飾名を示すKeyErrorを送出します。Also add a MIME-Version header if one is not present (see also
MIMEPart).
- add_get_handler(key, handler)¶
関数 handler を key のハンドラーとして登録します。 key に指定できる値は
get_content()を参照してください。
- add_set_handler(typekey, handler)¶
typekey に一致する型のオブジェクトが
set_content()に渡されたときに呼び出す関数として、handler を登録します。 typekey に指定できる値はset_content()を参照してください。
コンテンツマネージャーのインスタンス¶
現在、email パッケージが提供する具体的なコンテンツマネージャーは raw_data_manager だけですが、将来さらに追加される可能性があります。
raw_data_manager は EmailPolicy とその派生クラスが提供する content_manager です。
- email.contentmanager.raw_data_manager¶
このコンテンツマネージャーが
Message自体に加えて提供するインターフェースは最小限で、テキスト、生のバイト列、Messageオブジェクトだけを扱います。 それでも、基本の API と比べて大きな利点があります。 テキストパートのget_content()は文字列を返すため、アプリケーションで手動デコードする必要がありません。set_content()には、パートに追加するヘッダーやコンテンツ転送エンコーディングを制御する豊富なオプションがあります。 また、各種のadd_メソッドを利用でき、マルチパートメッセージを簡単に作成できます。- email.contentmanager.get_content(msg, errors='replace')¶
Return the payload of the part as either a string (for
textparts), anEmailMessageobject (formessage/rfc822parts), or abytesobject (for all other non-multipart types). Raise aKeyErrorif called on amultipart. If the part is atextpart and errors is specified, use it as the error handler when decoding the payload to a string. The default error handler isreplace.
- email.contentmanager.set_content(msg, <'str'>, subtype="plain", charset='utf-8', cte=None, disposition=None, filename=None, cid=None, params=None, headers=None)¶
- email.contentmanager.set_content(msg, <'bytes'>, maintype, subtype, cte="base64", disposition=None, filename=None, cid=None, params=None, headers=None)
- email.contentmanager.set_content(msg, <'EmailMessage'>, cte=None, disposition=None, filename=None, cid=None, params=None, headers=None)
msg にヘッダーとペイロードを追加します。
maintype/subtypeの値を持つ Content-Type ヘッダーを追加します。strの場合、MIME のmaintypeをtextに設定します。 サブタイプは subtype が指定されていればその値に、そうでなければplainに設定します。bytesの場合、指定された maintype と subtype を使います。 指定されていなければTypeErrorを送出します。EmailMessageオブジェクトの場合、メインタイプをmessageに設定します。 サブタイプは subtype が指定されていればその値に、そうでなければrfc822に設定します。 subtype がpartialの場合はエラーを送出します (message/partialパートの作成にはbytesオブジェクトを使う必要があります)。
charset が指定されている場合 (
strでのみ有効)、指定された文字セットで文字列をバイト列にエンコードします。 デフォルトはutf-8です。 指定された charset が標準の MIME 文字セット名の既知の別名であれば、標準の文字セット名を使います。cte が設定されている場合、指定されたコンテンツ転送エンコーディングでペイロードをエンコードし、Content-Transfer-Encoding ヘッダーをその値に設定します。 cte に指定できる値は
quoted-printable、base64、7bit、8bit、binaryです。 非 ASCII 値を含む入力に cte として7bitを指定するなど、入力を指定された形式でエンコードできない場合はValueErrorを送出します。strオブジェクトで cte を設定していない場合、ヒューリスティックによって最もコンパクトなエンコーディングを決めます。 エンコード前にstr.splitlines()ですべての行境界を正規化し、ペイロードの各行が現在のポリシーのlinesepプロパティで終わるようにします (元の文字列が改行で終わっていなくても同様です)。bytesオブジェクトの場合、cte を設定していなければ base64 とみなし、上記の改行変換は行いません。EmailMessageの場合、RFC 2046 に従い、subtype がrfc822で cte にquoted-printableまたはbase64を指定した場合と、subtype がexternal-bodyで cte に7bit以外を指定した場合にはエラーを送出します。message/rfc822で cte が指定されていなければ8bitを使います。 それ以外の subtype では7bitを使います。
注釈
cte の
binaryは、まだ正しく動作しません。set_content()によって変更されたEmailMessageオブジェクトは正しいものの、BytesGeneratorが正しく直列化しません。disposition が設定されていれば、Content-Disposition ヘッダーの値として使います。 指定されておらず、filename が指定されている場合は、値を
attachmentとしてヘッダーを追加します。 disposition も filename も指定されていなければ、ヘッダーは追加しません。 disposition に有効な値はattachmentとinlineだけです。filename が指定されている場合、Content-Disposition ヘッダーの
filenameパラメータの値として使います。cid が指定されている場合、その値を持つ Content-ID ヘッダーを追加します。
params が指定されている場合、その
items()メソッドの結果を反復処理し、得られた(key, value)ペアを使って Content-Type ヘッダーに追加のパラメータを設定します。headers が指定されていて、
headername: headervalue形式の文字列のリスト、またはheaderオブジェクトのリスト (name属性を持つことで文字列と区別します) である場合、そのヘッダーを msg に追加します。
脚注