Email::MIME モジュール

先のエントリに書いた通り bogofilter を使う前処理のために Email::MIME を使いましたが、このモジュールのインストールについて説明しておきます。perlcygwin の 5.8.7 を使用しているのですが、Email::MIME モジュールを動かすために以下のモジュールを追加インストールしました。

MIME-Types-1.17
MIME-Base64-3.07
・Email-MIME-ContentType-1.01
・Email-MIME-Encodings-1.3
・Email-Simple-1.980
・Email-MIME-1.851

依存関係があるのでこの順でインストールします。それぞれ CPAN から探して取得し、ソースを展開後 "perl Makefile.PL; make; make install" を実行します。

それとインストールが終わってこのモジュールを使ったプログラムを実行する時の話なのですが、次のような Content-Type フィールドを含むメールの処理中に "Illegal Content-Type parameter at /usr/lib/perl5/site_perl/5.8/Email/MIME.pm line 13" というエラーメッセージが出ます。

Content-Type: text/plain;
Content-Transfer-Encoding: base64

どうやら "text/plain" の後に ";" が入っているのがまずいようです。";" がないメールや ";" の後に属性の指定があるメールについてはエラーメッセージが出ません。ただ、エラーメッセージが表示されてもきちんとデコード処理等は行われているので気にしないことにしました。

そうそう、細かい話ですがドキュメントに、

my Email::MIME @parts = $parsed->parts;

とあるのは、

my @parts = $parsed->parts;

としなければ動きませんでした。