mailgun.go 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. package providers
  2. import (
  3. "git.wenlab.co/joe/beaconfire"
  4. h2t "github.com/jaytaylor/html2text"
  5. mailgun "github.com/mailgun/mailgun-go"
  6. )
  7. const (
  8. MAILGUNFIRE_NAME = "mailgunfire"
  9. )
  10. type OptionsMailgunfire struct {
  11. Domain string
  12. ApiKey string
  13. DisableTracking bool
  14. }
  15. type mailgunfire struct {
  16. opt *OptionsMailgunfire
  17. }
  18. var _ beaconfire.BeaconFire = &mailgunfire{}
  19. func NewMailgunfire(opt *OptionsMailgunfire) *mailgunfire {
  20. return &mailgunfire{opt: opt}
  21. }
  22. func (c mailgunfire) Name() string {
  23. return MAILGUNFIRE_NAME
  24. }
  25. func (c *mailgunfire) Send(bp *beaconfire.BeaconParam) error {
  26. if len(bp.To) == 0 {
  27. return beaconfire.ErrNoReceiver
  28. }
  29. mg := mailgun.NewMailgun(c.opt.Domain, c.opt.ApiKey)
  30. content := bp.Content
  31. inHtml := true //format == "html"
  32. if inHtml {
  33. if t, err := h2t.FromString(bp.Content); err == nil {
  34. content = t
  35. }
  36. }
  37. msg := mg.NewMessage(bp.From, bp.Title, content, bp.To...)
  38. if inHtml {
  39. msg.SetHtml(content)
  40. }
  41. msg.SetTracking(!c.opt.DisableTracking)
  42. msg.SetTrackingClicks(!c.opt.DisableTracking)
  43. msg.SetTrackingOpens(!c.opt.DisableTracking)
  44. _, _, err := mg.Send(msg)
  45. return err
  46. }