微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Perl: 获取新包、发邮件、调用其他程序

按小刁的意思,首先把昨天的检测脚本改成带有复位功能的,然后把报警提示邮件方式发送到指定的邮箱。

---------------------------------------------------------------------------------------------------------------------------------------

http://lvdbing.blog.163.com/blog/static/55801529200832111630600/ (这里也说明了如何用perl来发送邮件,清参照网页)

 

使用Net::SMTP_auth邮件,首先要先安装Net::SMTP_auth模块。

1. Windows Operating System:如果是在windows操作系统使用的ActivePerl的话,则进入ActivePerl的安装目录的可执行程序目录,也就是bin目录。(例如:C:/Perl/bin)执行命令ppm-shell ,(PPM:Perl Package Manager

Perl包管理器),然后执行命令:

C:/Perl/bin>ppm-shell
ppm 4.01
copyright (C) 2007 ActiveState Software Inc.  All rights reserved.
ppm>
install Net::SMTP_auth

2. Linux Operating System如果是在linux操作系统使用Perl的话,则使用命令cpan后面跟要安装的模块就可以了。(如果是第一次使用cpan的话,会要求先配置cpan的一些信息,一直按认的设置就可以了)。

 [[email protected] ~]# cpan Net::SMTP_auth


PS: 网页里面提到的的确可以发送邮件,但是发送中文时会出现乱码;所以又到网上找到了解决方案,以下这个是可行的解决方案。

我们经常发送中文的电子邮件,而电子邮件的编码写web不大一样。我们一般用base64的编码来处理邮件头中非ascii字符。而现在UTF-8是web上最通用的编码。
  
  

代码
     
     
$smtp -> datasend( " Content-Type:text/plain;charset=UTF-8/n " ); # 这里设置邮件内容的编码
$smtp -> datasend( " Subject:=?UTF-8?B? " . encode_base64( $title , '' ) . " ?=/n/n " ); # encode_base64是MIME::Base64模块中的函数,$title为UTF-8编码过的
$smtp -> datasend( $mail_body . " /n " ); # $mail_body为UTF-8编码过的

 

其中=?UTF-8?B?为前缀,?=为后缀,B表示Base64编码。在邮件头的标题中,必须先用utf-8编码,然后再用base64编码,而邮件体就可以直接采用UTF-8的编码。
这样发出的邮件,就不会出现中文乱码的问题。

http://www.belltoy.net/chinese-in-email.html

 

---------------------------------------------------------------------------------------------------------------------------------------

 

Perl调用其他程序方法

1. system(”command”); 

使用该命令将开启一个子进程执行引号中的命令,父进程将等待子进程结束并继续执行下面的代码

2. exec(”command”); 
效果同system命令类似,区别是不会开启子进程,而是取代父进程,因此执行完引号中的命令后进程即结束。一般和fork配合使用。

3. `command`; 
使用反引号调用外部命令能够捕获其标准输出,并按行返回且每行结束处附带一个回车。反引号中的变量在编译时会被内插为其值。

4. open LIST “ls -l|”; 
open MORE “|more”; 
@list=; 
print MORE @list; 
close(LIST); 
close(MORE); 
使用带管道的文件句柄来执行外部命令,使用方式与读写文件类似。可以从外部命令的输出读取数据,也可以将数据输出到外部命令作为输入。

5. defined(my $pid=fork) or die “Can not fork: $!/n”; unless ($pid) { exec (”date”); } waitpid ($pid,0); 使用fork将会开启子进程与父进程同时执行之后的代码,其中父进程中fork会返回一个非零的数,而子进程中将返回零。 上面的代码完成和system(”date”)相同的功能。比起system单纯地调用外部命令,fork可以完成更加复杂的进程操作。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐