init.go 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. package res_init
  2. import (
  3. "encoding/json"
  4. "github.com/Jinnrry/pmail/config"
  5. "github.com/Jinnrry/pmail/db"
  6. "github.com/Jinnrry/pmail/dto/parsemail"
  7. "github.com/Jinnrry/pmail/hooks"
  8. "github.com/Jinnrry/pmail/listen/http_server"
  9. "github.com/Jinnrry/pmail/listen/imap_server"
  10. "github.com/Jinnrry/pmail/listen/pop3_server"
  11. "github.com/Jinnrry/pmail/listen/smtp_server"
  12. "github.com/Jinnrry/pmail/services/setup/ssl"
  13. "github.com/Jinnrry/pmail/session"
  14. "github.com/Jinnrry/pmail/signal"
  15. "github.com/Jinnrry/pmail/utils/file"
  16. log "github.com/sirupsen/logrus"
  17. "os"
  18. "time"
  19. )
  20. func Init(serverVersion string) {
  21. if !config.IsInit {
  22. dirInit()
  23. go http_server.SetupStart()
  24. <-signal.InitChan
  25. http_server.SetupStop()
  26. }
  27. for {
  28. config.Init()
  29. // 启动前检查一遍证书
  30. ssl.Update(false)
  31. parsemail.Init()
  32. err := db.Init(serverVersion)
  33. if err != nil {
  34. panic(err)
  35. }
  36. session.Init()
  37. hooks.Init(serverVersion)
  38. // smtp server start
  39. go smtp_server.Start()
  40. go smtp_server.StartWithTLS()
  41. go smtp_server.StartWithTLSNew()
  42. // http server start
  43. go http_server.HttpsStart()
  44. go http_server.HttpStart()
  45. // pop3 server start
  46. go pop3_server.Start()
  47. go pop3_server.StartWithTls()
  48. // imap server start
  49. go imap_server.StarTLS()
  50. configStr, _ := json.Marshal(config.Instance)
  51. log.Warnf("Config File Info: %s", configStr)
  52. select {
  53. case <-signal.RestartChan:
  54. log.Infof("Server Restart!")
  55. smtp_server.Stop()
  56. http_server.HttpsStop()
  57. http_server.HttpStop()
  58. pop3_server.Stop()
  59. imap_server.Stop()
  60. hooks.Stop()
  61. case <-signal.StopChan:
  62. log.Infof("Server Stop!")
  63. smtp_server.Stop()
  64. http_server.HttpsStop()
  65. http_server.HttpStop()
  66. pop3_server.Stop()
  67. imap_server.Stop()
  68. hooks.Stop()
  69. return
  70. }
  71. log.Infof("Server Stop Success!")
  72. time.Sleep(5 * time.Second)
  73. }
  74. }
  75. func dirInit() {
  76. if !file.PathExist("./config") {
  77. err := os.MkdirAll("./config", 0744)
  78. if err != nil {
  79. panic(err)
  80. }
  81. }
  82. if !file.PathExist("./config/dkim") {
  83. err := os.MkdirAll("./config/dkim", 0744)
  84. if err != nil {
  85. panic(err)
  86. }
  87. }
  88. if !file.PathExist("./config/ssl") {
  89. err := os.MkdirAll("./config/ssl", 0744)
  90. if err != nil {
  91. panic(err)
  92. }
  93. }
  94. }