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 }