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