出 处: 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]
|
|