18.1.3. email.generator:MIMEドキュメントの生成—Pythonドキュメント

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

18.1.3。 email.generator :MIMEドキュメントの生成

最も一般的なタスクの1つは、メッセージオブジェクト構造で表される電子メールメッセージのフラットテキストを生成することです。 smtplib モジュールまたは nntplib モジュールを介してメッセージを送信する場合、またはコンソールにメッセージを印刷する場合は、これを行う必要があります。 メッセージオブジェクト構造を取得してフラットテキストドキュメントを作成するのは、 Generator クラスの仕事です。

繰り返しますが、 email.parser モジュールと同様に、バンドルされたジェネレーターの機能に制限されません。 自分で一から書くことができます。 ただし、バンドルされたジェネレーターは、ほとんどの電子メールを標準に準拠した方法で生成する方法を知っており、MIMEおよび非MIMEの電子メールメッセージを適切に処理する必要があり、フラットテキストからパーサーを介したメッセージ構造に変換されるように設計されていますクラス、およびフラットテキストに戻ると、べき等です(入力は出力と同じです) 1 。 一方、プログラムによって作成された Message でジェネレーターを使用すると、デフォルトが入力されているため、 Message オブジェクトが変更される可能性があります。

email.generator モジュールからインポートされた Generator クラスのパブリックメソッドは次のとおりです。

class email.generator.Generator(outfp[, mangle_from_[, maxheaderlen]])

Generator クラスのコンストラクターは、引数として outfp というファイルのようなオブジェクトを取ります。 outfp は、 write()メソッドをサポートし、Python拡張印刷ステートメントの出力ファイルとして使用できる必要があります。

オプションの mangle_from_ は、Trueの場合、Fromとまったく同じように始まる本文の行の前に>文字を配置するフラグです。 Fromの後に行頭にスペースが続きます。 これは、そのような行がUnixメールボックス形式のエンベロープヘッダーセパレータと間違えられないようにするための唯一の保証された移植可能な方法です(詳細については、コンテンツ長形式が悪い理由を参照)。 mangle_from_ のデフォルトはTrueですが、Unixメールボックス形式のファイルを作成していない場合は、これをFalseに設定することをお勧めします。

オプションの maxheaderlen は、継続されないヘッダーの最長の長さを指定します。 ヘッダー行が maxheaderlen より長い場合(文字数、タブが8スペースに拡張されている場合)、ヘッダーは Header クラスで定義されているように分割されます。 ヘッダーの折り返しを無効にするには、ゼロに設定します。 RFC 2822 で推奨されているように(必須ではありません)、デフォルトは78です。

その他のパブリック Generator メソッドは次のとおりです。

flatten(msg[, unixfrom])

msg をルートとするメッセージオブジェクト構造のテキスト表現を、 Generator インスタンスの作成時に指定された出力ファイルに出力します。 サブパーツは深さ優先でアクセスされ、結果のテキストは適切にMIMEエンコードされます。

オプションの unixfrom は、ルートメッセージオブジェクトの最初の RFC 2822 ヘッダーの前にエンベロープヘッダー区切り文字を強制的に印刷するフラグです。 ルートオブジェクトにエンベロープヘッダーがない場合は、標準のヘッダーが作成されます。 デフォルトでは、これはFalseに設定されており、封筒区切り文字の印刷を禁止しています。

サブパーツの場合、エンベロープヘッダーは印刷されないことに注意してください。

バージョン2.2.2の新機能。

clone(fp)

この Generator インスタンスの独立したクローンを、まったく同じオプションで返します。

バージョン2.2.2の新機能。

write(s)

文字列 s を基になるファイルオブジェクトに書き込みます。 outfpGenerator のコンストラクターに渡されました。 これにより、拡張印刷ステートメントで使用する Generator インスタンスに十分なファイルのようなAPIが提供されます。

便宜上、メソッドMessage.as_string()およびstr(aMessage)、別名を参照してください。 Message.__str__()。これは、メッセージオブジェクトのフォーマットされた文字列表現の生成を簡素化します。 詳細については、 email.message を参照してください。

email.generator モジュールは、 DecodedGenerator と呼ばれる派生クラスも提供します。これは、非 text を除いて、 Generator 基本クラスに似ています。パーツは、パーツを表すフォーマット文字列に置き換えられます。

class email.generator.DecodedGenerator(outfp[, mangle_from_[, maxheaderlen[, fmt]]])

Generator から派生したこのクラスは、メッセージのすべてのサブパートをウォークスルーします。 サブパートがメインタイプ text の場合、サブパートのデコードされたペイロードを出力します。 オプションの _mangle_from_ および maxheaderlen は、 Generator 基本クラスと同じです。

サブパートがメインタイプ text でない場合、オプションの fmt は、メッセージペイロードの代わりに使用されるフォーマット文字列です。 fmt は、%(keyword)s形式の次のキーワードで展開されます。

  • type –非テキスト部分の完全なMIMEタイプ

  • maintype –非テキスト部分のメインMIMEタイプ

  • subtype –非テキスト部分のサブMIMEタイプ

  • filename –非テキスト部分のファイル名

  • description –非テキスト部分に関連付けられた説明

  • encoding –非テキスト部分のコンテンツ転送エンコーディング

fmt のデフォルト値はNoneで、これは

[Non-text (%(type)s) part of message omitted, filename %(filename)s]

バージョン2.2.2の新機能。

バージョン2.5で変更:以前に非推奨になったメソッド__call__()は削除されました。


脚注

1
このステートメントは、unixfrom引数に適切な設定を使用し、maxheaderlen = 0を設定することを前提としています(これにより、入力行の長さが何であれ保持されます)。 また、多くの場合、ヘッダー内の空白の実行は単一の空白に折りたたまれているため、厳密には当てはまりません。 後者は最終的に修正されるバグです。