• golang发送html邮件


    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=60px>SQL</th>
        <th style='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)
    }
  • 相关阅读:
    JS面向对象的理解
    引用类型值的相等判断
    数组的常用方法
    得到一定范围内的随机数
    数组随机排序
    【目标检测大集合】R-FCN、SSD、YOLO2、faster-rcnn和labelImg实验笔记
    卷积层和池化层学习
    R-FCN:基于区域的全卷积网络来检测物体
    【目标检测】Faster RCNN算法详解
    Selective Search for Object Recognition
  • 原文地址:https://www.cnblogs.com/hxlasky/p/11281957.html
Copyright © 2020-2023  润新知