ここでは、クライアントが使用できるニュースレター システムに取り組んでいます。インターンとしての私の仕事の 1 つは、パズルの小さなピースを手伝うことです。この場合、私がする必要があるのは、メールサーバーのログをスキャンしてバウンスされたメッセージを探し、メールと、メールが「悪いメールデータベース」にバウンスした理由を追加することです。
悪いメール テーブルには、「メール」と「理由」の 2 つの列があります。次のステートメントを使用して、ログから情報を取得し、Perl スクリプトに送信します。
grep " 550 " /var/log/exim/main.log | awk '{print $5 "|" $23 " " $24 " " $25 " " $26 " " $27 " " $28 " " $29 " " $30 " " $31 " " $32 " " $33}' | perl /devl/bademails/getbademails.pl
より効率的な awk スクリプトに関する提案があれば、それも喜んでお知らせしますが、私の主な焦点は Perl スクリプトです。awk は、「foo@bar.com|バウンスの理由」を Perl スクリプトにパイプします。これらの文字列を取り込み、| で分割します。2 つの異なる部分をデータベースのそれぞれの列に入れます。ここに私が持っているものがあります:
#!usr/bin/perl
use strict;
use warnings;
use DBI;
my $dbpath = "dbi:mysql:database=system;host=localhost:3306";
my $dbh = DBI->connect($dbpath, "root", "******")
or die "Can't open database: $DBI::errstr";
while(<STDIN>) {
my $line = $_;
my @list = # ? this is where i am confused
for (my($i) = 0; $i < 1; $i++)
{
if (defined($list[$i]))
{
my @val = split('|', $list[$i]);
print "Email: $val[0]\n";
print "Reason: $val[1]";
my $sth = $dbh->prepare(qq{INSERT INTO bademails VALUES('$val[0]', '$val[1]')});
$sth->execute();
$sth->finish();
}
}
}
exit 0;