48 lines
906 B
Go
48 lines
906 B
Go
|
|
package email
|
|||
|
|
|
|||
|
|
import (
|
|||
|
|
"carrotskin/pkg/config"
|
|||
|
|
"fmt"
|
|||
|
|
"sync"
|
|||
|
|
|
|||
|
|
"go.uber.org/zap"
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
var (
|
|||
|
|
// serviceInstance 全局邮件服务实例
|
|||
|
|
serviceInstance *Service
|
|||
|
|
// once 确保只初始化一次
|
|||
|
|
once sync.Once
|
|||
|
|
// initError 初始化错误
|
|||
|
|
initError error
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
// Init 初始化邮件服务(线程安全,只会执行一次)
|
|||
|
|
func Init(cfg config.EmailConfig, logger *zap.Logger) error {
|
|||
|
|
once.Do(func() {
|
|||
|
|
serviceInstance = NewService(cfg, logger)
|
|||
|
|
})
|
|||
|
|
return nil
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// GetService 获取邮件服务实例(线程安全)
|
|||
|
|
func GetService() (*Service, error) {
|
|||
|
|
if serviceInstance == nil {
|
|||
|
|
return nil, fmt.Errorf("邮件服务未初始化,请先调用 email.Init()")
|
|||
|
|
}
|
|||
|
|
return serviceInstance, nil
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// MustGetService 获取邮件服务实例,如果未初始化则panic
|
|||
|
|
func MustGetService() *Service {
|
|||
|
|
service, err := GetService()
|
|||
|
|
if err != nil {
|
|||
|
|
panic(err)
|
|||
|
|
}
|
|||
|
|
return service
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|