荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: fuse.bbs@210.32.151.66 (保险丝), 信区: InstallBBS
标  题: [转载] Mailing List -> bbs
发信站: 笑书亭? (Wed Jul  8 05:34:42 1998)
转信站: ShenZhen-University!clinux.ml.org!news.zj!E1
出  处: 210.32.151.169

【 以下文字转载自 UNIX_PALACE 讨论区 】
【 原文由 fuse 所发表 】


很土的办法,但是还挺好用,试运行3天了:-)

这是把mailing list转到bbs上的看板上的方法。
在bbs上看文章可以a, ?, /查找文章,可以用m, g标识
可以收录精华区,比在mail信箱里看舒服多了,最重要
的,可以一个人定阅,供众多人阅读:-)

1. 开个uid=bbs(9999)的帐号,如bsdqna
2. 在freebsd的home下面放一.forward文件,
   内书: "| /home/bsdqna/mailpost /home/bbs"
3. bbs上开一版,比如:FreeBSD_Question版
4. 在/home/bsdqna/目录下放一叫mailpost文件
   内容附后,chmod +x mailpost
5. cp ~/bbsadm/innbbsd/innd ~/bbsadm/innbbsd/maillist
   cd ~/bbsadm/innbbsd/maillist/; vi bbspost.c
  找以下片断,在post_article()里
    gets( userid );
    gets( subject );
    gets( realfrom ); --->加进这一行

    if( usermail ) {
    //    check_userec( &record, userid ); -->comment掉这行
    }
   再make bbspost
  将生成的bbspost放到/home/bbs/innd下面

6. 然后以bsdqna@your.host.name发信给Majordomo@FreeBSD.ORG
   subscribe freebsd_questions
  再以bsdqna回信auth一下,你的小站就会源源不断有信进来乐:
>  35  ◆ FreeBSD_Bugs       [系统] ○ FreeBSD_Bugs                诚徵板主中
   70  ◆ FreeBSD_Hacker     [系统] ○ FreeBSD_Hacker              诚徵板主中
  371  ◆ FreeBSD_Question   [系统] ○ FreeBSD_Question            诚徵板主中


 mailpost附后, 压根不懂perl的我是拿bbs自带的程序改的,一定
 有更好的办法,还请各位大侠出手改进。

#!/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;
    $name = $from unless $name;
    $name = $realfrom unless $name;
    $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 mail $bbshome/boards/FreeBSD_Question > $tmpfile" );
        print FN "$name\n";
        print FN "$title\n";
        print FN "$realfrom\n";
        print FN "$from\n";
        print FN "邮件作者: $from\n";
        print FN "邮件来源: $realfrom\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]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店