[メモ]perlでメールのFrom: Subject: ヘッダ検出/記録

[メモ]perlでメールのFrom: Subject: ヘッダ検出/記録 はてなブックマーク - [メモ]perlでメールのFrom: Subject: ヘッダ検出/記録


◆perlでヘッダを抽出してファイルに保存

ちょっとやりたい事があるので、今日もわずかながら、調べた結果をメモ。
今回は、完全に自分の備忘録。

やりたいこと:届いたメールから From: Subject: を抽出して、ファイルに記録する。

◆準備

アカウント「testmail@pocketstudio.jp」を作成。このアカウントにメールを送ると、「parseMail.pl」が実行され、「mail.dat」にメールのヘッダ情報が記録されるようにする。

$ cd ~
$ vi .forward

中身はイカのように記述。

| /home/testmail/parseMail.pl

※ .forward のパーミッションに注意! umask によっては group が writable になっていて処理されないことアリ。/var/log/maillog に「sendmail[xxx]: xxxx forward /home/testmail/.forward: Group writable file」が出たら(ノ∀`)アチャー chmod 644 ~/.forward で対処。

次にスクリプト本体の設置。

$ touch parseMail.pl
$ chmod 700 parseMail.pl
$ vi parseMail.pl

中身は次のようにする。

#!/usr/bin/perl

use strict;
use Encode qw(decode);
use utf8;

our $From;
our $Subject;

foreach my $mail (<STDIN>) {
	chomp $mail;
	$From = $3 if ($mail =~ /^(From:)(\s)(.*)$/);
	$Subject = $3 if ($mail =~ /^(Subject:)(\s)(.*)$/);
	last if !$mail;
}
$Subject = decode ('MIME-header', $Subject);
$From = decode ('MIME-header', $From);

open(DAT,">>/home/testmail/mail.dat");
print DAT "From\t$From\n";
print DAT "Subj\t$Subject\n";
close(DAT);

あとは、メールを当該アカウントに送信すると、mail.dat が作成されている。

From	Masahito Zembutsu <xxxx@example.jp>
Subj	テストメールです!

以上。

# 2011/04/01 01:05 追記:”use strict;” があると、$Subject が「 [XXX nn] 日本語」の時に正常に日本語部分がデコード出来ない現象を確認。コメントアウトしたほうがいいかも。原因は時間があるときに調べます。