Beckyのインデックス
 エキサイトのアクセス解析を見ていると、私のブログを見てくださる方が、どんな検索キーワードで訪れてきていただいているのか分かる。
 ごく最近書いた「ハンカチの木」など…

 その中で、もう3年以上も前に書いたBecky関連の記事を、毎月平均して数件もご覧頂いているのが分かる。
 せっかく訪問いただいて、失望されていないといいのだけど。


 3年前にはあいまいだったことで、最近理解できたことを少し書いてみる。 訪問いただいている方の、ご期待に沿うものであればいいのだか。


f0066555_11495290.jpg Beckyのメールを保存しているフォルダーは、左図のようになっている。
 Beckyの画面左側のツリービューの受信箱= !!!!InBox など。

 !!!Sent などのフォルダーには、Folder.idx Folder.ini xxx.bmf など3種類のファイルが保存されている。

 3eb70643.bmf などの bmf ファイルには、メッセージビューに表示されるメール(本文+添付フィル+ヘッダ)が保存される。

 Folder.idx には、リストビューに表示される「件名」・「差出人」などの情報が保存されると同時に、bmf ファイルへのひも付けがされている。


 Folder.idx の内容は改行で区切られた可変長のレコード。 (最初の1件目はファイルId?、実際のデータは2件目以降)

 その中は例えば、1fb4.5.3eb70644.お元気?.差出人.宛先.<・・・>..3eb11b7a.3eb11b54.3eb19ca8.787.000001.0.3.0.iso-2022-jp. のようになっている。
 「.」は各項目を区切るセパレータ。(1バイト、値は1)

f0066555_11514656.jpg 各項目の意味は前から順に、右の表のようになっている。

 ?が付いているのは、私には分からなかった項目。 もしかするとどこかに公開されているかもしれないが。

 タイプ欄の数字項目は、数字を16進数の文字列にしたもの。
 1fb4=8116、787=1927 などとなる。
 数字をバイナリ値としないのは、セパレータ「.」と区別が付かなくなるから。 ?

 差出人・宛先は名前+メールアドレスが保存される。

 送信日時などは、1970年1月1日0時0分0秒を0としたUnix形式の日付。

 C#などのDateTime型にするには10,000,000倍して、1970/1/1に加える必要がある。 (C#の日付は64ビット、Unixは32ビット。 32ビットなので、2038年には大騒ぎした2000年問題の再燃が起きるか?)
 3eb11b7a=2003/5/1 13:4:58 となる。

 優先度の3は通常、数字が小さいほど優先度が高い。
 エンコード方式の iso-2022-jp はシフトJISのこと。


f0066555_11525947.jpg 格納ファイル・アドレスについては容易に分かると思うが、左図のようになる。

 3eb70643、3eb70644 などいくつかあるbmfファイルのアドレス以降にメールが保存されている。

 ファイルサイズは短いメールでもヘッダが付加され、さらに添付ファイルがあるとかなり大きなものとなる。

 VB6.0が画面表示にJISコード、ファイルへの入出力にシフトJISを用いていたのに対し、Visual C#では画面表示にUnicode、ファイル入出力にはUtf8を用いている。

 BeckyのファイルもシフトJISで書かれているので、シフトJIS⇒Unicodeへの変換が必要となる。
 ただし、ファイルストリームのエンコード方式にシフトJISを指定すれば、自動的に変換してくれる。

 さらには、BASE64のエンコード・デコードもそれぞれメソッドが用意されている。 以前VB6.0では苦心して自分でデコードしたのに…。 もしかしてVB6.0にもツールが用意されていた?

 【追記】
 書き漏らしてしまったこと。 (そう重要ではないが)

 Folder.ini には、受信箱などのメールのトータル件数・未読件数、リストビューに表示する際のソート順、最後に保存したメールの「連番?」などを保存している。
[PR]
by t_ichib | 2009-05-02 12:04 | 今日もまた老年プログラマー
<< Outlook Express... ハンカチの木 >>