-
Notifications
You must be signed in to change notification settings - Fork 0
/
email.go
61 lines (51 loc) · 1.65 KB
/
email.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
package email
import (
"bytes"
"flag"
"fmt"
"html/template"
"strings"
"time"
"github.com/Xuyuanp/podwatcher/pkg/handlers"
"gopkg.in/gomail.v1"
)
var (
smtpHost string
smtpPort int
smtpUsername string
smtpPassword string
smtpReceivers string
)
func init() {
flag.StringVar(&smtpHost, "smtp-host", "", "smtp server host")
flag.IntVar(&smtpPort, "smtp-port", 446, "smtp server port")
flag.StringVar(&smtpUsername, "smtp-username", "", "username")
flag.StringVar(&smtpPassword, "smtp-password", "", "password")
flag.StringVar(&smtpReceivers, "smtp-receivers", "", "receivers")
}
type handler struct{}
func NewHandler() handlers.Handler {
return (*handler)(nil)
}
var emailTemplate = template.Must(template.New("").Parse(`<html>
<body>
Container {{ .ContainerName }} in pod {{ .Namespace }}/{{ .Name }} is crashed<br>
<h1>Reason:</h1>{{ .Reason }}
<h1>Message:</h1>{{ .Message }}
<h1>Logs:</h1>
{{range .RawLogs}}<div>{{ . }}</div>{{else}}<div><strong>no logs</strong></div>{{end}}
</body>
</html>`))
func (*handler) Handle(event *handlers.Event) error {
message := gomail.NewMessage()
message.SetHeader("From", smtpUsername)
message.SetHeader("To", strings.Split(smtpReceivers, ",")...)
message.SetHeader("Subject", fmt.Sprintf("Container %s in pod %s/%s crashed", event.ContainerName, event.Namespace, event.Name))
message.SetDateHeader("Date", time.Now())
buf := bytes.NewBuffer(nil)
if err := emailTemplate.Execute(buf, event); err != nil {
return fmt.Errorf("render template failed: %v", err)
}
message.SetBody("text/html", buf.String())
return gomail.NewMailer(smtpHost, smtpUsername, smtpPassword, smtpPort).Send(message)
}