Healthcheck/mail.go
2024-09-01 22:05:49 -03:00

81 lines
2.0 KiB
Go

package main
import (
"fmt"
"gopkg.in/gomail.v2"
"os"
"strconv"
"time"
)
type smtpInfo struct {
server string
port int
user string
pass string
sender string
receiver string
}
var defaultSMTP smtpInfo
func sendStatusReport(publicName, newStatus, oldStatus string) error {
mail := gomail.NewMessage()
mail.SetHeader("From", defaultSMTP.sender)
mail.SetHeader("To", defaultSMTP.receiver)
mail.SetHeader("Subject", fmt.Sprintf("[Status Report] %s has changed to %s", publicName, newStatus))
currentTime := time.Now().Format("2006-01-02 15:04:05")
msg := fmt.Sprintf(
"%s has changed status from %s to %s at %s",
publicName, oldStatus, newStatus, currentTime)
mail.SetBody("text/plain", msg)
dial := gomail.NewDialer(defaultSMTP.server, defaultSMTP.port, defaultSMTP.user, defaultSMTP.pass)
err := dial.DialAndSend(mail)
if err != nil {
return err
}
fmt.Printf("Status report \"%s\" sent at %s\n", publicName, currentTime)
return nil
}
func initSMTP() {
port, _ := strconv.Atoi(os.Getenv("SMTP_PORT"))
defaultSMTP = smtpInfo{
server: os.Getenv("SMTP_SERVER"),
port: port,
user: os.Getenv("SMTP_USER"),
pass: os.Getenv("SMTP_PASS"),
sender: os.Getenv("SMTP_SENDER"),
receiver: os.Getenv("SMTP_RECEIVER"),
}
}
func sendReportingStarted() {
fmt.Println("Attempting to start Status Reporting")
currentTime := time.Now().Format("2006-01-02 15:04:05")
msg := fmt.Sprintf(
"Infrabot is now watching for status changes on monitored services\r\n%s",
currentTime)
mail := gomail.NewMessage()
mail.SetHeader("From", defaultSMTP.sender)
mail.SetHeader("To", defaultSMTP.receiver)
mail.SetHeader("Subject", "[Status Report] Healthcheck Status Reporting has started")
mail.SetBody("text/plain", msg)
dial := gomail.NewDialer(defaultSMTP.server, defaultSMTP.port, defaultSMTP.user, defaultSMTP.pass)
err := dial.DialAndSend(mail)
if err != nil {
fmt.Printf("Error sending status reporting: %s\n", err)
return
}
fmt.Printf("Status reporting started at %s\n", currentTime)
return
}