linux社区爱心援助Linux认证系列教程业界动态站务新闻公司招聘建议留言网址大全LPI专题CISCO专题
设为首页
加入收藏
管理团队
JSP  
JAVA  
PERL  
 您的位置:首页 > 开发语言 > perl >
栏目导栏
  php
  JSP
  ASP
  asp.net
  JAVA
  c/c++/c#
  perl
  JavaScript
  Basic
  Delphi
资料搜索
热门文章
·perl入门学习指南
·perl入门教程:Perl 的变量
·Perl文件及目录操作
·perl入门教程:正则表达式
·perl入门教程:Perl的语法与C语
·perl入门教程:Perl概述
·Perl常用系统函数
·perl中传递和存储文件句柄
·perl 学习笔记
·perl入门教程:Perl 程序的属性
·Perl命令行应用介绍
·Perl连接Oracle数据库的方法
·curl+perl的自动MAIL报警程序
·Perl的基本输入输出
·使用 perldoc 找文档
最新文章
·perl 学习笔记
·Perl 特殊变量
·perl Base64码的获取
·perl 父子进程的数据库连接继承
·工作中的实用 perl 脚本
·perl中传递和存储文件句柄
·curl+perl的自动MAIL报警程序
·Perl类包的动态调用
·使用open创建的管道进行父子进
·perl 执行一个系统命令(svn in
·windows平台下根据可执行文件名
·关联数组(hash)
·Perl语言在风险评估的系统基础
·在Perl/CGI中使用模板
·PERL CGI 常见问题
Google
 
curl+perl的自动MAIL报警程序
[ 作者:IORI  加入时间:2007-11-09 10:39:00  来自:Linux联盟收集整理 ]

最近单位要求写一个关于CURL用法的简单的SHELL.要求可以定制打印需要的输出项目,并且可

以对输出的内容进行自动的MAIL.乍一看,第一个定制打印还是很容易的.无非就是对HEADER里

面的信息进行GREP就OK了.不过,因为需要定制,所以打印时候难免就需要参数的组合打印.这

就需要getopts的结合使用了.赶紧翻翻书,看看用法.基本就搞定了第一个问题.

而自动MAIL的时候就出现了一个没有意想的问题.由于LINUX本机的命令mail程序需要MTA来

支持,所以简单的配置了下SENDMAIL,看看PORT 25也正常.发个信试下,发现机器内部可以发

送,但是无非向对外的MTA发送MAIL(原因为-FQDN不全,而被远端的MTA拒绝.)这下可难办

了.赶紧寻求高人指点,拔山涉水的,最后找到了宇航.给了我一段perl的代码.还真是不

赖.mail发送问题就此搞定,还不需要本地的MTA.真是爽~赶紧把写完的代码进行下总结

以同大家分享.

程序

mail.sh########curl分析脚本(主程序)

mail.pl########perl mail发送脚本 

1 mail.shu7nLinux联盟
#!/bin/bashu7nLinux联盟
#file mail.shu7nLinux联盟
#version v1.1u7nLinux联盟
#by IORIu7nLinux联盟
#last modify 2007-11-5 14:40u7nLinux联盟
#relation program mail.pl

u7nLinux联盟
#cat header|sed 's/ *//g' > header.oku7nLinux联盟
#rm -f header header.ok

##################HELP INFO#########################################u7nLinux联盟
help()u7nLinux联盟
{u7nLinux联盟
 echo "usage $0  -<[D|L|T|M|C|X|A] -E<mail>> <
http://TEST_URL>"u7nLinux联盟
 echo "-E Receive Mail"u7nLinux联盟
 echo "-D print Date"u7nLinux联盟
 echo "-L print Content-Length"u7nLinux联盟
 echo "-T print Content-Type"u7nLinux联盟
 echo "-M print Last-Modified"u7nLinux联盟
 echo "-C print Content-Encoding|vary"u7nLinux联盟
 echo "-X print X-Cache|Powered-by-chinacache"u7nLinux联盟
 echo "-A print ALL"u7nLinux联盟
}u7nLinux联盟
####################################################################

##############TEST PARAMETER######################################u7nLinux联盟
if [ $# == 0 ];thenu7nLinux联盟
   helpu7nLinux联盟
   exit 1u7nLinux联盟
fiu7nLinux联盟
###################################################################

####################################################################u7nLinux联盟
tmp=$@u7nLinux联盟
URL1=`echo  $tmp  | awk '{print $NF}'`

if [ ! `echo $URL1|grep -i -E "^http"` ];thenu7nLinux联盟
     URL=`echo "
http://$URL1"`u7nLinux联盟
 elseu7nLinux联盟
    URL=$URL1u7nLinux联盟
fiu7nLinux联盟
####################################################################

####################MAIN PROGRAM#######################################

echo -n "are you sure compressed?(y/n)"u7nLinux联盟
read OPTu7nLinux联盟
case $OPT inu7nLinux联盟
   Y|y)  /usr/bin/curl -D header -s -m 10 -compressed -o /dev/null $URLu7nLinux联盟
     ;;u7nLinux联盟
    N|n) /usr/bin/curl -D header -s -m 10 -o /dev/null $URLu7nLinux联盟
     ;;u7nLinux联盟
    \?) echo "The option is exist"u7nLinux联盟
        exit 1u7nLinux联盟
     ;;u7nLinux联盟
esac

if [ -f header ];thenu7nLinux联盟
     cp -f header header.oku7nLinux联盟
 elseu7nLinux联盟
    echo "header isn't exist plese you check"u7nLinux联盟
    exit 1u7nLinux联盟
fi

u7nLinux联盟
HTTP=`awk '/HTTP|http/ {print $2}' header.ok`

if [ $HTTP == "200" ]||[ $HTTP == "302" ];u7nLinux联盟
 thenu7nLinux联盟
   rm -f contentu7nLinux联盟
   send=0 u7nLinux联盟
   use=0u7nLinux联盟
   #echo "==============================================================="u7nLinux联盟
   # while getopts :LTMSE: OPTIONu7nLinux联盟
       while getopts LDTMCXAE: OPTIONu7nLinux联盟
       dou7nLinux联盟
        case $OPTION inu7nLinux联盟
         E) MAIL=$OPTARGu7nLinux联盟
            send=1u7nLinux联盟
             ;;u7nLinux联盟
         L) cat header.ok|grep -i 'Content-Length' >> ./contentu7nLinux联盟
            use=1 u7nLinux联盟
            ;;u7nLinux联盟
         T) cat header.ok|grep -i 'Content-Type' >> ./contentu7nLinux联盟
            use=1 u7nLinux联盟
            ;;u7nLinux联盟
         M) cat header.ok|grep -i 'Last-Modified' >> ./contentu7nLinux联盟
            use=1 u7nLinux联盟
            ;;  u7nLinux联盟
         D) cat header.ok|grep -i 'Date' >> ./contentu7nLinux联盟
            use=1 u7nLinux联盟
            ;;u7nLinux联盟
         C) cat header.ok|grep -i -E "^(Vary|Content-Encoding|Accept-Encoding).*" >> ./contentu7nLinux联盟
            use=1 u7nLinux联盟
            ;; u7nLinux联盟
         X) cat header.ok|grep -i -E "^X-Cache|Powered" >> ./content  ###The same as ^(|).* u7nLinux联盟
            use=1 u7nLinux联盟
            ;;u7nLinux联盟
         A) cat header.ok > ./contentu7nLinux联盟
            use=1 u7nLinux联盟
            ;;u7nLinux联盟
        \?) helpu7nLinux联盟
            send=0u7nLinux联盟
            ;;u7nLinux联盟
          esacu7nLinux联盟
       doneu7nLinux联盟
           if [ $send == 1 ]&&[ $use == 1 ] ; thenu7nLinux联盟
             /root/mail.pl "$MAIL" "${URL1}_test" "content"u7nLinux联盟
           fiu7nLinux联盟
elseu7nLinux联盟
   #echo "HTTP-respond code is $HTTP"u7nLinux联盟
   cat header.ok >> ./contentu7nLinux联盟
   /root/mail.pl "iori.yang
@mail.com" "HTTP_CODE_ERR" "content"u7nLinux联盟
   exit 1u7nLinux联盟
fiu7nLinux联盟

2. mail.pl

 u7nLinux联盟
#!/usr/bin/perl u7nLinux联盟
#file main.plu7nLinux联盟
#version v1.0u7nLinux联盟
#by IORIu7nLinux联盟
#last modify 2007-11-2 15:00

use Net::SMTP;

#my $mailhost = "smtp.163.com"; # the smtp hostu7nLinux联盟
my $mailhost = "mail.com"; # the smtp hostu7nLinux联盟
my $mailfrom =
'iori.yang@mail.com'; # your email addressu7nLinux联盟
#my @mailto = (
'fayland@gmail.com', 'not_four@hotmail.com'); # the recipient listu7nLinux联盟
my @mailto = $ARGV[0]; # the recipient listu7nLinux联盟
my $subject = $ARGV[1];u7nLinux联盟
my $text = $ARGV[2];

open(FILE,$text) || die "Can not open list file\n";u7nLinux联盟
undef $/;u7nLinux联盟
$text=<FILE>;

u7nLinux联盟
$smtp = Net::SMTP->new($mailhost, Hello => 'localhost', Timeout => 120, Debug => 1);

# anth login, type your user name and password hereu7nLinux联盟
$smtp->auth('user','pass');

foreach my $mailto (@mailto) {u7nLinux联盟
 # Send the From and Recipient for the mail servers that require itu7nLinux联盟
 $smtp->mail($mailfrom);u7nLinux联盟
 $smtp->to($mailto);

 # Start the mailu7nLinux联盟
 $smtp->data();

 # Send the headeru7nLinux联盟
 $smtp->datasend("To: $mailtou7nLinux联盟
");u7nLinux联盟
 $smtp->datasend("From: $mailfromu7nLinux联盟
");u7nLinux联盟
 $smtp->datasend("Subject: $subjectu7nLinux联盟
");u7nLinux联盟
 $smtp->datasend("u7nLinux联盟
");

 # Send the messageu7nLinux联盟
 $smtp->datasend("$text

");

 # Send the termination stringu7nLinux联盟
 $smtp->dataend();u7nLinux联盟
}u7nLinux联盟
$smtp->quit;

Linux联盟收集整理 ,转贴请标明原始链接,如有任何疑问欢迎来本站Linux论坛讨论
评论】【加入收藏夹】【 】【打印】【关闭
※ 相关链接
无相关信息