package mail import ( "crypto/tls" "fmt" "net/mail" "net/smtp" "git.acooldomain.co/server-manager/backend-kubernetes-go/models" ) const EMAIL_SERVER_ENV_VAR = "EMAIL_SERVER" const FROM_EMAIL_ENV_VAR = "FROM_EMAIL" var auth *smtp.Auth var mailConfig *models.EmailConfig func InitializeClient(config models.EmailConfig) error { simpleAuth := smtp.PlainAuth("", config.Username, config.Password, config.Server) auth = &simpleAuth mailConfig = &config return nil } func SendMail( recipient string, subject string, content string, ) error { if auth == nil { return fmt.Errorf("mail not initialized") } if mailConfig == nil { return fmt.Errorf("mail not initialized") } from := mail.Address{Name: "", Address: mailConfig.FromEmail} to := mail.Address{Name: "", Address: recipient} headers := make(map[string]string) headers["From"] = from.String() headers["To"] = to.String() headers["Subject"] = subject message := "" for k, v := range headers { message += fmt.Sprintf("%s: %s\r\n", k, v) } message += "\r\n" + content conn, err := tls.Dial("tcp", mailConfig.Server+":465", &tls.Config{ServerName: mailConfig.Server}) if err != nil { return err } client, err := smtp.NewClient(conn, mailConfig.Server) if err != nil { return err } if err = client.Auth(*auth); err != nil { return err } if err = client.Mail(mailConfig.FromEmail); err != nil { return err } if err = client.Rcpt(recipient); err != nil { return err } writer, err := client.Data() if err != nil { return err } _, err = writer.Write([]byte(message)) if err != nil { return err } if err = writer.Close(); err != nil { return err } return client.Quit() }