Perl: 擷取新包、發郵件、調用其他程式

來源:互聯網
上載者:User

按小刁的意思,首先把昨天的檢測指令碼改成帶有複位功能的,然後把警示提示以郵件方式發送到指定的郵箱。

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

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的一些資訊,一直按預設的設定就可以了)。

 [root@lvdbing.net ~]# 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可以完成更加複雜的進程操作。

 


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.