W-ZERO3のPDXメールバックアップ
W-ZERO3の本体メモリは容量が少ないので以前から苦労していたのですが、先日とうとうメールが受信できなくなるところまで来てしまいました。これはやばいと思ってメールのバックアップを取ろうと思ったのですが、そこには大きな問題があったのです。Pocket OutlookなんだからPCとの連携も朝飯前だろうと高をくくっていたのですが、なんとPCにバックアップを取る機能がないではありませんか。W-ZERO3自体にはバックアップ機能がついているのですが、これはメールをPC上で読める状態に保存しておきたいという要求を満たすものではないので、使えません。これなら普通の携帯電話のほうがよっぽど楽にバックアップ取れるやんか…と思ったのですが、今さらメールを1つ1つ転送していくわけにもいかないので、なにか方法を考えることにしました。
いろいろなサイトを見ていてわかったことは、
・メール本体は\Windows\Messagingフォルダにある
・受信メールは文字コードがJISでメールヘッダ+本文
・送信メールは文字コードがUTF-16LEで本文のみ
ということです。受信メールの方は比較的簡単に取り込めそうですが、問題は送信メールです。メールヘッダがないので、送信先や送信日時がわからないのです。こういった情報はどうやら\cemail.volファイルに持っているようなのですが、構造がさっぱりわからないのでパス。とりあえず送信先は無理としても、送信日時はファイルの作成日時を使えば復元できるので、わかる範囲のヘッダ情報を補完すれば、なんとかなりそうです。というわけで最初はソフトを探したのですが、そういうソフトが全く見つからないのです。普通こういう時って1つぐらい引っかかってくるもんだけどなぁ…。仕方がないので自分で作ってみるかと思い、せっかくなのでこないだ勉強したperlを使ってみることにしました。
ところどころ苦労はしたものの、やっぱりperlで書くのは楽ですねぇ。同じ内容をCで書けと言われたらどれだけ時間がかかっていたことやら。とりあえずメールが入ったフォルダに放り込んで実行すると、受信メールと送信メールを判別して受信メールはほぼそのまま、送信メールの方は文字コードをUTF-8に変換してヘッダを補完し、それぞれreceiveフォルダとsendフォルダに書き出す機能をつけて一応の完成を見ました。送信メールは最初ShiftJISで書き出していたのですが、どうも一部の文字が文字化けするので、UTF-8にしてあります。perlなので中身の雑さ加減を見られると恥ずかしいのですが、私以外にこれを使う人がいるかもしれないので一応公開しておきます→pdxconv.zip。これを動かすにはActivePerlが必要なので合わせてインストールしてください。まずW-ZERO3の\Windows\MessagingフォルダをPCに丸ごとコピーして、そこにpdxconv.plを放り込んだ後エディタで開いて各自のPDXメールアドレスに変更してから、
>perl pdxconv.pl
で動くはずです。ただしうちの環境でしかテストしてませんので、不具合がないとは言い切れません。その辺は理解した上でお使いください。
pdxconv使わせていただきました。便利なツールをご提供いただきありがとうございます。
一つお願いなのですが、変換後のファイルのタイムスタンプを、元ファイルのタイムスタンプと同じになるようにていただけませんでしょうか?
よろしくお願い申し上げます。
>sasazoさん
なるほど、確かにタイムスタンプは変わらないほうが良いでしょうね。タイムスタンプを変えないバージョンを早速リリースしましたので、どうぞお試しください。
ご返事遅くなりまして申し訳ございません。
早速タイムスタンプが変わらないバージョンをお作りいただき、大変ありがとうございました。
私はperlを使ったことがなく、なんとなくutimeで出来そうだと思いながらうまくいきませんでした。やはり素人の付け焼刃では駄目ですね(^^;
私もutimeで簡単にできると思っていたのですが、意外と難儀しています(汗)。closeしてからじゃないとutimeができないみたいですね。まあcloseして初めてファイルの実体ができるので、考えてみれば当然なんですけども…。
pdxconv.pl使わせてもらいました。
Outlookメールの方を好んで使っている為、バックアップに手こずっていましたが一発で解決しました。今後とも重宝させてもらいます!
WS004sh→WS020sh移行でどうにもテンパりましたが、pdxconv.plで無事解決しました。
ありがとうございました。
なお、当方のデータだと、「Date:」 以外に、「Deliverd-To:」「Received:」ヘッダのケースがあったので、if文に|で条件増やしてみたら全部変換できました。
感謝の言葉と、合わせて報告させて頂きます。
みなさんご感想ありがとうございます。
自分用に作ったつもりだったので、まさかこんなに使われるとは思ってもみませんでした。
受信メールの判別は、Date:だけではうまくいかない場合があるみたいですね。ちょっとやり方を考えてみることにします。
最近うまく receive と send フォルダに分かれてくれません。たぶん絵文字を受信するようになってからなので、ちょっといじってみます。
すいません、私自身が初代W-ZERO3を手放してしまったので、テストのしようがないのですよね…。カスタマイズはご自由にお願いします。
ちょいカスタマイズさせて頂きました。
35行目の「^Date」の記述を「Date」の様にハット記号を取ると、うまく分割されてくれました。
使ってるのは端末はWS007SHです。
2007年の11月頃から、絵文字対応だなんだでメールサーバの仕様が変わったようで、受信メールのヘッダーが追加されたようです。
それなんで、受信メールとして判断する条件を緩くするようカスタマイズした、という感じです。
あ、既出ですね!お恥ずかしい。。
>kiiさん
なるほど、Dateが先頭行にくるとは限らない仕様になっているのですね。35行目を修正したバージョンに差し替えておきます。
どうもご指摘ありがとうございました。
そうですね、Dateが先頭でない場合がありますね。
上記cawsinさんの方が正確な条件なのかもしれませんが、一応私の環境では数千メール試して一つも間違いはなかったようです。
これからも大いに活躍させて頂きます!また、ZERO3仲間にも広めてますが非常に好評ですょ。
まあ完璧ではないかもしれませんが、これでとりあえず問題はなさそうですね。
広めていただいてありがとうございます。perl環境がないと動かないのだけが敷居高いかなと思うのですが、Cで書くと文字コード変換で難儀しそうなのですよねぇ。
こんにちは、pdxconv使わせていただきました。
WS003SHが急に壊れてしまい、どうしようと思ってたところでした。
ありがとうございます!
助かりました。
ありがとうございました。
検索でたどり着いて使わせていただきました。
シャープのお客様相談センターでも、PCにコピーする方法は知りません、と言われたのですが、
このツールのお陰で助かりました。ありがとうございます。
T-01Aを使っています。T-01Aのバックアップに使用しようと思っているのですが
改良で使えるであれば使わせていただければと思っています。