mailgate.pl.in
上传用户:minyiyu
上传日期:2018-12-24
资源大小:864k
文件大小:3k
源码类别:

Telnet服务器

开发平台:

Unix_Linux

  1. #!@PERL@
  2. sub readmail {
  3. @MAIL = <STDIN>;
  4. &decode_mail;
  5. &parse_header;
  6. }
  7. sub decode_mail
  8. {
  9.     foreach $n (0 .. $#MAIL) {
  10.         $line = $MAIL[ $n ];
  11.         if( substr( $line, 0, 6 ) eq "begin " ) {
  12.             if( $line =~ /^begin d+ w/ ) {
  13.                 &uudecode( $n );
  14.                 return;
  15.             }
  16.         }
  17.     }
  18. }
  19. sub uudecode
  20. {
  21.     local       ($begin) = @_;
  22.     $line = $MAIL[ $begin + 1 ];
  23.     $ch = substr( $line, 0 , 1);
  24.     $len=int((ord($ch) - ord(' ')+2)/3) * 4 ;
  25.     return if ($len != (length($line)-2));
  26.     $tmpfile = "/tmp/mail2newsdecode.$$";
  27.     open( FN, "| /bin/uudecode" );
  28.     print FN "begin 644 $tmpfilen";
  29.     foreach $n ($begin + 1 .. $#MAIL) {
  30.         print FN $MAIL[ $n ];
  31.     }
  32.     close( FN );
  33.     $#MAIL = $begin - 1;
  34.     open( FN, $tmpfile );
  35.     while( <FN> ) {
  36.         $MAIL[ @MAIL ] = $_;
  37.     }
  38.     close( FN );
  39.     unlink( $tmpfile );
  40. }
  41. sub parse_header {
  42.   local($index);
  43.   for ($index=0; $index <= $#MAIL; $index++) {
  44.         $_ = $MAIL[ $index ];
  45. last if ($_ eq "n");
  46. chop;
  47. if (/^(S+): (.*)$/) {
  48. $hhh = $Header{$1};
  49. if ( $1 eq "Received" && $hhh ) {
  50.                   $tmp = "$2";
  51.                   if ( $tmp =~ /localhost/ ) {
  52.      $Header{'Received'} = $hhh;
  53.                   } else {
  54.                      $Header{'Received'} = $tmp;
  55.                   }
  56. } else {
  57.   $Header{$1} = $2;
  58. }
  59. }
  60.   }
  61.   $from = $Header{'from'};
  62.   if ( $from =~ /^(.*) <(S+)>/ ) {
  63. $from = "$2 (${1})";
  64.   } elsif ( $from =~ /^<(S+)>/ ) {
  65. $from = "$1";
  66.   }
  67.   if( index( $from, "@" ) < 0 ) {
  68.     if( $from =~ /^(S*) ((.*))$/ ) {
  69. $from = "$1@@BBSDOMAIN@ ($2)";
  70.     } else {
  71. $from = "${from}@@BBSDOMAIN@";
  72.     }
  73.   }
  74.   $from =~ s/'/"/g;
  75.   $subject = $Header{'subject'};
  76.   $subject = '(none)' unless $subject;
  77.   $lastline = $index + 100; 
  78.   $lastline = ($#MAIL < ${lastline})? $#MAIL : $lastline;
  79.   $subjectfound = 0;
  80.   $fromfound = 0;
  81.   $passwdfound = 0;
  82.   $bbsfound = 0;
  83.   for ($i=$index  ; $i <= $lastline; $i++) {
  84. $_ = $MAIL[ $i ];
  85. chop;
  86. next if ($_ eq "");
  87. if (substr($_,0,9) eq "subject: ") {
  88.     if (! $subjectfound ) {
  89.  $subject = substr($_,9);
  90.  $subjectfound = 1;
  91.     }
  92. } elsif (/^[s]*#(w+)[s:]+(.*)$/) {
  93.     $1 =~ tr/A-Z/a-z/;
  94.     $BBSHeader{$1} = $2;
  95.     $bbsfound = 1;
  96.         } else {
  97.     last;
  98. }
  99.   }
  100.   $name =  $BBSHeader{'name'};
  101.   $title = $BBSHeader{'title'};
  102.   $title = $BBSHeader{'subject'} unless $title;
  103.   $passwd = $BBSHeader{'password'};
  104.   $passwd = $BBSHeader{'passwd'} unless $passwd;
  105.   $subject = $title if ($title);
  106.   if ($name && $passwd) {
  107. die "$nickname $!n";
  108.   }
  109.   $Header{'from'} = $from;
  110.   $Header{'subject'} = $subject;
  111.   $MAILBODY = $i;
  112. }
  113. 1;