PCMPMだよ〜ん -- 2000.11.22
随分遅れての情報公開なんだけど, ついに PCMPMのフォルダー構造の公開。 って, まだ公開の確認とってないや。 事後承諾てことになるかな? ちょっち やばいかも。 (←ぉぃ)
この PCMPMのばやいも, PMMail/2と同じように 一つのメッセージは一つのファイルに収められているのら。 メッセージの数だけファイルがあるのだね。(つーか, ソレが普通なのかも)
んで, ファイル名はとゆーと 数字になっている訳なんだ, コレが。
・・・ ま, ここまでだったらディレクトリ手繰れば きっと分かるはずにょ。
実は, このメッセージのファイルにはいくつかの謎が隠されている。
まず一つ目は, ファイルの先頭1行分はメッセージと関係ないらしいこと。
なにが入っているのかは分かんない。だって手元にないから。(^^)\(☆バキッ)
そして二つ目は, 拡張属性が付いていて そこにある種の情報が含まれていたりすること。
なんせ拡張属性っつーくらいだからね。いやホント。で, 拡張属性のソレの名前は PCMPM.READMARKだにょ。
その必要な情報ってのが, 11バイト目の未読/既読フラグ。てゆーより 11バイトしかないのかな。
ちょっと分かんないや。なんせ手元にないから。(^^)\(☆ドカッ)
さて, そのディレクトリには数字のファイル名を持つ物の他にも ファイルがあることに気付くだろう。
- FIRST.PMS ・・・ 最初の番号を持つファイル
- NUMBER.PMS ・・・ 次に登録する番号を持つファイル
てゆーことで, FIRST.PMSに入っている番号から NUMBER.PMSに入っている番号の一つ手前までが, そのフォルダーに存在しているメッセージのファイルってことなのら。たぶん。
◇
んで, 今度はプログラムから PCMPMのフォルダーの位置をアレする方法をお教えしよう。ふふふふふ, あははははー。
まずは, 環境変数PATH
から PCMPM.EXEを探し出すってことになる。
ちなみに σ(^^) の メールDB 編集では どーやってるかっつーと, PATH
に指定していないことも考慮して すべてのディレクトリを探索していたりなんかする。
でも, 毎回ソレだったら遅過ぎな訳で, 勝手に <PCM/PM_EXE> とゆーオブジェクトIDで Workplace Shellに登録していたりするにょ。 おちゃめー。
時間がある人は, どーやってるか眺めてみよー。混乱すること請け合いかも。
PCMPM.EXEが見つかったら, そこに PCMPM.INIも見つかることだろー。って, 最初からコレ探せばいいんじゃないのけ? まっいいか。
その PCMPM.INIには, PCMPM
の中の path
のとこに, メールが入っているフォルダーの位置のよーなのが入っているのら。
んで, そこからディレクトリを調べていくと お宝が ・・・ って訳。
Rexxのプログラムにすると↓こう。エラー処理は省いてあるもん。
inif = /* PCMPM.EXE があるとこの*/'PCMPM.INI' base = SysIni(inif, 'PCMPM', 'path') if DBRight(base, 1) \== '\' then base = base'\' base = base'Folder' call SysFileTree base'\', 'file', 'DO' do i = 1 to file.0 fname = file.i Rc = SysGetEA(fname, 'PCMPM.FOLDER.NUMBER', 'ea') say fname '('substr(ea, 11)')' end
ところで, ↑の拡張属性ってなんだっけ。(^^;
◇
さてさて, PCMPMも 古い版では, こんなじゃなかったはず。てことは もしかすっと今の PCMPMでは管理方法が違うのかも。 違ってたらごめんしてちょ。
次回は, ・・ そう 次回もあったりするもん。ソレは Polarbar Mailかも。だけど予定は未定てことだもん。
・・てことで, うじゃ。(^^)/~
メール構造 (PMMail/2) -- 2000.5.11
PMMail/2 ・・ ソレは英語版のメーラーのことだ。
だけど, RxJisか それとも 上野博さんとこの DeleGate で, 日本語が通るよーになるはずだ。きっと。
このメーラーって どれくらいの人が使ってんのか知らないけど, 見た目は結構よさげ。
てことで, その一部の構造を公開しよう。ふっふっふ。
◇
まずは手始めに, ソレがインストールされているかどーか, コレについて調べてみよう。
とりあえず「デスクトップ」にソレのフォルダーがあるかどうかアレしてみて ・・・ とゆーのはウソ。
ホントは, ユーザー INIファイルの PMMail/2
の InstallRoot
を調べてみると分かるのだ。
Rexxで見てみると (↓)こう。
/* PMMailが導入してある場所を表示してみる */ call RxFuncAdd 'SysLoadFuncs', 'rexxutil', 'SysLoadFuncs' call SysLoadFuncs say SysIni('User', 'PMMail/2', 'InstallRoot')
エラーが表示されたら失敗だ。じだんだ踏んで悔しがろう。
んじゃ次に, メールフォルダーの場所を見つけてみよう。
先ほどのディレクトリからたどっていくと *.ACT と, ゆーディレクトリがあって, さらにそこからラッキョのごとく *.FLD とゆーフォルダーが見つかる。ブツはその中だ。ぐふふふふ。 (← なんだ, ラッキョって)
一つ一つのメッセージは, それぞれ別ファイルに収められてて, そーゆー意味で Netscapeとはちと違う。 アレは幾つかのメッセージがまとめて一つになってるからね。 んで, *.FLD の中には FOLDER.BAG っつーファイルが見つかる。 コレが一つ一つのメッセージを管理しているファイルなのだ。
さて, これでよーやく一歩手前まで到達したって気がする。 ・・・ 気がするだけかもしれないけど, 先に進んでみよう。 この FOLDER.BAG はテキスト形式になっていて, 1行分の構造は(↓)このよーになっている。 あ, 項目の区切りはなぜか 0xde ね。
- 0 なら未読 (16進数?)
- 不明
- 日付
- 時刻
- Subject
- To
- To の名前
- From
- From の名前
- サイズ (KB単位)
- ファイル名
- 不明
- ファイルサイズ
ここまで来たら, あとは 11番目の項目に記されているファイル名を使って, 内容を読みだすだけだ。あぁ, よくぞここまで ・・・ (←何が)
メッセージが収められているファイルには, メッセージのヘッダとボディとが空行を隔てて書き込まれている。
プログラムでアレしたりコレしたりするばやい, そのことに注意しておこうね。
◇
何だかすっかり更新を忘れてたよーなこのページ。実はアレについて書いておこうとかメモはあったんだけど, すっかし忘れてた。 ま, いいか。 うじゃ (^o^)/~
.snm ファイル構造 その(1), (2) -- 2000.3.2, 2000.3.8
てことで, Netscape 2.02のメール関係の *.snmファイルの構造なのであ〜る。
ここには, 実際のメッセージ・テキストを高速に扱うことができるよーに ・・・ だか何だかのため, いろんな情報が収められている。 この情報を使って, なにかのプログラムを作ってもいいかもしんない。
けどねー, 2.02 じゃバージョン低いからねー, やっぱダメだね。(^^;
さて, このファイルの先頭には, テキストで 1行だけ IDっぽいのが入っていて, それには ・・・ # Netscape folder cache などとゆーふーになっている。
そんで, その後にはバイナリで, 次のよーな順番で各種の情報が入ってんのだ。
- 各種件数とか日付とか各種サイズとかいろいろ
- キャッシュ(?) ・・・ 文字列の配列で, 添字は 0から
- 各メッセージ毎に, いろんな情報が ・・
では, 最初の「各種のアレ」ってヤツを見ていくことにしよう。
項目名(?) | サイズ |
---|---|
文字列 "# Netscape folder cache" | 1行 |
不明 | 4 Bytes |
ファイルのサイズ | 4 Bytes |
ファイルの更新日付 | 4 Bytes |
何かの位置? | 4 Bytes |
全体の件数 | 4 Bytes |
実際の件数 | 4 Bytes |
未読件数 | 4 Bytes |
移動・削除した長さ | 4 Bytes |
・・・ こんなとこかな。
◇
んで, (↑)の続きだよん。(^^)
ヘッダーっぽいものの後には, 文字列がどどどーんと入っている。
文字列の件数 | 2 Bytes |
0x00で終わる文字列 | 「文字列の件数」の数だけある |
・・・ なんて単純なんだろ。
で, この文字列は何かっつーと, この後に続く「各メッセージの情報」から参照されている訳なのだ。
参照は, 番号でアレされていて, まるで文字列の配列みたいに扱われることになってるにょ。
んで, 最初にも書いたように, この添字は 0から始まるんだもーん。
◇
で, お次は, 各メッセージの情報。
ここには, 「メッセージが格納されているファイル」の, 各メッセージの内容が, アクセスしやすいように整然と並んでいるのだ。
てことで, この構造は, メッセージの数だけ並んで入っている (「全体の件数」の数だよー)。
項目名(?) | サイズ |
---|---|
From文字列の添字 | 2 Bytes |
To文字列の添字 | 2 Bytes |
Subject文字列の添字 | 2 Bytes |
Date(time_t形式) | 4 Bytes |
不明 | 2 Bytes |
status情報 | 2 Bytes |
「メッセージファイル」のオフセット | 4 Bytes |
このメッセージの長さ | 4 Bytes |
メッセージ内の X-Mozilla-Statusの位置 | 2 Bytes |
メッセージの行数 | 2 Bytes |
Message-ID文字列の添字 | 2 Bytes |
参照(?)数 | 2 Bytes |
参照(?)文字列の添字 | 2 Bytes × 参照(?)数 |
あ〜〜, 何だかコレ(↑)って意味不明な日本語になってる気がする (^^;
てなことで, うじゃ (^o^)/~
Netscape 2.02 -- 2000.2.21
なんと今回, Netscape 2.02のメーラーについての話。
うーみゅ, ちょー遅過ぎって感じがしないでもないね。へへへっ。
実は, Palmデバイス系のソフトウェアを開発するってなとき, いろんなメーラー調べてくうちに, このメーラーのことも何となく分かったっつーことなのにゃ。 だがしかーし, 『2.02』, つまり(現在の)最新の『4.61』ではにゃ〜い。 『4.61』について何か分かったらアレするかもしれないけど, トホーもなく変わっちゃってるから無理かも。(T-T)
で, そのメールフォルダのことなんだけど, コレって(ディレクトリじゃなく)単なるファイルになってるのだ。 つまり「Inbox」「Trash」とゆーフォルダだったら, 二つのファイルってことだね。 ここまでは, Netscapeのディレクトリ覗くと, よ〜く分かるはずだっ。
このメールフォルダの中にあるメッセージはどーゆー形式になってるのか? ・・・ それはだね, まんま通信した時のイメージで入ってんのさっ。
ヘッダも通常のやつだし, 漢字は(メール送受信に使われる)JISコードで入ってるはずだし, 添付ファイルもそのまんま。
でも, たくさんのメッセージを一つのファイルに収めてる訳で, メッセージの区切りとかが必要になる。 ソレがないと Netscapeはメッセージの一覧さえ表示できなくなってしまう。
ソレが『From - Mon Feb 21 01:02:03 2000』などと記されている行なのだ。
行頭に『From -』から始まるのがあるとそーゆーことになるらしい。
もひとつ, メッセージではない部分ってのがある。ソレがコレ『X-Mozilla-Status:』。
ヘッダの中にソレが入ってて, 4桁の 16進数らしくって, フラッグか何からしい。
値 | 推測できる意味 |
---|---|
0000 | 取り込んだばかりの状態? (未読) |
0001 | メッセージを読んで, 緑が消えた状態 |
0004 | 赤い旗を立てた状態 |
0008 | メッセージが存在しない状態(移動とか削除) |
← ほかにもいろいろあって, 「8001」とか見かけるんだけど, ・・・ 意味分がんね。(T-T)
んで, メールフォルダがあるところに「*.snm」なんてゆーのが見つかる。
では次に, コレの構造を紹介 ・・・ と思ってる間に, T.V.を見る時間が来てしまった。うじゃ (^o^)/ (←こら)