1.在controllers目录下写一个接口类
interfacemethod.php
function getjsondata()
{
if($_SERVER['REMOTE_ADDR'] == '127.0.0.1')
{
$url = $_SERVER['REQUEST_URI'];//获取传来的路径
$id = intval(substr($url,35));//截取方法获取id
$sql = 'select id,taskname,url,username,userid from t_user where operator =? ;';
$tasks = $this->db->query($sql,array($id))->result();
$data = array();
foreach($tasks as $task)
{
array_push($data,array('id'=>$task->id,'taskname'=>$task->name,'url'=>$task->url));
}
$bigdata['data'] = $data;
echo json_encode($bigdata);
}
}
2.Perl中调用接口
sendmail.pl
#!/usr/bin/perl
use lib '/usr/email'
use ning_mysql; //数据库
use Sendmail; //发送邮件
use strict; //定义变量
use Encode;
use MIME::Base64; //邮件主题让其不出现中文乱码
use warnings; //警告
//调用json需要的
use LWP::Simple;
use URI::Escape;
use JSON;
use LWP::UserAgent;
binmode(STDIN, ':encoding(utf8)');
binmode(STDOUT, ':encoding(utf8)');
binmode(STDERR, ':encoding(utf8)');
#use utf8; 此处不能使用这个,若是用了json传来的值的显示会是乱码
sub sendmailcontent
{
my $mailheader = <<HTML_HEAD;
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<html>
<meta charset="UTF-8">
<meta http-equiv="Content-Type" contect="text/html;charset=utf-8">
<head><title>DNS检测报告</title>
<TABLE border=0 cellSpacing=0 cellPadding=0 width="100%" align=center>
<TBODY>
<TR>
<TD style="PADDING-BOTTOM: 40px; BACKGROUND-COLOR: #f2f2f2; PADDING-LEFT: 20px; PADDING-RIGHT: 20px; PADDING-TOP: 40px">
<TABLE style="MARGIN: 0px auto" border=0 cellSpacing=0 cellPadding=0 width=660 align=center>
<TBODY>
<TR>
<TD align=left>
<DIV style="MARGIN-BOTTOM: 0.4em"></DIV>
<DIV style="BORDER-BOTTOM: #d5d5d5 1px solid; BORDER-LEFT: #d5d5d5 1px solid; BACKGROUND-COLOR: #fff; FONT-FAMILY: 微软雅黑, 宋体; FONT-SIZE: 14px; BORDER-TOP: #d5d5d5 1px solid; BORDER-RIGHT: #d5d5d5 1px solid">
<DIV style="PADDING-BOTTOM: 1em; BACKGROUND-COLOR: #0099cc; PADDING-LEFT: 1.5em; PADDING-RIGHT: 1.5em; COLOR: #fff; PADDING-TOP: 1em">
<DIV style="FONT-SIZE: 36px">
<H3 align=center><FONT size=6>添加任务报告</FONT></H3></DIV></DIV>
<DIV style="PADDING-BOTTOM: 1.5em; LINE-HEIGHT: 1.5; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 1.5em">
<DIV style="PADDING-BOTTOM: 0px; PADDING-LEFT: 1.5em; PADDING-RIGHT: 1.5em; PADDING-TOP: 0px">
HTML_HEAD
connection_db();
my %result;
my $resultcount;
my $sql = 'select * from t_user where DATE_ADD(inserttime,INTERVAL days SECOND)<now();';
if(($resultcount = &ning_mysql::mysql_execute($sql,\%result)) < 0)
{
print 'Error:SQL:'.$sql.'执行失败\n';
&ning_mysql::mysql_close;
exit 1;
}
for(my $i = 0; $i < $resultcount ; $i++)
{
my $basic_info;
my $cur_time=`date`;
$basic_info=<<HTML_BASIC_INFO;
<DIV style="MARGIN-BOTTOM: 1em; FONT-WEIGHT: bold"> 亲爱的 【<A href="mailto:$result{$i}{username}">$result{$i}{username}</A>】:</DIV>
<DIV style="MARGIN-BOTTOM: 0.5em">您好!欢迎使用,</DIV>
<h3>【基本信息】</h3>
<DIV style="MARGIN-BOTTOM: 0.5em">检测的站点:<A href="$result{$i}{url}" target=_blank>$result{$i}{url}</A>; <BR>检测结束时间:$cur_time;</DIV>
<DIV style="MARGIN-BOTTOM: 0.5em">
HTML_BASIC_INFO
#调用接口后取json返回值
my $ua = LWP::UserAgent->new;
$ua->timeout(10);
$ua->env_proxy;
my dataurl = 'http://127.0.01/interfacemethod/getjsondata?id=$result{$i}{userid}';
my dataresponse = $ua->get($dataurl);
my availible;
my $avalible_info;
if($dataresponse->is_success)
{
my $data_info = $dataresponse->decoded_content;
my $json = new JSON();
my $json_obj = $json->decode($data_info);
#循环json取值
foreach my $errordata (@{$json_obj->{"errordata"}})
{
my $taskname= $errordata->{"taskname"};
my $url= $errordata->{"url"};
my $username = $errordata->{"username"};
$avalible=<<HTML_VUL_SUM_BEGIN;
HTML_VUL_SUM_BEGIN
$avalible_info.="<tr>\r\n";
$avalible_info.="<td><b>".$taskname."</b></td>\r\n";
$avalible_info.="<td><b>".$url."</b></td>\r\n";
$avalible_info.="<td><b>".$username."</b></td>\r\n";
$avalible_info.="</tr>\r\n";
}
}
$avalible .=<<HTML_VUL_SUM_BEGIN;
<h3>【今日任务监控】</h3>
<br /><br />
<table id="t_stats" border="2" align="center" cellspacing="2" cellpadding="2">
<tr>
<th>任务名称</th><th>URL</th><th>用户</th>
</tr>
HTML_VUL_SUM_BEGIN
# $avalible.=encode("utf8",decode("utf8",$avalible_info));;
$avalible.=encode("utf8",$avalible_info);;#页面显示编码
$avalible.=<<HTML_VUL_SUM_END;
</table>
<br /><br />
HTML_VUL_SUM_END
my $mailbody=$mailheader;
$mailbody .=$basic_info;
$mailbody .=$avalible;
$mailbody .=<<HTML_VUL_INFO_BEGIN;
<TABLE style="LINE-HEIGHT: 1.2; MARGIN: 0px auto; WIDTH: 650px; COLOR: #999; FONT-SIZE: 12px">
<TBODY>
<TR>
<TD>
<DIV style="MARGIN-BOTTOM: 0.5em">此为系统邮件,请勿直接回复。</DIV>
<TD style="TEXT-ALIGN: right"></TD></TR></TBODY></TABLE></DIV></DIV></DIV></DIV>
<DIV style="TEXT-ALIGN: center; FONT-FAMILY: 微软雅黑, 宋体; COLOR: #999; FONT-SIZE: 12px; PADDING-TOP: 0.5em"> 2015 </DIV></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>
HTML_VUL_INFO_BEGIN
$mailbody .="</body></html>";
my $alarmcontext = "检测任务详情";
send_mail($alarmcontext,2,$result{$i}{url},$result{$i}{username},$result{$i}{email},$mailbody);
#更新发送邮件最后时间
$sql="update t_user set inserttime=now() where id=$result{$i}{id};";
if( &ning_mysql::mysql_execute($sql, undef) < 0)
{
print "ERROR:SQL:".$sql."执行失败\n";
&ning_mysql::mysql_close;
exit 1;
}
}
}
sub send_mail
{
my $alarmcontext=$_[0];
my $type=$_[1];
my $taskurl=$_[2];
my $username=$_[3];
my $email=$_[4];
my $mailbody= $_[5];
my $emailsubject="=?UTF-8?B?".encode_base64($alarmcontext)."?=";#邮件主题的中文乱码解决方式
#从文件读取邮件信息
my %mail_conf = ();
my $DBCONF;
#sendmail.conf存储的是发送者的邮箱名和密码
#下面是取出sendmail.conf存储的信息
open($DBCONF, '<sendmail.conf') or die "can't open the sendmail configure file in sendmail.pm\n";
my $emailsender;
while(my $line = <$DBCONF>)
{
chomp $line;
(my $name, my $info) = (split /:/, $line)[0,1];
$mail_conf{$name} = $info;
$mail_conf{$name} =~ s/\s//g;
}
close $DBCONF;
$emailsender=$mail_conf{username};#邮件发送者
my @array;
@array=split(";",$email);#邮件接受者
for (my $j = 0; $j <=$#array; $j++)
{
print $array[$j],"\n";
Sendmail::sendmail($emailsender,$array[$j],$emailsubject,\$mailbody);
}
}
sub connection_db
{
my $DBCONF;
#存储数据库信息的文件
use constant DB_CONF_FILE=>'/usr/db.conf';
my %db_conf = ();
#从文件读取数据库信息
open($DBCONF, DB_CONF_FILE) or die "can't open the database configure file in modifycheck.pl\n";
while(my $line = <$DBCONF>)
{
chomp $line;
(my $name, my $info) = (split /:/,$line)[0,1];
$db_conf{$name} = $info;
$db_conf{$name} = ~s/\s//g;
}
close $DBCONF;
&ning_mysql::set_mysql_var($db_conf{dbname}, $db_conf{user}, $db_conf{pass}, $db_conf{host}, undef, $db_conf{port});
&ning_mysql::mysql_conn;
my $sql= "SET NAMES 'UTF8'";
if( &ning_mysql::mysql_execute($sql, undef) < 0)
{
print "ERROR:SQL:".$sql."执行失败\n";
&ning_mysql::mysql_close;
exit 1;
}
}
sendmailcontent();
3.需要的配置文件
sendmail.conf
serverip:smtp.qq.com
username:zhangsan@qq.com
password:zhangsan123
db.conf
host:localhost
port:3306
pass:
dbname:databasename