home *** CD-ROM | disk | FTP | other *** search
/ ftp.madoka.org / 2014.12.ftp.madoka.org.tar / ftp.madoka.org / pub / plum / plum2_33_1.lzh / module / log / mail.plm < prev    next >
Text File  |  1999-03-24  |  6KB  |  200 lines

  1. <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"><!-- $_ if 0; # -*- perl -*-
  2. # $Id: mail.plm,v 2.11 1999/02/04 13:52:34 hasegawa Exp $
  3. # copyright (c)1998-1999 Yoshinori Hasegawa <hasegawa@madoka.org>
  4.  
  5. package log_mail;
  6.  
  7. $DIRECTORY = '.';
  8. $HOST = 'localhost';
  9. $PROTO = getprotobyname('tcp');
  10. $PORT = getservbyname('smtp', $PROTO) || 25;
  11.  
  12. $_ = 'log_mail';
  13.  
  14. sub main_loop {
  15.   local($userno) = @_;
  16.   local($file, $idx, $name, $code, $new, $adrs, $sno, $dir);
  17.   $sno = 0;
  18.   foreach $mail (&'property($userno, 'file')) {
  19.     ($file, $adrs) = split(/\s+/, $mail);
  20.     next unless $adrs;
  21.     if (($idx = rindex($file, ';')) != -1) {
  22.       $name = substr($file, 0, $idx);
  23.       $code = substr($file, $idx + 1);
  24.     } else {
  25.       $name = $file;
  26.       $code = '';
  27.     }
  28.     $name = &'expand($name);
  29.     if ($name !~ /^[\\\/]/) {
  30.       $dir = &'expand(&'property($userno, 'directory') || $DIRECTORY);
  31.       $name = "$dir/$name";
  32.     }
  33.     $new = &'date($name);
  34.     if ($filename{$name} && $new ne $filename{$name}) {
  35.       if ($filename{$name} && -r $filename{$name}) {
  36.         $sno = &open($userno) unless $sno;
  37.         &send($userno, $sno, $filename{$name}, $code, $adrs) if $sno;
  38.       }
  39.     }
  40.     $filename{$name} = $new;
  41.   }
  42.   &close($sno);
  43. }
  44.  
  45. sub open {
  46.   local($userno) = @_;
  47.   local($host, $port, $sno, $socket);
  48.   ($host, $port) = split(/\:/, &'property($userno, 'smtpserver') || '');
  49.   $host = $HOST unless $host;
  50.   $port = $PORT unless $port;
  51.   if ($sno = &'connect($host, $port)) {
  52.     $socket = $'socket[$sno];
  53.     print $socket "NOOP\r\n";
  54.     while (defined($reply = <$socket>)) {
  55.         next if substr($reply, 0, 3) eq '220';
  56.         return $sno if substr($reply, 0, 3) eq '250';
  57.         last;
  58.     }
  59.     &'close($sno);
  60.   }
  61.   return 0;
  62. }
  63.  
  64. sub close {
  65.   local($sno) = @_;
  66.   if ($sno) {
  67.     $socket = $'socket[$sno];
  68.     print $socket "QUIT\r\n";
  69.     &'close($sno);
  70.   }
  71. }
  72.  
  73. sub send {
  74.   local($userno, $sno, $name, $code, $adrs) = @_;
  75.   local($from, $socket, $line, $reply, $date);
  76.   $socket = $'socket[$sno];
  77.   $from = &'property($userno, 'from') || '';
  78.   print $socket "RSET\r\n";
  79.   $reply = <$socket> || '';
  80.   return unless substr($reply, 0, 3) eq '250';
  81.   print $socket "MAIL FROM:<$from>\r\n";
  82.   $reply = <$socket> || '';
  83.   return unless substr($reply, 0, 3) eq '250';
  84.   foreach $item (split(/\,/, $adrs)) {
  85.     print $socket "RCPT TO:<$item>\r\n";
  86.     $reply = <$socket> || '';
  87.     if (substr($reply, 0, 3) eq '551') {
  88.       $reply =~ /\<([^\<\>]*)\>/;
  89.       $item = $1;
  90.       redo;
  91.     } elsif (substr($reply, 0, 3) ne '250' && substr($reply, 0, 3) ne '251') {
  92.       return;
  93.     }
  94.   }
  95.   print $socket "DATA\r\n";
  96.   $reply = <$socket> || '';
  97.   return unless substr($reply, 0, 3) eq '354';
  98.   print $socket "To: $adrs\r\n";
  99.   print $socket "Subject: $name\r\n";
  100.   print $socket "MIME-Version: 1.0\r\n";
  101.   print $socket "Content-Type: text/plain; charset=iso-2022-jp\r\n";
  102.   print $socket "Content-Transfer-Encoding: 7bit\r\n";
  103.   $date = &'date('%a, %d %b %Y %H:%M:%S JST');
  104.   print $socket "Date: $date\r\n";
  105.   print $socket "From: $from\r\n";
  106.   print $socket "\r\n";
  107.   if (open(FILE, $name)) {
  108.     while (defined($line = <FILE>)) {
  109.       $line =~ s/[\r\n]+//;
  110.       $line = '..=' if $line eq '.';
  111.       $line = &code_jis($line, $code);
  112.       print $socket $line, "\r\n";
  113.     }
  114.     close(FILE);
  115.   }
  116.   print $socket ".\r\n";
  117.   $reply = <$socket> || '';
  118. }
  119.  
  120. sub code_jis {
  121.   local($line, $list) = @_;
  122.   foreach $code (split(/\,/, "\L$list\E")) {
  123.     if ($code eq 'euc') {
  124.       $line = &'euc_jis($line);
  125.     } elsif ($code eq 'jis') {
  126.       $line = &'jis_jis($line);
  127.     } elsif ($code eq 'sjis') {
  128.       $line = &'sjis_jis($line);
  129.     }
  130.   }
  131.   return $line;
  132. }
  133.  
  134. __END__
  135. --><HTML><HEAD>
  136. <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-2022-JP">
  137. <LINK REV="made" HREF="mailto:hasegawa@madoka.org">
  138. <TITLE>log/mail.plm</TITLE></HEAD><BODY>
  139.  
  140. $B%*%s%i%$%s%I%-%e%a%s%H(B
  141.  
  142.  
  143. <HR><H3>$BL>A0(B</H3>
  144.  
  145. log/mail.plm - $B%m%0%U%!%$%k$r;XDj$7$?%"%I%l%9$X%a!<%k$GAw?.$9$k(B
  146.  
  147.  
  148. <HR><H3>$B@bL@(B</H3>
  149.  
  150. $B%m%0%U%!%$%k$r;XDj$7$?%"%I%l%9$X%a!<%k$GAw?.$7$^$9!#(B
  151.  
  152.  
  153. <HR><H3>$B%W%m%Q%F%#(B</H3>
  154.  
  155. <DL>
  156. <DT>  log.mail.from $B%"%I%l%9(B
  157. </DT>
  158. <DD>    $BAw?.85$H$7$F;HMQ$9$k%"%I%l%9$r;XDj$7$^$9!#(B
  159.         $B%a!<%k$NAw?.$,%(%i!<$K$J$C$?$H$-$O!"$3$3$G;XDj$7$?%"%I%l%9$X(B
  160.         $B%(%i!<$N%a!<%k$,Aw$i$l$^$9!#(B
  161. </DD>
  162. <DT>  log.mail.smtpserver $B%[%9%HL>(B[:$B%]!<%HHV9f(B]
  163. </DT>
  164. <DD>    $B;HMQ$9$k(BSMTP$B%5!<%P$r;XDj$7$^$9!#(B
  165.         $B%5!<%P$K@\B3$G$-$J$$$H$-$dAw?.$K<:GT$7$?$H$-$O2?$b$7$^$;$s!#(B
  166. </DD>
  167. <DT>  log.mail.directory $B%G%#%l%/%H%jL>(B
  168. </DT>
  169. <DD>    $B%m%0%U%!%$%k$NB8:_$9$k%G%#%l%/%H%j$r;XDj$7$^$9!#(B
  170.         $B%G%#%l%/%H%j$O(Bplum$B$r<B9T$7$?%G%#%l%/%H%j$+$i$NAjBP%Q%9$K$J$j$^$9!#(B
  171.         UNIX$B$J$i!V(B~/$B!W$d!V(B~user$B!W$H$$$&;XDj$b$G$-$^$9!#(B
  172. </DD>
  173. <DT>  log.mail.file* $B%U%!%$%kL>(B[;({jis|euc|sjis})] ($B%"%I%l%9(B)
  174. </DT>
  175. <DD>    $BAw?.$9$k%U%!%$%k$H$=$l$rAw$k%"%I%l%9$r;XDj$7$^$9!#(B
  176.         $B%U%!%$%kL>$K(B%$B$G;O$^$kJ8;z$,$"$k$H!"BP1~$9$kF|IU$KJQ49$5$l!"(B
  177.         $B$=$NL>A0$,JQ$o$k$?$S$K%a!<%k$G%U%!%$%k$rAw?.$7$^$9!#(B
  178. </DD>
  179. </DL>
  180.  
  181.  
  182. <HR><H3>$B@_DjNc(B</H3>
  183.  
  184. <PRE>
  185. + log/mail.plm
  186. log.mail.from: plum@plum.or.jp
  187. log.mail.smtpserver: mail.plum.or.jp:25
  188. log.mail.file: log%m%d hogehoge@plum.gr.jp
  189. log.mail.file: plum%m;euc hoehoe@plum.gr.jp,hogehoge@plum.or.jp
  190. </PRE>
  191.  
  192. $B!V(Bplum@plum.or.jp$B!W$rAw?.85$H$7$F!"%m%0$r%a!<%k$GAw?.$7$^$9!#(B
  193. $B$3$N$H$-!"(BSMTP$B%5!<%P$H$7$F!V(Bmail.plum.or.jp$B!W$N%]!<%H!V(B25$B!W$r;HMQ$7$^$9!#(B
  194. $BAw?.$9$k%U%!%$%k$O(B2$B$D$G!"!V(Bhogehoge@plum.gr.jp$B!W08$K!V(Blog%m%d$B!W$r(B
  195. $B!V(Bhoehoe@plum.gr.jp$B!W$H!V(Bhogehoge@plum.or.jp$B!W08$K!V(Bplum%m$B!W$rAw?.$7$^$9!#(B
  196. log%m%d$B$H(Bplum%m$B$O$=$l$>$lF|IU$,E83+$5$l!"%U%!%$%k$NF|IU$,JQ$o$C$?$H$-$K(B
  197. $B%a!<%k$GAw?.$7$^$9!#$=$N$?$a!"(Blog%m%d$B$O(B1$BF|(B1$B2s!"(Bplum%m$B$O(B1$B7n$K(B1$B2sAw?.$5$l$^$9!#(B
  198.  
  199. </BODY></HTML>
  200.