CodingFirst

C言語、Perl、JavaScript、最近はPythonも。出来上がったものより、プログラムを書くことが好き。あと、スイーツ。

スポンサーサイト

  • このエントリーをはてなブックマークに追加
  • web拍手 by FC2
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

W-ZERO3メールの添付ファイルを抜き出す

  • このエントリーをはてなブックマークに追加
  • web拍手 by FC2

W-ZERO3メールに届いた写メの画像ファイルを抜き出して保存してみた。

メールは本体の...path一部忘れたが

SeeTooMail/Accounts/電話番号/Storage/DATA

に置いてあり、メールは1メール、1ファイルの形式だった。これらをSDカードにコピーし、パソコンに移動。

メールのファイルをみるとファイルの先頭に 256バイトの管理データがあるようで、その先頭にはSTMAILEMLFMT と書かれていた。

この256バイトはスキップして、残りのメールデータは perlの MIME::Parserで抜き出すことにした。

ちなみに perlでプログラムはほとんど書いた事が無いので要らぬ書き方をしているかも知れないし、そもそもWebで見つけたコードをコピペして作ったので中身はあまり分かっていないかも知れない。

[mail-decode.pl]
use MIME::Parser;

if ( $#ARGV < 0 ) { die "Usage: $0 \n" ; }

my $parse = new MIME::Parser;
$parse->output_to_core(1);

my $infile = $ARGV[0] ;

open IN, "<$infile";
my $check;
read(IN, $check, 256);
die "$infile: file format is not STMAILEMLFMT" if ( $check !~ /STMAILEMLFMT/ ) ;

my $buf = ;
while() { $buf .= $_; }

my $entity = $parse->parse_data($buf);

&body_parse($entity);

sub body_parse {
  my $entity = shift;
  my @parts = $entity->parts;
  if (@parts) {
    foreach (@parts) {
      &body_parse($_);
    }
  }
  else {
    $filename = $entity->head->recommended_filename;
    if ( length($filename) > 0 ) {
        open OUT, ">$filename";
        my $bodyhandle = $entity->bodyhandle;
        print OUT $bodyhandle->as_string;
        print "$infile: output -  $filename\n";
        close OUT;
    }
  }
}

あとは、

find SeeTooMail -name "*.eml" -exec mail-decode.pl {} \;

とかすると抜き出せた。

Base64デコードとかしなくても大丈夫みたい。たぶん MIME::Parserが面倒をみてくれているのだろう。

あと、添付ファイルは、添付の画像がビュワーで表示できるのは確認したが、正しく変換できているかは未調査。

もしかすると、添付ファイルの書式によってはうまく行かないケースもあったりするかも知れないが(MIME::Parserのperldocに書いてあったような気がする)

...気にしない(笑)

スポンサーサイト

 | HOME |  »

Search

Recent Entries

Foot Print



Categories

Monthly

Recent Comments

Recent Trackbacks

Profile

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。