mail.go 884 B

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