email.contentmanager:MIMEコンテンツの管理—Pythonドキュメント

提供:Dev Guides
< PythonPython/docs/3.8/library/email.contentmanager
移動先:案内検索

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)

msgmimetypeに基づいてハンドラー関数を検索し(次の段落を参照)、すべての引数を渡して呼び出し、呼び出しの結果を返します。 ハンドラーが msg からペイロードを抽出し、抽出されたデータに関する情報をエンコードするオブジェクトを返すことが期待されます。

ハンドラーを見つけるには、レジストリで次のキーを探し、最初に見つかったキーで停止します。

  • 完全なMIMEタイプを表す文字列(maintype/subtype

  • maintypeを表す文字列

  • 空の文字列


これらのキーのいずれもハンドラーを生成しない場合は、完全なMIMEタイプの KeyError を発生させます。

set_content(msg, obj, *args, **kw)

maintypemultipartの場合、 TypeError を発生させます。 それ以外の場合は、 obj のタイプに基づいてハンドラー関数を検索し(次の段落を参照)、 msgclear_content()を呼び出し、ハンドラー関数を呼び出します。すべての引数を通過します。 ハンドラーが objmsg に変換して保存し、情報をエンコードするためのさまざまなMIMEヘッダーの追加など、 msg に他の変更を加えることが期待されます。保存されたデータを解釈するために必要です。

ハンドラーを見つけるには、 objtyp = type(obj))のタイプを取得し、レジストリで次のキーを探し、最初に見つかったキーで停止します。

  • タイプ自体(typ

  • タイプの完全修飾名(typ.__module__ + '.' + typ.__qualname__)。

  • タイプのクォールネーム(typ.__qualname__

  • タイプの名前(typ.__name__)。


上記のいずれにも一致しない場合は、 MROtyp.__mro__)のタイプごとに上記のすべてのチェックを繰り返します。 最後に、他のキーがハンドラーを生成しない場合は、キーNoneのハンドラーを確認します。 Noneのハンドラーがない場合は、型の完全修飾名に対して KeyError を発生させます。

MIME-Version ヘッダーが存在しない場合は、それも追加します( MIMEPart も参照)。

add_get_handler(key, handler)

関数 handlerkey のハンドラーとして記録します。 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の場合、MIME maintypetextに設定し、サブタイプが指定されている場合は subtype に、指定されている場合はplainに設定します。そうではない。

  • bytesの場合、指定されたメインタイプおよびサブタイプを使用するか、指定されていない場合は TypeError を発生させます。

  • EmailMessage オブジェクトの場合、メインタイプをmessageに設定し、サブタイプを指定されている場合はサブタイプに設定し、指定されていない場合はrfc822に設定します。 サブタイプpartialの場合、エラーが発生します(message/partialパーツを作成するには、bytesオブジェクトを使用する必要があります)。


charset が提供されている場合(strでのみ有効)、指定された文字セットを使用して文字列をバイトにエンコードします。 デフォルトはutf-8です。 指定された charset が標準のMIME文字セット名の既知のエイリアスである場合は、代わりに標準の文字セットを使用してください。

cte が設定されている場合は、指定されたコンテンツ転送エンコーディングを使用してペイロードをエンコードし、 Content-Transfer-Encoding ヘッダーをその値に設定します。 cte に指定できる値は、quoted-printablebase647bit8bit、およびbinaryです。 入力を指定されたエンコーディングでエンコードできない場合(たとえば、非ASCII値を含む入力に対して7bitcte を指定する場合)、 ValueError を発生させます。 。

  • strオブジェクトの場合、 cte が設定されていない場合は、ヒューリスティックを使用して最もコンパクトなエンコーディングを決定します。

  • EmailMessage の場合、 RFC 2046 に従って、quoted-printableまたはbase64cte の場合にエラーが発生します]は、サブタイプ rfc822、および[X219X]サブタイプ external-body7bit以外の cte に対して要求されます。 。 message/rfc822で、 cte が指定されていない場合は、8bitを使用します。 サブタイプの他のすべての値については、7bitを使用してください。


ノート

binarycte は実際にはまだ正しく機能していません。 set_contentによって変更されたEmailMessageオブジェクトは正しいですが、 BytesGenerator は正しくシリアル化しません。

disposition が設定されている場合は、 Content-Disposition ヘッダーの値として使用します。 指定されておらず、 filename が指定されている場合は、値attachmentのヘッダーを追加します。 disposition が指定されておらず、 filename も指定されていない場合は、ヘッダーを追加しないでください。 disposition の有効な値は、attachmentinlineのみです。

filename を指定する場合は、 Content-Disposition ヘッダーのfilenameパラメーターの値として使用してください。

cid が指定されている場合は、 cid を値として Content-ID ヘッダーを追加します。

params が指定されている場合は、そのitemsメソッドを繰り返し、結果の(key, value)ペアを使用して、 Content-Type ヘッダーに追加のパラメーターを設定します。

headers が指定されていて、headername: headervalue形式の文字列のリストまたはheaderオブジェクトのリストである場合(name属性を持つことで文字列と区別されます)、ヘッダーを msg に追加します。

脚注

1
もともとは3.4で暫定モジュールとして追加されました