linux perl 腳本 郵件

 使用Perl發送郵件

       在之前的監控系統中,郵件系統配置爲只能本地調用mail命令發送,這樣如果要在每臺數據庫服務上發送郵件就比較麻煩,需要通過ssh遠程調用郵件服務器上的發送腳本。如果要發送文件,還要先將文件複製到郵件服務器上。
隨着機器數量的增加,這種方式越來越不靈活。因此希望能通過傳統的smtp的方式在任何主機上都能發送郵件,於是花了點時間研究了一下sendmail,根據這篇文章很輕鬆的讓sendmail跑了起來:
修改sendmail配置模板/etc/mail/sendmail.mc
define(QUEUE_DIR, `/var/spool/mqueue/q*')dnl
TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
dnl DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl
DAEMON_OPTIONS(`Port=25, Name=MTA')dnl

第一行是新增,支持多個隊列
第二三行去掉註釋
第四行加上註釋
第五行新增
根據模板生成配置文件
m4 /etc/mail/sendmail.mc > /etc/sendmail.cf
建立多個隊列的目錄
cd /var/spool/mqueue/
mkdir q1 q2 q3 q4 q5 q6
啓動sendmail
/etc/rc.d/init.d/sendmail start
若要隨機自啓動sendmail,修改一下chkconfig設置即可
chkconfig --level 35 sendmail on
測試了一下發送郵件成功:
mail -s "test mail" [email protected] < /tmp/test.log
在CPAN上搜索了一下,Mail:Sender模塊發送郵件比較方便,支持多附件,語法也比較簡單。需要安裝如下兩個組件:
MIME::Base64
Mail::Sender
發送郵件的perl示例代碼如下,爲便於查看郵件發送的詳細情況,這裏開啓了debug模式:
#!/usr/bin/perl -w
use Mail::Sender;
open my $DEBUG, ">> /tmp/mail.log" or die "Can't open the debug file: $!\n";
$sender = new Mail::Sender
 {smtp => 'smtp_server',
   from => '[email protected]'};
#發送普通郵件
$sender->MailMsg(
 {to => '[email protected]',
 subject => 'test mail',
 msg => 'hello word',
 debug => $DEBUG
 });
#發送帶附件的郵件
$sender->MailFile(
 {to => '[email protected]',
 subject => 'test mail with attached file',
 msg => 'hello word',
 file => '/tmp/test.txt'
 debug => $DEBUG
 });
經過測試,在郵件服務器本機發送成功,但在遠程主機上則失敗了,通過debug的log文件,發現錯誤如下:
>> 550 5.7.1 < [email protected]>... Relaying denied. Proper authentication required.
因爲是內部監控使用,可以配置遠程發送到特定的域的郵件無須認證,修改/etc/mail/relay-domains文件,每行加入一個目標域,如taobao.com。
修改配置後注意重啓sendmail
/etc/rc.d/init.d/sendmail restart
發送正常的log如下:
>> 250 2.0.0 n69DbJwt011946 Message accepted for delivery
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章