◆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] 日本語」の時に正常に日本語部分がデコード出来ない現象を確認。コメントアウトしたほうがいいかも。原因は時間があるときに調べます。