- blogs:
- cles::blog
2009/09/24

Thunderbirdのアドレスブックからメールアドレスを取り出す


最近spamがまた酷くなってきたので、フィルタリングのルールを強くしたら、仕事関係のメールがspamに振り分けられるという問題が発生してきたので、メーラーのアドレス帳からメールアドレスを拾ってホワイトリストを作ろうと思って、Thunderbirdのアドレス帳からメールアドレスを抽出するスクリプトを書いてみました。
Thunderbirdのアドレスブックは.mabというちょっと変な形式になっています。どうやら歴史的な経緯でこの形式が使われているようなのですが、なかなか厄介な形式のようです。
Mork の謎 Firefox Hacks 翻訳日記/ウェブリブログ
Mork の何が悪いのか?
1. Mozilla 以外には使われていない、独自仕様のデータフォーマット。
2. 仕様書がない (に等しい) ので解析が困難。
3. 開発者がすでに退社しており、継続的な開発・修正が困難。
4. ファイルの一部が破損したときに手作業での修復が困難。
5. 開発者の言によれば、「テキストファイル形式を使うのは馬鹿げている、と思ったがそうしろと命令されたから作った」(前出 WebArchive のページ)
これを扱うためのライブラリとしてCPANにFile::Morkというモジュールがあり、すでにこれを使ってスクリプトを書いた人もいるようなので*1、そのプログラムを参考(というか、ほとんどそのまま)にスクリプトを作ってみました。
use strict;
use warnings;
use Getopt::Long;
use File::Mork;
my $file;
GetOptions("file=s" => \$file);
unless ($file) {
printf("\nUsage: perl $0 --file <file> \n");
exit;
}
my $mork = File::Mork->new($file, verbose => 1, byte_order => 'BE' ) || die $File::Mork::ERROR."\n";
foreach my $entry ($mork->entries) {
print $$entry{'LowercasePrimaryEmail'} . "\n" if $$entry{'LowercasePrimaryEmail'};
# for debug
# while (my($hkey, $hval) = each %$entry) {
# printf("%s=%s\n", $hkey, $hval);
# }
}
デフォルトのままではうまくエンディアンが認識できずに、エラーが出てしまうので、エンディアンをbyte_order => 'BE'と言う風に直接指定しています。場合によってはこの部分をLEに書き換える必要があるかもしれません。このあたりも次のバージョンくらいからSqliteになっていったりするんでしょうかね。
トラックバックについて
Trackback URL:
お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/3217
Trackbacks
このエントリにトラックバックはありません
Comments
愛のあるツッコミをお気軽にどうぞ。[policy]
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
コメントはありません
Comments Form
コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。
OpenID を使ってログインすることができます。
サイト内検索
検索ワードランキング
へぇが多いエントリ
閲覧数が多いエントリ
1 . アーロンチェアのポスチャーフィットを修理(112109)
2 . 福岡銀がデマの投稿者への刑事告訴を検討中(110746)
3 . 年次の人間ドックへ(110350)
4 . 2023 年分の確定申告完了!(1つめ)(109904)
5 . 三菱鉛筆がラミーを買収(109802)
2 . 福岡銀がデマの投稿者への刑事告訴を検討中(110746)
3 . 年次の人間ドックへ(110350)
4 . 2023 年分の確定申告完了!(1つめ)(109904)
5 . 三菱鉛筆がラミーを買収(109802)
cles::blogについて
Referrers