<html> <head> <title>邮件标题</title> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> <meta name="description" content="alert results." /> <style type="text/css"> body { margin: 10px 20px; font-size: 14px; font-family: "Arial","Microsoft YaHei","黑体","宋体",sans-serif; } /*table*/ /*{*/ /*border-collapse: collapse;*/ /*text-align: center;*/ /*font-size: 14px;*/ /*}*/ /*table td, table th*/ /*{*/ /*border: 2px solid #cc6f4a;*/ /*color: #666;*/ /*height: 20px;*/ /*text-align: center;*/ /*padding: 3px 3px;*/ /*}*/ /*table thead th*/ /*{*/ /**/ /* 100px;*/ /*}*/ /*table tr:nth-child(odd)*/ /*{*/ /*background: #fff;*/ /*}*/ /*table tr:nth-child(even)*/ /*{*/ /*background: #c9dafa;*/ /*}*/ .successBtn { 60px; padding:3px; background-color: #58ab48; border-color: #58ab48; color: #fff; -moz-border-radius: 10px; -webkit-border-radius: 10px; border-radius: 10px; /* future proofing */ -khtml-border-radius: 10px; /* for old Konqueror browsers */ text-align: center; vertical-align: middle; border: 1px solid transparent; font-weight: 500; /*font-size:125%*/ } .failBtn{ 60px; padding:3px; background-color: #ab2e2d; border-color: #ab2e2d; color: #fff; -moz-border-radius: 10px; -webkit-border-radius: 10px; border-radius: 10px; /* future proofing */ -khtml-border-radius: 10px; /* for old Konqueror browsers */ text-align: center; vertical-align: middle; border: 1px solid transparent; font-weight: 500; /*font-size:125%*/ } </style> <style> /* Border styles */ .tabNoBorder thead, .tabNoBorder tr { border-top- 1px; border-top-style: solid; border-top-color: rgb(211, 202, 221); } .tabNoBorder { border-bottom- 1px; border-bottom-style: solid; border-bottom-color: rgb(211, 202, 221); } /* Padding and font style */ .tabNoBorder td, .tabNoBorder th { padding: 5px 10px; font-size: 14px; font-family: Verdana; color: rgb(95, 74, 121); } /* Alternating background colors */ .tabNoBorder tr:nth-child(even) { background: rgb(223, 216, 232) } .tabNoBorder tr:nth-child(odd) { /*background: #FFF*/ background: rgb(223, 216, 232) } </style> </head> <body> <h2>Summary</h2> <span>预警任务《{{.TaskName}}》警告。 。详情如下:</span> <h2>Detail</h2> <table class="tabNoBorder" style="border-top-1px; border-top-color: rgb(211, 202, 221);"> <tr class="columnHeadings" style="border-top-1px; border-top-style: solid; border-top-color: rgb(211, 202, 221);background: rgb(223, 216, 232)"> <th style="padding: 5px 10px; font-size: 14px; font-family: Verdana; color: rgb(95, 74, 121);">详细数据</th> <th style="padding: 5px 10px; font-size: 14px; font-family: Verdana; color: rgb(95, 74, 121);">对比实际值</th> <th style="padding: 5px 10px; font-size: 14px; font-family: Verdana; color: rgb(95, 74, 121);">阈值</th> <th style="padding: 5px 10px; font-size: 14px; font-family: Verdana; color: rgb(95, 74, 121);">对比结果</th> </tr> {{ range $Item := .Data }} {{ range $i,$Item1 := $Item }} {{if eq $i 0}} <tr style="border-top-1px; border-top-style: solid; border-top-color: rgb(211, 202, 221);background: rgb(223, 216, 232)"> <td rowspan="{{len $Item}}" style="padding: 5px 10px; font-size: 14px; font-family: Verdana; color: rgb(95, 74, 121);"> </td> <td style="padding: 5px 10px; font-size: 14px; font-family: Verdana; color: rgb(95, 74, 121);">{{$Item1.realValue}}</td> <td style="padding: 5px 10px; font-size: 14px; font-family: Verdana; color: rgb(95, 74, 121);">{{$Item1.threshold}}</td> <td rowspan="{{len $Item}}" style="padding: 5px 10px; font-size: 14px; font-family: Verdana; color: rgb(95, 74, 121);"><div class="failBtn">Alert</div></td> </tr> {{else}} <tr style="border-top-1px; border-top-style: solid; border-top-color: rgb(211, 202, 221);background: rgb(223, 216, 232)"> <td style="padding: 5px 10px; font-size: 14px; font-family: Verdana; color: rgb(95, 74, 121);">{{$Item1.realValue}}</td> <td style="padding: 5px 10px; font-size: 14px; font-family: Verdana; color: rgb(95, 74, 121);">{{$Item1.threshold}}</td> </tr> {{end}} {{end}} {{end}} </table> <br/><br/> </body> </html>
var builtins = FuncMap{
"and": and,
"call": call,
"html": HTMLEscaper,
"index": index,
"js": JSEscaper,
"len": length,
"not": not,
"or": or,
"print": fmt.Sprint,
"printf": fmt.Sprintf,
"println": fmt.Sprintln,
"urlquery": URLQueryEscaper,
// Comparisons
"eq": eq, // ==
"ge": ge, // >=
"gt": gt, // >
"le": le, // <=
"lt": lt, // <
"ne": ne, // !=
}
template内置函数,使用方法为ps: {{printf "%d" var1}}
func parseNotifyTemplate(templateFileName string, msg Message) string { //tmpl, err := template.New("notify").Parse(notifyTemplate) //tmpl, err := template.ParseFiles("../../templates/reportTemplate.html") var funMaps = template.FuncMap{ "addonehour": AddOneHour, "getColumnTitleByKey": GetColumnTitleByKey, "noKexuejishu": NoKexuejishu, } fmt.Println(funMaps) //根据模板目录配置+配置文件名 tmpl, err := template.New(templateFileName).Funcs(funMaps).ParseFiles(app.Cfg.Templatesdir + templateFileName) //根据模板目录配置+配置文件名 //tmpl, err := template.ParseFiles(app.Cfg.Templatesdir + templateFileName) if err != nil { fmt.Println("定义通知模板失败: %s", err) return fmt.Sprintf("定义通知模板失败: %s", err) } //tmpl = tmpl.Funcs(template.FuncMap{"getValueByKey": GetValueByKey}) var buf bytes.Buffer err = tmpl.Execute(&buf, map[string]interface{}{ "TaskId": msg["task_id"], "TaskName": msg["name"], "Status": msg["status"], "Result": msg["output"], "Data": msg["Data"], "UpdateAt": msg["updateAt"], }) //template.HTMLEscapeString(buf.String()) if err != nil { fmt.Println("解析通知模板失败: %s", err) return fmt.Sprintf("解析通知模板失败: %s", err) } //return buf.String() return strings.Replace(buf.String(), " ", "", -1) }