7.3.1.3 MH

クラス MH( path[, factory=None[, create=True]])
MH 形式のメールボックスのための Mailbox のサブクラス。 パラメータ factory は呼び出し可能オブジェクトで (バイナリモードで開かれているかのように振る舞う)ファイル風メッセージ表現を 受け付けて好みの表現を返すものです。factory が Noneならば、 MHMessage がデフォルトのメッセージ表現として使われます。 create が True ならばメールボックスが存在しないときには 作成します。

MH はディレクトリに基づいたメールボックス形式で MH Message Handling System というメールユーザエージェントのために発明されました。MH メールボックス中の それぞれのメッセージは一つのファイルとして収められています。MH メールボックスには メッセージの他に別の MH メールボックス(フォルダ と呼ばれます)を含んでも かまいません。フォルダは無限にネストできます。MH メールボックスにはもう一つ シーケンス という名前付きのリストでメッセージをサブフォルダに移動することなく 論理的に分類するものがサポートされています。シーケンスは各フォルダの .mh_sequences というファイルで定義されます。

MH クラスは MH メールボックスを操作しますが、mh の動作の全てを 模倣しようとはしていません。特に、mh が状態と設定を保存する context や .mh_profile といったファイルは書き換えませんし 影響も受けません。

MH インスタンスには Mailbox の全てのメソッドの他に次のメソッドが あります。

list_folders( )
全てのフォルダの名前のリストを返します。

get_folder( folder)
folder という名前のフォルダを表わす MH インスタンスを返します。 もしフォルダが存在しなければ NoSuchMailboxError 例外が送出されます。

add_folder( folder)
folder という名前のフォルダを作成し、それを表わす MH インスタンスを 返します。

remove_folder( folder)
folder という名前のフォルダを削除します。フォルダにメッセージが一つでも残っていれば、 NotEmptyError 例外が送出されフォルダは削除されません。

get_sequences( )
シーケンス名をキーのリストに対応付ける辞書を返します。シーケンスが一つもなければ 空の辞書を返します。

set_sequences( sequences)
メールボックス中のシーケンスを get_sequences() で返されるような名前と キーのリストを対応付ける辞書 sequences に基づいて再定義します。

pack( )
番号付けの間隔を詰める必要に応じてメールボックス中のメッセージの名前を付け替えます。 シーケンスのリストのエントリもそれに応じて更新されます。注意: 既に発行された キーはこの操作によって無効になるのでそれ以降使ってはなりません。

MH で実装された Mailbox のいくつかのメソッドには特別な注意が 必要です。

remove( key)
__delitem__( key)
discard( key)
これらのメソッドはメッセージを直ちに削除します。名前の前にコンマを付加して メッセージに削除の印を付けるという MH の規約は使いません。

lock( )
unlock( )
3種類のロック機構が使われます -- ドットロッキングと、もし使用可能ならば flock() と lockf() システムコールです。 MH メールボックスに対するロックとは .mh_sequences のロックと、 それが影響を与える操作中だけの個々のメッセージファイルに対するロックを意味します。

get_file( key)
ホストのプラットフォームによっては、返されたファイルが開いている間元になったメッセージを 変更したり削除したりできない場合があります。

flush( )
MH メールボックスへの変更は即時に適用されますのでこのメソッドは何もしません。

close( )
MH インスタンスは開いたファイルを保持しませんのでこのメソッドは unlock と同じです。

参考:

nmh - Message Handling System
mh の改良版である nmh のホームページ
MH & nmh: Email for Users & Programmers
GPLライセンスの mh および nmh の本で、このメールボックス形式についての情報があります

ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。