init.go 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. package res_init
  2. import (
  3. "encoding/json"
  4. log "github.com/sirupsen/logrus"
  5. "os"
  6. "pmail/config"
  7. "pmail/db"
  8. "pmail/dto/parsemail"
  9. "pmail/hooks"
  10. "pmail/http_server"
  11. "pmail/models"
  12. "pmail/pop3_server"
  13. "pmail/services/setup/ssl"
  14. "pmail/session"
  15. "pmail/signal"
  16. "pmail/smtp_server"
  17. "pmail/utils/file"
  18. )
  19. func Init(serverVersion string) {
  20. if !config.IsInit {
  21. dirInit()
  22. log.Infof("Please click http://127.0.0.1 to continue.\n")
  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()
  33. if err != nil {
  34. panic(err)
  35. }
  36. syncTables()
  37. session.Init()
  38. hooks.Init(serverVersion)
  39. // smtp server start
  40. go smtp_server.Start()
  41. go smtp_server.StartWithTLS()
  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. configStr, _ := json.Marshal(config.Instance)
  49. log.Warnf("Config File Info: %s", configStr)
  50. <-signal.RestartChan
  51. log.Infof("Server Restart!")
  52. smtp_server.Stop()
  53. http_server.HttpsStop()
  54. http_server.HttpStop()
  55. pop3_server.Stop()
  56. }
  57. }
  58. func dirInit() {
  59. if !file.PathExist("./config") {
  60. err := os.MkdirAll("./config", 0744)
  61. if err != nil {
  62. panic(err)
  63. }
  64. }
  65. if !file.PathExist("./config/dkim") {
  66. err := os.MkdirAll("./config/dkim", 0744)
  67. if err != nil {
  68. panic(err)
  69. }
  70. }
  71. if !file.PathExist("./config/ssl") {
  72. err := os.MkdirAll("./config/ssl", 0744)
  73. if err != nil {
  74. panic(err)
  75. }
  76. }
  77. }
  78. func syncTables() {
  79. err := db.Instance.Sync2(&models.User{})
  80. if err != nil {
  81. panic(err)
  82. }
  83. err = db.Instance.Sync2(&models.Email{})
  84. if err != nil {
  85. panic(err)
  86. }
  87. err = db.Instance.Sync2(&models.Group{})
  88. if err != nil {
  89. panic(err)
  90. }
  91. err = db.Instance.Sync2(&models.Rule{})
  92. if err != nil {
  93. panic(err)
  94. }
  95. err = db.Instance.Sync2(&models.UserAuth{})
  96. if err != nil {
  97. panic(err)
  98. }
  99. }