mail.go 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. package main
  2. import (
  3. "os"
  4. "time"
  5. mail "gopkg.in/mail.v2"
  6. )
  7. func formatMessage(config *Config) *mail.Message {
  8. m := mail.NewMessage()
  9. m.SetHeader("From", config.From)
  10. m.SetHeader("To", config.To...)
  11. if !IsEmpty(config.Cc) {
  12. m.SetHeader("Cc", config.Cc...)
  13. }
  14. if !IsEmpty(config.Bcc) {
  15. m.SetHeader("Bcc", config.Bcc...)
  16. }
  17. m.SetHeader("Subject", config.Subject)
  18. m.SetBody("text/plain", config.Text)
  19. for _, attachment := range config.Attachments {
  20. Debug.F("Attacching: %s", attachment)
  21. m.Attach(attachment)
  22. }
  23. Debug.F("Message to deliver:\n%s", m)
  24. return m
  25. }
  26. func deliverMessage(s *ServerConfig, m *mail.Message) error {
  27. dialer := mail.NewDialer(
  28. s.Address,
  29. int(s.Port),
  30. s.User,
  31. s.Password,
  32. )
  33. if s.Encryption {
  34. dialer.StartTLSPolicy = mail.MandatoryStartTLS
  35. }
  36. dialer.Timeout = 30 * time.Second
  37. return dialer.DialAndSend(m)
  38. }
  39. func SendMail(config *Config) {
  40. m := formatMessage(config)
  41. if err := deliverMessage(config.Server, m); err != nil {
  42. Error.F("Delivery failure:\n%s", err)
  43. os.Exit(3)
  44. }
  45. }