kiss server monitoring tool with email alerts
go
monitoring
1package main
2
3import (
4 "fmt"
5 "log"
6
7 "github.com/wneessen/go-mail"
8)
9
10// sendEmail sends an alert email using the configuration
11func sendEmail(subject, body string, cfg *Config) error {
12 msg := mail.NewMsg()
13 if err := msg.From(cfg.Email.From); err != nil {
14 return fmt.Errorf("failed to set FROM address: %w", err)
15 }
16 if err := msg.To(cfg.Email.To); err != nil {
17 return fmt.Errorf("failed to set TO address: %w", err)
18 }
19
20 msg.Subject(fmt.Sprintf("[ServMon Alert] %s", subject))
21 msg.SetBodyString(mail.TypeTextPlain, body)
22
23 // Create SMTP client with configuration
24 client, err := mail.NewClient(
25 cfg.Email.SMTPServer,
26 mail.WithSMTPAuth(mail.SMTPAuthPlain),
27 mail.WithTLSPortPolicy(mail.TLSMandatory),
28 mail.WithUsername(cfg.Email.Username),
29 mail.WithPassword(cfg.Email.Password),
30 )
31 if err != nil {
32 return fmt.Errorf("failed to create SMTP client: %w", err)
33 }
34
35 // Send the email
36 if err := client.DialAndSend(msg); err != nil {
37 return fmt.Errorf("failed to send email: %w", err)
38 }
39
40 log.Printf("Email alert sent successfully: %s", subject)
41 return nil
42}