package main
import (
_ "github.com/go-sql-driver/mysql"
"database/sql"
"fmt"
"strconv"
"gopkg.in/gomail.v2"
"crypto/tls"
)
const runsql = "select id, 11 as run_sql,create_time from tb_wrong_run_sql limit 10"
const
(
dbhostsip = "192.168.1.113"
dbusername = "root"
dbpassowrd = "yeemiao1117"
dbname = "db_admin"
)
func SendMail(mailTo []string,subject string, body string ) error {
//定义邮箱服务器连接信息,如果是阿里邮箱 pass填密码,qq邮箱填授权码
mailConn := map[string]string {
"user": "yw@test.com",
"pass": "test",
"host": "mail.test.com",
"port": "25",
}
port, _ := strconv.Atoi(mailConn["port"]) //转换端口类型为int
m := gomail.NewMessage()
m.SetHeader("From","yw" + "<" + mailConn["user"] + ">") //这种方式可以添加别名,即“XD Game”, 也可以直接用<code>m.SetHeader("From",mailConn["user"])</code> 读者可以自行实验下效果
m.SetHeader("To", mailTo...) //发送给多个用户
m.SetHeader("Subject", subject) //设置邮件主题
m.SetBody("text/html", body) //设置邮件正文
d := gomail.NewDialer(mailConn["host"], port, mailConn["user"], mailConn["pass"])
d.TLSConfig = &tls.Config{InsecureSkipVerify: true}
err := d.DialAndSend(m)
fmt.Println(err)
return err
}
func get_data()(string) {
//使用database/sql包中的Open连接数据库
db, err := sql.Open("mysql", dbusername+":"+dbpassowrd+"@tcp("+dbhostsip+")/"+dbname)
if err != nil {
fmt.Println("连接数据库失败:", err)
return "error"
}
//使用DB的query方法遍历数据库数据
rows, err := db.Query(runsql)
//获取完毕释放rows,阻止更多的列举
defer rows.Close()
if err != nil {
fmt.Println("获取错误:", err)
return "error"
}
//var title = `xx实例慢查询`
var header = `<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>`
var i =0
//如果有数据记录Next指针就不为true
var tr = ""
for rows.Next() {
var id int
var run_sql string
var create_time string
rows.Scan(&id, &run_sql, &create_time)
//fmt.Println(id, user, create_time, update_time)
i++
var td = ""
td = td + "<td>" + strconv.Itoa(id) + "</td>"
td = td + "<td>" + run_sql + "</td>"
td = td + "<td>" + create_time + "</td>"
tr = tr + "<tr>" + td + "</tr>"
}
var body = tr
//Err返回可能的、在迭代时出现的错误。Err需在显式或隐式调用Close方法后调用。
//err = rows.Err()
var th = `<body text='#000000'><center><font size=5 color='#dd0000'><b> `+ `不符合规范查询数:` + strconv.Itoa(i) + `</b></font></center>
<br/><table style=' font-size: 14px;' border='1' cellspacing='0' cellpadding='1' bordercolor='#000000' width='20%' align='center' ></table>
<br/><table bgcolor='#B0E0E6' style=' font-size: 14px;'border='1' cellspacing='0' cellpadding='0' bordercolor='#000000' width='95%' align='center' >
<tr bgcolor='#F79646' align='left' >
<th>id</th>
<th style=width:60px>SQL</th>
<th style='width:50px'>采集时间</th>
</tr>`
var tail = `</table></body></html>`
var mail = header + th + body + tail
return mail
}
func main(){
//fmt.Println(get_data())
//定义收件人
mailTo := []string {
"test@test.com",
}
//邮件主题为"Hello"
subject := "xx实例慢查询"
// 邮件正文
body := get_data()
//fmt.Print(body)
SendMail(mailTo, subject, body)
}