出  处: 210.32.151.169
  【 以下文字转载自 sysop 讨论区 】 【 原文由 SYSOP 所发表 】
  主要修改在parse_header和mail_article 修改mail_article中的path更改post的版。 ----------------------------------------------
  #!/usr/bin/perl # # mailpost
  ($bbshome) = @ARGV; if( ! $bbshome )  {     print "Usage: mailpost bbs_home < article_from_user_mail\n";     exit( 0 ); }
  $tmpfile     = "/tmp/mailpost.$$"; $logfile     = "$bbshome/bbslog"; # $mailbox     = "$bbshome/mailbox"; $inndhome    = "$bbshome/innd"; $poster      = "$inndhome/bbspost"; $parsedate   = "$inndhome/parsedate"; $denyfile    = "$inndhome/email.deny"; $INC[ @INC ] = "$inndhome";
  &mail_article();
  sub logit {     if( $logfile ) {         open( FN, ">> $logfile" );         print FN @_;         close( FN );     } else {         print @_;     } }
  sub log_tmpfile {     open( FN, $tmpfile );     $result = <FN>;     close( FN );     unlink( $tmpfile );     &logit( $result ); }
  sub junk_mail {     local       ($msg) = @_;
      &logit( "unknown mail $msg\n" );     if( ! $name ) {         $name = "Mail-Daemon";     }     if( ! $subject ) {         $subject = "<Unknown>: $msg";     }     open( FN, "| $poster post $bbshome/boards/junk > $tmpfile" );     print FN "$name\n";     print FN "$subject\n";     print FN @MAIL;     close( FN );     &log_tmpfile();     exit( 0 ); } sub uudecode {     local       ($begin) = @_;
      $line = $MAIL[ $begin + 1 ];     if( substr( $line, 0, 1 ) ne "M" ) {         return;     }     $tmpfile = "/tmp/decode.$$";     open( FN, "| /bin/uudecode" );     print FN "begin 644 $tmpfile\n";     foreach $n ($begin + 1 .. $#MAIL) {         print FN $MAIL[ $n ];     }     close( FN );     $#MAIL = $begin - 1;     open( FN, $tmpfile );     while( <FN> ) {         $MAIL[ @MAIL ] = $_;     }     close( FN );     unlink( $tmpfile ); }
  sub decode_mail {     foreach $n (0 .. $#MAIL) {         $line = $MAIL[ $n ];         if( substr( $line, 0, 6 ) eq "begin " ) {             if( $line =~ /^begin \d+ \w/ ) {                 &uudecode( $n );                 return;             }         }     } }
  sub parse_header {     $header = 1;     $line = 0;     while( !( $subject ) ) {         if( $line > $#MAIL ) {             &junk_mail( "from $realfrom" );         }         $_ = $MAIL[ $line++ ];         chop;         if( $_ eq "" ) {             $header = "";         }         if( $header ) {             if( index( $_, "From: " ) == 0 ) {                 $from = substr( $_, 6, 99 );                 ($name) = split( "\@", $from );             } elsif( index( $_, "Subject: " ) == 0 ) {                 $subject = substr( $_, 9, 99 );             }         }
          }     }     $name = $from;     $line = 0; #    if( $header ) {         while( $line <= $#MAIL && $MAIL[ $line ] ne "\n" ) {             $line++;         }         $MAILBODY = $line #    } }
  sub mail_article {     chdir( $bbshome );     @MAIL = <STDIN>;     if( $mailbox ) {         open( FN, ">> $mailbox" );         print FN @MAIL;         close( FN );     }     if( $MAIL[ 0 ] =~ /^From (\S+) / ) {         $realfrom = $1;     } else {         &junk_mail( "format (without From)" );     }     if( -f $denyfile ) {         open( FN, $denyfile );         while( <FN> ) {             ($deny) = split( /\s+/, $_ );             if( $realfrom eq $deny ) {                 &junk_mail( "Denyaddr $realfrom" );             }         }         close( FN );     }     &decode_mail();     &parse_header();     $boardpath = "$bbshome/boards/test";     if( ! -d $boardpath ) {         &junk_mail( "board `$board' from $realfrom." );     } else { #        $title =~ s/^[/^[/g;
      $title = $subject; #        open( FN, "| $poster post $boardpath > $tmpfile" );     open( FN, "| $poster mail $bbshome/boards/FreeBSD_Question > $tmpfile" );         print FN "$realfrom\n";         print FN "$title\n"; for ($n= $MAILBODY; $n <= $#MAIL; $n++) {         print FN $MAIL[$n]; }
          close( FN );         &log_tmpfile();     } }
 
  -- ※ 来源:.笑书亭 bbs.zju.ml.org.[FROM: 210.32.151.168] -- ※ 转载:.笑书亭 bbs.zju.ml.org.[FROM: 210.32.151.168]
  | 
 
 
 |