古いバージョンの mailbox モジュールはメッセージの追加や削除といった メールボックスの変更をサポートしていませんでした。また形式ごとのメッセージプロパティ を表現するクラスも提供していませんでした。後方互換性のために、古いメールボックス クラスもまだ使うことができますが、できるだけ新しいクラスを使うべきです。
古いメールボックスオブジェクトは繰り返しと一つの公開メソッドだけを提供していました:
) |
None
を返します。
ほとんどの古いメールボックスクラスは現在のメールボックスクラスと違う名前ですが、 Maildir だけは例外です。そのため、新しい方の Maildir クラスには next() メソッドが定義され、コンストラクタも他の新しいメールボックスクラスとは 少し異なります。
古いメールボックスのクラスで名前が新しい対応物と同じでないものは以下の通りです:
fp[, factory]) |
可搬性を最大限にするために、Unix形式のメールボックス内にある
メッセージは、正確に 'From '
(末尾の空白に注意してください)
で始まる文字列が、直前の正しく二つの改行の後にくるような行で
分割されます。現実的には広範なバリエーションがあるため、それ以外の
From_ 行について考慮すべきではないのですが、現在の実装では先頭の
二つの改行をチェックしていません。これはほとんどのアプリケーションで
うまく動作します。
UnixMailbox クラスでは、ほぼ正確に From_ デリミタにマッチする ような正規表現を用いることで、より厳密に From_ 行のチェックを行う バージョンを実装しています。UnixMailbox ではデリミタ行が "From name time" の行に分割されるものと考えます。 可搬性を最大限にするためには、代わりに PortableUnixMailbox クラスを使ってください。このクラスは UnixMailbox と同じですが、 個々のメッセージは "From " 行だけで分割されるものとみなします。
より詳細な情報については、 Configuring Netscape Mail on Unix: Why the Content-Length Format is Bad を参照してください。
fp[, factory]) |
'From '
で始まる行をクオートするため、
この分割はうまく動作します。
fp[, factory]) |
dirname[, factory]) |
fp[, factory]) |
'*** EOOH ***'
(End-Of-Original-Headers)
だけを含む行の前にあり、visible ヘッダは EOOH
行の後に
あります。Babyl 互換のメールリーダは visible ヘッダのみを表示
し、 BabylMailbox オブジェクトは visible ヘッダのみを
含むようなメッセージを返します。メールメッセージは EOOH 行で始まり、
'\037\014'
だけを含む行で終わります。
factory は UnixMailbox クラスにおけるのと
同様です。
古いメールボックスクラスを撤廃された rfc822 モジュールではなく、 email モジュールと使いたいならば、以下のようにできます:
import email import email.Errors import mailbox def msgfactory(fp): try: return email.message_from_file(fp) except email.Errors.MessageParseError: # Don't return None since that will # stop the mailbox iterator return '' mbox = mailbox.UnixMailbox(fp, msgfactory)
一方、メールボックス内には正しい形式の MIME メッセージしか入っていないと 分かっているのなら、単に以下のようにします:
import email import mailbox mbox = mailbox.UnixMailbox(fp, email.message_from_file)
ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。