该程序将 $rf_id、$date、$qf_id 和 $failure_msg 实际打印到文件中,问题是在获取第一个值时,它将 $rf_id 的值存储为 0,其余的值根据需要打印。rf_id是 sumhow 在其他行中仅在第一行中设置为 0 就可以了。
#!/usr/bin/perl
use strict;
use warnings;
my $mailqdir = "/mail1.txt";
my $mqueue_directory = "/var/spool/mqueue/";
my $messages_removed = 0;
my $rf_id;
my $date;
my $temp;
my $tmp;
my @write_array;
my $to;
my $from;
my $subject;
my $path_to_sendmail = "/usr/sbin/sendmail -f";
my $mailsubject = "Subject: Deleted Queued Mails from LSMGR sendmail \n\n\n";
$ENV{"PATH"}="/usr/sbin/:/usr/sbin";
my $currentfile = `sendmail -bp`;
my $qf_id = 0;
my $failure_msg;
my $qf_file;
my $df_file;
open (MYFILE, ">/queue.txt");
print MYFILE "$currentfile";
close (MYFILE);
system("/etc/init.d/sendmail stop");
open(MYFILE,$mailqdir);
while (<MYFILE>){
if(/(?<=<)[^>]+(?=>\s*$)/g){
$temp=$_;
$temp =~ s/^\s+|s+$//g;
$rf_id = "$temp";
my $tmp = "$temp";
}
if (/(\w{14})/){
$qf_id=$1;
$qf_file = 'qf' . $1;
$df_file = 'df' . $1;
$date = substr($_,24,17);
next unless /(\w{14})/;
$temp = scalar <MYFILE>;
$temp =~ s/^\s+|s+$//g;
$failure_msg=$temp;
}
push(@write_array,"$qf_file:$failure_msg:$date:$rf_id");
$ENV{"PATH"}="/var/run/:/etc/rc.d/init.d/functions:/var/lock/subsys/:/etc/init.d/sendmail:/etc/init.d:/bin/:/usr/local/bin/:/var/spool/mqueue";
print "Removing $qf_file... \n";
print "Removing $df_file...\n";
system ("rm $mqueue_directory$qf_file");
system ("rm $mqueue_directory$df_file");
$messages_removed++;
}
close (MYFILE);
open (CODE,">/mail.txt");
print CODE "@write_array";
close (CODE);
system("/etc/init.d/sendmail start");
$to='';
$from='';
$ENV{"PATH"}="/usr/sbin/:/usr/sbin";
#system ("$path_to_sendmail $from $to < /mail.txt");
print "\n$messages_removed total \"Deferred Mails\" message(s) removed from ";
print "mail queue.\n";
这是我要解析的一种记录,这是示例之一:
q2VDWKkY010407 2221878 Sat Mar 31 19:37 <Mailer-daemon>
(host map: lookup (my.local.domain): deferred)
<yagyavalkbhatt@yahoo.com>
q2VDWKkY010408 2221878 Sat Mar 31 19:37 <Mailer-daemon>
(host map: lookup (my.local.domain): deferred)
<yagyavalkbhatt@yahoo.com>
q2VDWKkY010409 2221878 Sat Mar 31 19:37 <Mailer-daemon>
(host map: lookup (my.local.domain): deferred)
<yagyavalkbhatt@yahoo.com>
q2VDWKkY010410 2221878 Sat Mar 31 19:37 <Mailer-daemon>
(host map: lookup (my.local.domain): deferred)
<yagyavalkbhatt@yahoo.com>