自动检测网络映射文件夹的内容,并邮件通知

     在公司负责一些文件整理工作,需要经常查看一下公司samba服务器libraray文件夹下面inbox中是否有其他同事丢入的文件,然后在分门别类放好。如果每天都查看,就显得很繁琐了,由此我想到了可以写个perl脚本自动检查这个文件夹是否为空,不为空的话,发通知邮件给我。

     首先library文件夹是在samba服务器上的,首先link到本地来:      

:START
net use * /del /y

net use F: \\10.53.13.245\library 756823 /user:libmgr

c:\Perl\bin\perl.exe cfn.pl 
c:\Perl\bin\perl.exe library.pl

   下面利用perl检查文件夹,并通过SMTP发送到自己的工作邮箱    

: #Use perl
eval `exec perl -S $0 "$@"`
  if $running_under_some_shell;
#!perl

use File::Copy;
use Net::SMTP;

my $dirname   = "F:\\inbox";
my $temp_file = "dummy.txt";
my $count = 0;
my $message;
my @dir_files=<$dirname/*>;
if(@dir_files){
  opendir DIR,$dirname or die $!;
  @files = readdir DIR;
  closedir DIR;
  for(@files){
    next if(/^\./);
    next if(/^\.\./);
    #send_mail("smtp.163.com","xxxxx\@163.com","xxxx\@163.com","$_");
    $count = $count +1;
    $message= $message."$_ \n";
    #print("$message $count");
  }
    #print("$message $count");
    if($count == 1){
    $message = "The following 1 file is in $dirname:\n".$message;
    }else{
    $message = "The following $count files is in $dirname:\n".$message;
    }
    send_mail("smtp.163.com","xxxxxx\@163.com","xxxxxx\@scsemicon.com","$message");
}

sub send_mail {
  my($host, $auth, $to, $mail_body) = @_;
  my $smtp = Net::SMTP->new(
    Host    =>  $host,
    Hello   =>  $host,
    Timeout =>  30,
    Debug   =>  1
  );
 
  $smtp->auth('xxxxxx@163.com', 'pass') || die;
  $smtp->mail($auth);
  $smtp->to($to);
  $smtp->bcc($auth);
  $smtp->data();
  #$smtp->datasend("Content-Type:text/plain;charset=GB2312\n");
  #$smtp->datasend("Content-Transfer-Encoding:base64\n");
  $smtp->datasend("From:$auth \n");
  $smtp->datasend("To:$to \n");
  $smtp->datasend("Subject: Library Inbox is NOT empty\n");
  $smtp->datasend("\n");
 
  $smtp->datasend("$mail_body\n");
  $smtp->dataend();
  $smtp->quit;
}

用Net::SMTP发邮件,但是有些网站的认证会出问题,所以要用Net::SMTP_auth来发才好用.

注:后来发现,只要装一下Authen::SASL这个模块,或是装Net::SMTP_auth这个模块以后,还是用Net::SMTP也是可以的.

 

最后windows提供了计划任务这一功能,在控制面板 -> 性能与维护 -> 任务计划, 它的功能就是安排自动运行的任务。 通过'添加任务计划'的一步步引导,则可建立一个定时执行的任务

posted @ 2013-03-04 17:52  啊松  阅读(446)  评论(0编辑  收藏  举报