email.contentmanager:MIMEコンテンツの管理—Pythonドキュメント
email.contentmanager :MIMEコンテンツの管理
ソースコード: :source: `Lib / email / contentmanager.py`
バージョン3.6の新機能: 1
- class email.contentmanager.ContentManager
コンテンツマネージャの基本クラス。
get_content
およびset_content
ディスパッチメソッドだけでなく、MIMEコンテンツと他の表現の間のコンバーターを登録するための標準のレジストリメカニズムを提供します。- 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__
)。タイプのクォールネーム(
typ.__qualname__
)タイプの名前(
typ.__name__
)。
上記のいずれにも一致しない場合は、 MRO (
typ.__mro__
)のタイプごとに上記のすべてのチェックを繰り返します。 最後に、他のキーがハンドラーを生成しない場合は、キーNone
のハンドラーを確認します。None
のハンドラーがない場合は、型の完全修飾名に対して KeyError を発生させます。MIME-Version ヘッダーが存在しない場合は、それも追加します( MIMEPart も参照)。
- add_get_handler(key, handler)
関数 handler を key のハンドラーとして記録します。 key の可能な値については、 get_content()を参照してください。
- add_set_handler(typekey, handler)
typekey に一致する型のオブジェクトが set_content()に渡されたときに呼び出す関数として、 handler を記録します。 typekey の可能な値については、 set_content()を参照してください。
ContentManagerインスタンス
現在、電子メールパッケージは1つの具体的なコンテンツマネージャー raw_data_manager のみを提供しますが、将来さらに追加される可能性があります。 raw_data_manager は、 EmailPolicy とその派生物によって提供される content_manager です。
- email.contentmanager.raw_data_manager
このコンテンツマネージャは、メッセージ自体が提供するものを超える最小限のインターフェイスのみを提供します。テキスト、生のバイト文字列、およびメッセージオブジェクトのみを処理します。 それでも、ベースAPIと比較して大きな利点があります。テキスト部分の
get_content
は、アプリケーションが手動でデコードしなくてもUnicode文字列を返します。set_content
は、制御するための豊富なオプションセットを提供します。パーツに追加され、コンテンツ転送エンコーディングを制御するヘッダー。さまざまなadd_
メソッドを使用できるため、マルチパートメッセージの作成が簡単になります。- email.contentmanager.get_content(msg, errors='replace')
パーツのペイロードを、文字列(
text
パーツの場合)、 EmailMessage オブジェクト(message/rfc822
パーツの場合)、またはbytes
オブジェクトのいずれかとして返します。 (他のすべての非マルチパートタイプの場合)。multipart
で呼び出された場合は、 KeyError を発生させます。 パーツがtext
パーツで、エラーが指定されている場合は、ペイロードをユニコードにデコードするときにエラーハンドラーとして使用します。 デフォルトのエラーハンドラーはreplace
です。
- 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 にヘッダーとペイロードを追加します。
Content-Type ヘッダーに
maintype/subtype
値を追加します。str
の場合、MIMEmaintype
をtext
に設定し、サブタイプが指定されている場合は subtype に、指定されている場合はplain
に設定します。そうではない。bytes
の場合、指定されたメインタイプおよびサブタイプを使用するか、指定されていない場合は TypeError を発生させます。EmailMessage オブジェクトの場合、メインタイプを
message
に設定し、サブタイプを指定されている場合はサブタイプに設定し、指定されていない場合はrfc822
に設定します。 サブタイプがpartial
の場合、エラーが発生します(message/partial
パーツを作成するには、bytes
オブジェクトを使用する必要があります)。
charset が提供されている場合(
str
でのみ有効)、指定された文字セットを使用して文字列をバイトにエンコードします。 デフォルトはutf-8
です。 指定された charset が標準のMIME文字セット名の既知のエイリアスである場合は、代わりに標準の文字セットを使用してください。cte が設定されている場合は、指定されたコンテンツ転送エンコーディングを使用してペイロードをエンコードし、 Content-Transfer-Encoding ヘッダーをその値に設定します。 cte に指定できる値は、
quoted-printable
、base64
、7bit
、8bit
、およびbinary
です。 入力を指定されたエンコーディングでエンコードできない場合(たとえば、非ASCII値を含む入力に対して7bit
の cte を指定する場合)、 ValueError を発生させます。 。str
オブジェクトの場合、 cte が設定されていない場合は、ヒューリスティックを使用して最もコンパクトなエンコーディングを決定します。EmailMessage の場合、 RFC 2046 に従って、
quoted-printable
またはbase64
の cte の場合にエラーが発生します]は、サブタイプrfc822
、および[X219X]サブタイプexternal-body
の7bit
以外の cte に対して要求されます。 。message/rfc822
で、 cte が指定されていない場合は、8bit
を使用します。 サブタイプの他のすべての値については、7bit
を使用してください。
ノート
binary
の cte は実際にはまだ正しく機能していません。set_content
によって変更されたEmailMessage
オブジェクトは正しいですが、 BytesGenerator は正しくシリアル化しません。disposition が設定されている場合は、 Content-Disposition ヘッダーの値として使用します。 指定されておらず、 filename が指定されている場合は、値
attachment
のヘッダーを追加します。 disposition が指定されておらず、 filename も指定されていない場合は、ヘッダーを追加しないでください。 disposition の有効な値は、attachment
とinline
のみです。filename を指定する場合は、 Content-Disposition ヘッダーの
filename
パラメーターの値として使用してください。cid が指定されている場合は、 cid を値として Content-ID ヘッダーを追加します。
params が指定されている場合は、その
items
メソッドを繰り返し、結果の(key, value)
ペアを使用して、 Content-Type ヘッダーに追加のパラメーターを設定します。headers が指定されていて、
headername: headervalue
形式の文字列のリストまたはheader
オブジェクトのリストである場合(name
属性を持つことで文字列と区別されます)、ヘッダーを msg に追加します。
脚注