init.go 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  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/pop3_server"
  12. "pmail/services/setup/ssl"
  13. "pmail/session"
  14. "pmail/signal"
  15. "pmail/smtp_server"
  16. "pmail/utils/file"
  17. )
  18. func Init(serverVersion string) {
  19. if !config.IsInit {
  20. dirInit()
  21. go http_server.SetupStart()
  22. <-signal.InitChan
  23. http_server.SetupStop()
  24. }
  25. for {
  26. config.Init()
  27. // 启动前检查一遍证书
  28. ssl.Update(false)
  29. parsemail.Init()
  30. err := db.Init()
  31. if err != nil {
  32. panic(err)
  33. }
  34. session.Init()
  35. hooks.Init(serverVersion)
  36. // smtp server start
  37. go smtp_server.Start()
  38. go smtp_server.StartWithTLS()
  39. // http server start
  40. go http_server.HttpsStart()
  41. go http_server.HttpStart()
  42. // pop3 server start
  43. go pop3_server.Start()
  44. go pop3_server.StartWithTls()
  45. configStr, _ := json.Marshal(config.Instance)
  46. log.Warnf("Config File Info: %s", configStr)
  47. select {
  48. case <-signal.RestartChan:
  49. log.Infof("Server Restart!")
  50. smtp_server.Stop()
  51. http_server.HttpsStop()
  52. http_server.HttpStop()
  53. pop3_server.Stop()
  54. hooks.Stop()
  55. case <-signal.StopChan:
  56. log.Infof("Server Stop!")
  57. smtp_server.Stop()
  58. http_server.HttpsStop()
  59. http_server.HttpStop()
  60. pop3_server.Stop()
  61. hooks.Stop()
  62. return
  63. }
  64. }
  65. }
  66. func dirInit() {
  67. if !file.PathExist("./config") {
  68. err := os.MkdirAll("./config", 0744)
  69. if err != nil {
  70. panic(err)
  71. }
  72. }
  73. if !file.PathExist("./config/dkim") {
  74. err := os.MkdirAll("./config/dkim", 0744)
  75. if err != nil {
  76. panic(err)
  77. }
  78. }
  79. if !file.PathExist("./config/ssl") {
  80. err := os.MkdirAll("./config/ssl", 0744)
  81. if err != nil {
  82. panic(err)
  83. }
  84. }
  85. }