You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

92 lines
2.2 KiB

package service
import (
"crypto/tls"
"github.com/gogf/gf/v2/encoding/gjson"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/os/gctx"
"github.com/jordan-wright/email"
"log"
"net/smtp"
"strings"
)
type IEmail interface {
ConfigInit()
SendEmail(emailAddr, code string) (err error)
}
type emailServiceTmpl struct {
}
var emailService = emailServiceTmpl{}
func Email() IEmail {
return &emailService
}
type EmailTmpl struct {
From string
EmailAddr string
Password string
Smtp string
Port string
Subject string
HTML string
}
var (
emailConfig EmailTmpl
)
func init() {
emailService.ConfigInit()
}
func (a *emailServiceTmpl) ConfigInit() {
//加载游戏相关配置
ctx := gctx.New()
emailConfig.From = g.Cfg().MustGet(ctx, "game.email.from").String()
emailConfig.EmailAddr = g.Cfg().MustGet(ctx, "game.email.emailAddr").String()
emailConfig.Smtp = g.Cfg().MustGet(ctx, "game.email.smtp").String()
emailConfig.Password = g.Cfg().MustGet(ctx, "game.email.password").String()
emailConfig.Port = g.Cfg().MustGet(ctx, "game.email.port").String()
emailConfig.Subject = g.Cfg().MustGet(ctx, "game.email.subject").String()
emailConfig.HTML = g.Cfg().MustGet(ctx, "game.email.html").String()
log.Println("email init: ", gjson.MustEncodeString(emailConfig))
}
/*
* Description:
*
* 使用凭据初始化账号Client
* @return Client
* @throws Exception
*/
func (a *emailServiceTmpl) SendEmail(emailAddr, code string) (err error) {
e := email.NewEmail()
e.From = emailConfig.From
e.To = []string{emailAddr}
e.Subject = emailConfig.Subject
html := strings.Replace(emailConfig.HTML, "TITLE", code, -1)
e.HTML = []byte(strings.Replace(html, "CODE", code, -1))
log.Println("SendEmail: ", gjson.MustEncodeString(emailConfig))
auth := smtp.PlainAuth("", emailConfig.EmailAddr, emailConfig.Password, emailConfig.Smtp)
if emailConfig.Port == "25" {
err = e.Send(emailConfig.Smtp+":"+emailConfig.Port, auth)
if err != nil {
log.Println("SendEmail: Send:", err)
}
} else {
tc := &tls.Config{
ServerName: emailConfig.Smtp,
InsecureSkipVerify: true,
}
err = e.SendWithTLS(emailConfig.Smtp+":"+emailConfig.Port, auth, tc)
if err != nil {
log.Println("SendEmail: SendWithTLS: ", err)
}
}
return
}