ケータイ変えました。
今度は W43S です。
まあ、W43S の感じとかは別途機会があれば書くとして... 今回は W31T から W43S へ、メールの送受信履歴をコピーする方法を検証してみることにする。
[ファーストステップ]
W31T にはメールデータを SD カードにバックアップする機能がある。ただ、バックアップしたデータをリストアする方法も閲覧する方法もないように思えるのはどういうことなのか...
#一応、メモリーカード上のメールデータを読込可能な市販ソフトはある。
まあ、とりあえずメールデータを SD カードに保存する。メールデータを保存した SD カードをカードリーダーで読み込むと...
PRIVATE\AU\ML
というフォルダがあり、そこにメールデータは保存されている。
ML フォルダの中は...
M_RE (受信メール)
M_SE (送信メール)
というフォルダがある。受信メールフォルダの中には RE_S_000 ~ RE_S_009 という 10 個のサブフォルダが、送信メールフォルダには SE_S_000 というサブフォルダがある。このサブフォルダの中にメールデータが入っているワケですが... まあ、この中身の仕様は W31T と W43S でほぼ同じ。
#実は *.VMG というメール本文が保存されているファイルの仕様が若干違うんだけど、まあ、無視してもいいみたい。
[セカンドステップ]
W43S は ソニーエリクソン。ソニーですので... 当然メモリーカードはメモリースティック。それも Duo 。まあ、最近の僕はすっかりソニー製品に囲まれて生きているので、メモリースティック Pro Duo は余ってるので問題なし。
そして、 W43S にもメールデータを メモリースティック にバックアップする機能がある。しかも、 W31T と違って、 W43S にはバックアップしたメールデータを閲覧する機能がある!とりあえず検証のタメにメールのバックアップを実行。カードリーダーで中身を見てみる。
MOBILE\AU\ML
というフォルダがあり ML フォルダの中身は前筆の通り W31T の ML フォルダと一緒。たぶん、これは最近の機種ならみんな同じなんだと予測。あ、ちなみに W31T の AU\ML フォルダは隠し属性になっていないけど、 W43S の AU\ML フォルダは隠し属性になっているので注意。
ここまで読むと... 単純に SD カード内の ML フォルダを メモリースティック内の ML フォルダに上書きしてやるだけで、 W31T から W43S へのメールデータの移行が完了するかに思える。
# W43S には メモリースティック内のメールデータを閲覧する機能があるし。
ところがこれだけじゃうまくいかない。
[サードステップ]
はてさて、 ML フォルダを上書きしても W43S でメールが閲覧できないのはなんでじゃろ...
実は、 W43S にはメモリースティック内のファイル一覧のインデックスファイルがある。これはメモリースティックを使ったソニーエリクソン製のケータイの独自仕様だと思われる。だって、 ML フォルダの中には au ケータイで標準と思われるインデックスファイルがあるんだもん。ソニーエリクソン製のケータイは面倒なヤツだ。
まあ、いいか。
さて、メモリースティックの中身をもう一度よく見てみる。
MOBILE\SEMC\MAIL\AU
というフォルダがあり、そこに
MAIL.IDX (受信メール用インデックスファイル)
SEND.IDX (送信メール用インデックスファイル)
というファイルがある。どうやらこのファイルをいじってあげないと、 SD カードからメモリースティックにコピーしたメールデータの閲覧ができないようだ。 SEMC ってのは 「ソニーエリクソンメモリーカード」 の略なんだろうか。まあ、いいか。しょうがないのでファイルを解析してみよう。
[フォースステップ]
とりあえず、今回は SEND.IDX ファイル... 送信メール用のインデックスファイルの方を解析する。 MAIL.IDX ファイル... 受信メール用のインデックスファイルも基本的な仕様は同じだと思うが、送信メールはサブフォルダが 1 個だけなのに、受信メールはサブフォルダが 10 個あるので、複数のフォルダにメールデータを保存した場合どうなるのか? 等はまだ調べていない。
さて、 SEND.IDX ファイルをバイナリエディタで開いて解析していこう。 SEND.IDX ファイルには、 28 byte のファイルヘッダ部分と、20 byte のメールファイル数分のアイテム部分がある。
28 byte のファイルヘッダ部分は以下の構成。
16byte
VERSION 2.0_____
58:45:52:53:49:4F:4E:20:32:2E:30:00:00:00:00:00
ファイルバージョン情報だろう
4byte
フォルダ内のファイル数
4byte
今までメモリースティックにコピーした累計ファイル数 + 100,000,000
ここの累計ファイル数は W43S 上でメモリースティック内のファイルを、
すべて削除してもリセットされない。
※なぜ + 100,000,000 するのか?
※なぜメールファイルを削除してもリセットされないのか? は不明
4byte
空 00:00:00:00
そして、メールファイル数分のアイテム部分は以下の構成。
4byte
自身が追加されたときの累計ファイル数 + 100,000,000
最後に追加されたアイテムは、ファイルヘッダ部分の同項目と同じ値になる
2byte
48
30:00
なんの意味があるのか分からないが、常にこの値だった
ASCII コードで 30 は 数字の 0 のことなので、
もしかしたらフォルダのインデックス番号かも?
その場合、なぜわざわざ ASCII コードで保存してるのかが謎
2byte
ファイルインデックス番号
例えば、 E2__0014.VMG というファイルをさす場合は 14 = 0E:00
4byte
メールの日付時刻
どうやら 1999年10月16日 00時00分00秒からの経過秒のようだ
なぜ 1999/10/16 00:00:00 なのかは謎だが、
4byte... 32bit なので、 UNIX タイムスタンプは採用できなかったんだろう
ファイルのソートにここの値を使っているのだと思われる
4byte
空 00:00:00:00
4byte
空 00:00:00:00
とりあえずこんな感じ。このファイルの構造体を Delphi で作ると以下の感じになる。
type
TSEMCItem = record
Total: Longword;
Folder: array[0..1] of Char;
Index: Word;
DateTime: Longword;
Free1: Longword;
Free2: Longword;
end;
TSEMC = record
Version: array[0..15] of Char;
Count: Longword;
Total: Longword;
Free1: Longword;
Items: array of TSEMCItem;
end;
さて、後はこのファイルを生成するソフトを作るだけだ。
[フィフスステップ]
気が向いたら作ります(汗)
※注意
ここに書いてある内容のすべてを検証したワケではないので、間違ってたらごめんなさいとしておきます。ってゆうか情報持ってる人いたら教えてください。
最近のコメント