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


         在公司负责一些文件整理工作,需要经常查看一下公司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提供了计划任务这一功能,在控制面板 -> 性能与维护 -> 任务计划, 它的功能就是安排自动运行的任务。 通过'添加任务计划'的一步步引导,则可建立一个定时执行的任务

  • 相关阅读:
    BZOJ4407
    BZOJ 4804
    BZOJ 2820
    莫比乌斯反演入门
    BZOJ3261
    BZOJ 4327
    BZOJ1212
    AC自动机 板子
    派生类的访问控制-“三看”原则-派生类类成员访问级别设置的原则
    为什么不要重载 && 和 || 操作符!!!
  • 原文地址:https://www.cnblogs.com/bob62/p/2943174.html
Copyright © 2020-2023  润新知