#!/usr/bin/perl my $MAIL_FROM = "kuri\@usupi.org"; my $FORWARD_FROM = "kakuu-no-address\@ezweb.ne.jp"; my $FORWARD_TO = "usu\@usupi.org"; my $SENDMAIL_CMD = "/usr/sbin/sendmail -oi $FORWARD_TO"; my $FORWARD_MAX_LINES = 10; sub send_mail { my ($cmd, $message) = @_; if(open(MAIL, "|$cmd")) { print MAIL $message; close MAIL; } else { print STDERR "cannot open \"$SENDMAIL\".\n"; } 1; } ### main my $forward = 0; my $message = ""; my $line = 0; my ($from_parsing, $from_header) = (0, ""); my ($to_parsing, $to_header) = (0, ""); my ($cc_parsing, $cc_header) = (0, ""); # parse header while (<>) { chop; last if /^\s*$/; if($from_parsing) { if(/^\s+(\S.*)$/) { $from_header .= " $1"; next; } else { $message .= "Reply-To: $from_header\n"; $forward = 1 if $from_header =~ /$FORWARD_FROM/; $from_parsing = 0; } } elsif($to_parsing) { if(/^\s+(\S.*)$/) { $to_header .= " $1"; } else { $to_header .= "\n"; $to_parsing = 0; } } elsif($cc_parsing) { if(/^\s+(\S.*)$/) { $cc_header .= " $1"; } else { $cc_header .= "\n"; $cc_parsing = 0; } } $forward = 1 if /^Subject:\s*KEITAI/; if(/^From:\s+(\S.*)$/) { $from_header = $1; $from_parsing = 1; $_ = "From: $MAIL_FROM"; } elsif(/^To:/) { $to_header .= $_; $to_parsing = 1; } elsif(/^Cc:/) { $cc_header .= $_; $cc_parsing = 1; } $message .= "$_\n"; } $message .= sprintf("\n%s%sFrom: %s\n\n", $to_header, $cc_header, $from_header); # get content while (<>) { $message .= $_; $line++; } exit 0 unless $forward && $line <= $FORWARD_MAX_LINES; &send_mail($SENDMAIL_CMD, $message); 0;