chiark / gitweb /
Sends rejection copies to record etc.
[modbot-mtm.git] / xlog / bin / record
index 27ca36bc414b25ebc6329a7eba0d71c812fb0608..a62819575b6584d67c92da38f713c89236243aae 100755 (executable)
@@ -11,6 +11,8 @@ $dir =~ s,/[^/]+$,,;
 $dir =~ s,/bin$,/log,;
 $dir .= "/$ARGV[1]";
 
+my $message;
+
 sub parse__headerline () {
     $f{Subject}= $' if m/^Subject:\s*/i; #';
     $f{MessageID}= $' if m/^Message\-ID:\s*/i; #';
@@ -71,12 +73,29 @@ sub parse_webstump2stump () {
 }
 
 sub parse_mailout () {
+    my $keepheader= 1;
     while (<STDIN>) {
+       $keepheader= 1 unless m/^[ \t]/;
+       $keepheader= 0
+           if m/^(?: received )/ix;
+       $keepheader= 'mangle'
+           if m/^(?: to
+                  | from
+                  | return-path
+                  | reply-to
+                  | errors-to
+                  )/ix;
+       if ($keepheader) {
+           my $line= $_;
+           $line =~ s/\@.{0,2}/ at ../g if $keepheader eq 'mangle';
+           $message .= $line;
+       }
        chomp;
        $f{Event}= "notify $'" if m/^X-Webstump-Event:\s*/i; #';
        last if m/^$/;
     }
     while (<STDIN>) {
+       $message .= $_;
        chomp;
        next unless s/^\> //;
        last if m/^$/;
@@ -86,11 +105,18 @@ sub parse_mailout () {
 
 $f{Event}= '?';
 &{"parse_$ARGV[0]"};
-while (<STDIN>) { }
+while (<STDIN>) { $message .= $_; }
 STDIN->error and die $!;
 
 $f{Now}= time;
 
+if ($f{Event} =~ m/^notify reject /) {
+    #$ref= $f{MessageID}
+    open I, ">$dir/nr-$f{MessageNum}.txt" or die $!;
+    print I $message or die $!;
+    close I or die $!;
+}
+
 open L, ">>$dir/event.log" or die $!;
 
 my @s= map {