« クロスレビューしてみませんか | トップページ | ImからExへ »

一括vMessageファイルを分割

 携帯電話の特定の受信メールを機種変更した端末でも見られるようにしたいということで、バックアップ機能としてある「一括転送」を使う。ファイルとしては vMessage 形式のファイルになるのだが、携帯電話からは直接アクセスできないメモリーカード上のフォルダ(メールフォルダ)に保存されるために、再び端末のメールフォルダに読み込みのために「一括転送」を行う以外には通常方法がない。

 ただ、このままだととにかく受信メールフォルダにあるすべてのメールが対象となるので不要なものまで含まれてしまう。さらに、見られるだけでよければデータフォルダにあってもよいわけで(vMessage ファイルの閲覧は可能なので)、なんとかならないかということで考えてみた。

 PC で vMessage ファイルを閲覧したり、編集などするためのツールも出ているようだが、フリーであったりシェアであったり。が、ファイルそのものを見るとメール本文やサブジェクトが base64 エンコードされている以外は単純にタグ付のテキストにすぎない。さらに、一括でまとめられたのは、本来は個別であるべきファイルを連結しているだけなので、それらを分割して適当な名前をつけ、From 別にフォルダを分けて保存してやればよさそうだ。一括された状態では先頭のファイルだけが閲覧できるが、終了タグがあるのでそこで終わってしまう。

 ということで Ruby で書いてみた。一括ファイルは 08080600.vmg などといったファイル名になっているので、これを取り出してスクリプトと同じディレクトリに置く。Ruby console から ruby vmgsplit.rb 08080600.vmg とすると From ごとにディレクトリを作成して個々に分離した vmg ファイルを保存するので、必要なものだけメモリーカードのデータフォルダの ETC 以下にでもコピーしておけば、携帯電話で閲覧できる。ただし、最近の機種が添付ファイルとして vMessage ファイルに対応はしているものの、閲覧などができるのかどうかは確認していない。

 確認したのはボーダフォン時代の端末なので、他のキャリアとか端末でも閲覧できるかどうかは不明です。

# vmgsplit.rb
require "time"
vmg = ''
@from = ''
@date = ''

ARGV.each do |file|
 File.foreach(file) do |line|
  if line !~ /^END:VMSG/
   vmg << line
   @from = line.slice(/<(.+)>/,1) if /From:/ =~ line
   @date = Time.parse(line.sub(/^Date: /, "").chomp).strftime("%Y%m%d%H%M%S") if /^Date:/ =~ line
  else
   @from = 'unknown' if @from == nil || @from == ''
   Dir.mkdir(@from) unless File.directory?(@from)
   File.open("#{@from}/#{@date}.vmg", "w") { |f|
    f.puts(vmg)
    f.puts("END:VMSG")
    vmg = ''
    @from = ''
    @date = ''
   }
  end
 end
end

#しかしまあ、いずれにしても携帯電話だけでは対処できないというのは、あるのだなあ。

追記:2008/08/14
 修正したのはこっち

|
|

« クロスレビューしてみませんか | トップページ | ImからExへ »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/28835/42081210

この記事へのトラックバック一覧です: 一括vMessageファイルを分割:

« クロスレビューしてみませんか | トップページ | ImからExへ »