package alert import ( "bytes" "fmt" "html/template" "time" ) // NewHTMLEmail 告警邮件模板 func newHTMLEmail(method, host, uri, id string, msg interface{}, stack string) (subject string, body string, err error) { mailData := &struct { URL string ID string Msg string Stack string Year int }{ URL: fmt.Sprintf("%s %s%s", method, host, uri), ID: id, Msg: fmt.Sprintf("%+v", msg), Stack: stack, Year: time.Now().Year(), } // subject 邮件主题 subject = fmt.Sprintf("[系统告警]-%s", uri) // body 邮件内容 body, err = getEmailHTMLContent(mailTemplate, mailData) return } // getEmailHTMLContent 获取邮件模板 func getEmailHTMLContent(mailTpl string, mailData interface{}) (string, error) { tpl, err := template.New("email tpl").Parse(mailTpl) if err != nil { return "", err } buffer := new(bytes.Buffer) err = tpl.Execute(buffer, mailData) if err != nil { return "", err } return buffer.String(), nil } const mailTemplate = `
系统告警

Hello!

您收到此电子邮件,请紧急安排处理。

ID: {{.ID}}
URL: {{.URL}}
Error: {{.Msg}}
Stack: {{.Stack}}

© {{.Year}} All rights reserved.

`