2
0

p_debugger.go 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. package backends
  2. import (
  3. "github.com/flashmob/go-guerrilla/envelope"
  4. )
  5. // ----------------------------------------------------------------------------------
  6. // Processor Name: debugger
  7. // ----------------------------------------------------------------------------------
  8. // Description : Log received emails
  9. // ----------------------------------------------------------------------------------
  10. // Config Options: log_received_mails bool - log if true
  11. // --------------:-------------------------------------------------------------------
  12. // Input : e.MailFrom, e.RcptTo, e.Header
  13. // ----------------------------------------------------------------------------------
  14. // Output : none (only output to the log if enabled)
  15. // ----------------------------------------------------------------------------------
  16. func init() {
  17. processors["debugger"] = func() Decorator {
  18. return Debugger()
  19. }
  20. }
  21. type debuggerConfig struct {
  22. LogReceivedMails bool `json:"log_received_mails"`
  23. }
  24. func Debugger() Decorator {
  25. var config *debuggerConfig
  26. initFunc := Initialize(func(backendConfig BackendConfig) error {
  27. configType := BaseConfig(&debuggerConfig{})
  28. bcfg, err := Svc.ExtractConfig(backendConfig, configType)
  29. if err != nil {
  30. return err
  31. }
  32. config = bcfg.(*debuggerConfig)
  33. return nil
  34. })
  35. Svc.AddInitializer(initFunc)
  36. return func(c Processor) Processor {
  37. return ProcessWith(func(e *envelope.Envelope, task SelectTask) (Result, error) {
  38. if task == TaskSaveMail {
  39. if config.LogReceivedMails {
  40. Log().Infof("Mail from: %s / to: %v", e.MailFrom.String(), e.RcptTo)
  41. Log().Info("Headers are:", e.Header)
  42. }
  43. // continue to the next Processor in the decorator stack
  44. return c.Process(e, task)
  45. } else {
  46. return c.Process(e, task)
  47. }
  48. })
  49. }
  50. }