Smail/server/res_init/init.go
Jinnrry fcc863e8b8
feature/v2.8.4 (#277)
1、发件列表不展示bug修复
2、smtps支持587端口
3、发件代码优化
2025-05-10 09:31:23 +08:00

107 lines
2.2 KiB
Go

package res_init
import (
"encoding/json"
"github.com/Jinnrry/pmail/config"
"github.com/Jinnrry/pmail/db"
"github.com/Jinnrry/pmail/dto/parsemail"
"github.com/Jinnrry/pmail/hooks"
"github.com/Jinnrry/pmail/listen/http_server"
"github.com/Jinnrry/pmail/listen/imap_server"
"github.com/Jinnrry/pmail/listen/pop3_server"
"github.com/Jinnrry/pmail/listen/smtp_server"
"github.com/Jinnrry/pmail/services/setup/ssl"
"github.com/Jinnrry/pmail/session"
"github.com/Jinnrry/pmail/signal"
"github.com/Jinnrry/pmail/utils/file"
log "github.com/sirupsen/logrus"
"os"
"time"
)
func Init(serverVersion string) {
if !config.IsInit {
dirInit()
go http_server.SetupStart()
<-signal.InitChan
http_server.SetupStop()
}
for {
config.Init()
// 启动前检查一遍证书
ssl.Update(false)
parsemail.Init()
err := db.Init(serverVersion)
if err != nil {
panic(err)
}
session.Init()
hooks.Init(serverVersion)
// smtp server start
go smtp_server.Start()
go smtp_server.StartWithTLS()
go smtp_server.StartWithTLSNew()
// http server start
go http_server.HttpsStart()
go http_server.HttpStart()
// pop3 server start
go pop3_server.Start()
go pop3_server.StartWithTls()
// imap server start
go imap_server.StarTLS()
configStr, _ := json.Marshal(config.Instance)
log.Warnf("Config File Info: %s", configStr)
select {
case <-signal.RestartChan:
log.Infof("Server Restart!")
smtp_server.Stop()
http_server.HttpsStop()
http_server.HttpStop()
pop3_server.Stop()
imap_server.Stop()
hooks.Stop()
case <-signal.StopChan:
log.Infof("Server Stop!")
smtp_server.Stop()
http_server.HttpsStop()
http_server.HttpStop()
pop3_server.Stop()
imap_server.Stop()
hooks.Stop()
return
}
log.Infof("Server Stop Success!")
time.Sleep(5 * time.Second)
}
}
func dirInit() {
if !file.PathExist("./config") {
err := os.MkdirAll("./config", 0744)
if err != nil {
panic(err)
}
}
if !file.PathExist("./config/dkim") {
err := os.MkdirAll("./config/dkim", 0744)
if err != nil {
panic(err)
}
}
if !file.PathExist("./config/ssl") {
err := os.MkdirAll("./config/ssl", 0744)
if err != nil {
panic(err)
}
}
}