みぃちゃんの頭の中はおもちゃ箱

略してみちゃばこ。泣いたり笑ったり

PerlでEメールを解析

2014年11月09日 21時24分40秒 | IT・デジタル
Eメールを自動処理する必要に せまられました。どうやらEメール処理用のライブラリが すでに つくられているようです。さっそくCPANからEmail::MIMEモジュールをダウンロード。愛用のStrawberry Perlにはcpanコマンドも付属しているので、コマンド ラインからコマンド cpan Email:MIME を実行するだけで、ダウンロードからインストールまで全部自動で やってくれます。簡単!

変数 $mail にメール全体が はいっているとして、メールの主要なフィールドと本文を抽出するには、
	use Email::MIME;
	use Encode;
	...
	$parsed = Email::MIME->new( $mail);
	$from	= $parsed->header( 'From'	);
	$to	= $parsed->header( 'To'		);
	$cc	= $parsed->header( 'Cc'		);
	$bcc	= $parsed->header( 'Bcc'	);
	$date	= $parsed->header( 'Date'	);
	$subj	= $parsed->header( 'Subject'	);

	$part0 = $parts[ 0];
	$charset = $part0->{'ct'}->{'attributes'}->{'charset'};
	$body = $part0->body;
	$body = decode( $charset, $body);

これだけ。なんの確認も せずに$parts[ 0] をよみだしていますが、multipartメッセージで ない ばあいは これでOK。multipartメッセージで あっても、最初のパートにメッセージ本文が はいっていれば これでOK (たいていのメーラーでは そうなると おもいます)。ズボラなコードですが、今回の処理では これで十分。厳密に処理するなら、ヘッダContent-TypeやContent-Dispositionを確認すべきです。

※ この記事の本文からは漢字の訓を排除しています。