p_debugger.go 1.8 KB

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