mail.go 927 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  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. Debug.F("Message to deliver:\n%s", m)
  20. return m
  21. }
  22. func deliverMessage(s *ServerConfig, m *mail.Message) error {
  23. dialer := mail.NewDialer(
  24. s.Address,
  25. int(s.Port),
  26. s.User,
  27. s.Password,
  28. )
  29. if s.Encryption {
  30. dialer.StartTLSPolicy = mail.MandatoryStartTLS
  31. }
  32. dialer.Timeout = 30 * time.Second
  33. return dialer.DialAndSend(m)
  34. }
  35. func SendMail(config *Config) {
  36. m := formatMessage(config)
  37. if err := deliverMessage(config.Server, m); err != nil {
  38. Error.F("Delivery failure:\n%s", err)
  39. os.Exit(3)
  40. }
  41. }