|
|
|
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
|
|
|
|
}
|