選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

incoming_email.go 1.8KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. // Copyright 2023 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package setting
  4. import (
  5. "fmt"
  6. "net/mail"
  7. "strings"
  8. "code.gitea.io/gitea/modules/log"
  9. )
  10. var IncomingEmail = struct {
  11. Enabled bool
  12. ReplyToAddress string
  13. TokenPlaceholder string `ini:"-"`
  14. Host string
  15. Port int
  16. UseTLS bool `ini:"USE_TLS"`
  17. SkipTLSVerify bool `ini:"SKIP_TLS_VERIFY"`
  18. Username string
  19. Password string
  20. Mailbox string
  21. DeleteHandledMessage bool
  22. MaximumMessageSize uint32
  23. }{
  24. Mailbox: "INBOX",
  25. DeleteHandledMessage: true,
  26. TokenPlaceholder: "%{token}",
  27. MaximumMessageSize: 10485760,
  28. }
  29. func loadIncomingEmailFrom(rootCfg ConfigProvider) {
  30. mustMapSetting(rootCfg, "email.incoming", &IncomingEmail)
  31. if !IncomingEmail.Enabled {
  32. return
  33. }
  34. if err := checkReplyToAddress(); err != nil {
  35. log.Fatal("Invalid incoming_mail.REPLY_TO_ADDRESS (%s): %v", IncomingEmail.ReplyToAddress, err)
  36. }
  37. }
  38. func checkReplyToAddress() error {
  39. parsed, err := mail.ParseAddress(IncomingEmail.ReplyToAddress)
  40. if err != nil {
  41. return err
  42. }
  43. if parsed.Name != "" {
  44. return fmt.Errorf("name must not be set")
  45. }
  46. c := strings.Count(IncomingEmail.ReplyToAddress, IncomingEmail.TokenPlaceholder)
  47. switch c {
  48. case 0:
  49. return fmt.Errorf("%s must appear in the user part of the address (before the @)", IncomingEmail.TokenPlaceholder)
  50. case 1:
  51. default:
  52. return fmt.Errorf("%s must appear only once", IncomingEmail.TokenPlaceholder)
  53. }
  54. parts := strings.Split(IncomingEmail.ReplyToAddress, "@")
  55. if !strings.Contains(parts[0], IncomingEmail.TokenPlaceholder) {
  56. return fmt.Errorf("%s must appear in the user part of the address (before the @)", IncomingEmail.TokenPlaceholder)
  57. }
  58. return nil
  59. }