这几天做的东西需要使用到在linux下定时自动运行脚本程序,并且把结果通过邮件的方式发送给收件人。
首先需要解决的问题是脚本的定时自动运行,这个的话就是用linux的cron来计划任务。
然后的话就是发送邮件的程序了,使用perl来编写发送邮件的程序。我使用的是linux自带的sendmail。那就首先简单介绍一下sendmail吧。邮件传输代理(MTA)是一个在两个主机之间或者本地同一主机内传送邮件的程序,它负责邮件的存储和转发,并决定传送邮件到目的地的路线。 UNIX/Linux 系统的标准 MTA 是 sendmail,其他的 MTA 还有 qmail, exim 和微软的 Exchange。MTA 会监视用户代理的请求,根据电子邮件的目标地址找出对应的邮件服务器,在服务器之间传输邮件并将接收到的邮件进行缓冲。
接下来要做的事情就是code了,使用perl的话,code还是很简单的:
open(MAIL, "| /usr/sbin/sendmail || die "Can't open $CFG::SendMail !\n";
print MAIL qq|From: <sender\@sender.com>\n|;
print MAIL qq|To: rec\@rec.com.cn\n|;
print MAIL qq|Subject: Mail发送\n|;
print MAIL qq|<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head>\n|;
print MAIL qq{
<body bgColor="#FFFFFF">
Hello, World!<br>
</body>
</html>
};
close(MAIL);
这是一个使用html页面来显示信息的mail发送程序。
如果需要发送附件的话,程序如下:
open(MAIL, "| /usr/sbin/sendmail || die "Can't open $CFG::SendMail !\n";
print MAIL qq|From: <sender\@sender.com>\n|;
print MAIL qq|To: rec\@rec.com.cn\n|;
print MAIL qq|Subject: Mail发送\n|;
print MAIL qq|<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head>\n|;
print MAIL qq{
<body bgColor="#FFFFFF">
Hello, World!<br>
</body>
</html>
};
# 附件
my $file = "/tmp/Report.txt";
open(FILE, "uuencode $file $file |") or die;
print MAIL <FILE>;
close(FILE);
close(MAIL);