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.

89 lines
2.1 KiB

2 months ago
package service
import (
1 month ago
"crypto/tls"
"github.com/gogf/gf/v2/encoding/gjson"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/os/gctx"
2 months ago
"github.com/jordan-wright/email"
"log"
"net/smtp"
1 month ago
"strings"
2 months ago
)
type IEmail interface {
1 month ago
SendEmail(emailAddr, code string) (err error)
2 months ago
}
type emailServiceTmpl struct {
}
var emailService = emailServiceTmpl{}
func Email() IEmail {
return &emailService
}
1 month ago
type EmailTmpl struct {
From string
EmailAddr string
Password string
Smtp string
Port string
Subject string
HTML string
}
var (
emailConfig EmailTmpl
)
func init() {
//加载游戏相关配置
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()
}
2 months ago
/*
* Description:
*
* 使用凭据初始化账号Client
* @return Client
* @throws Exception
*/
1 month ago
func (a *emailServiceTmpl) SendEmail(emailAddr, code string) (err error) {
2 months ago
e := email.NewEmail()
1 month ago
e.From = emailConfig.From
e.To = []string{emailAddr}
e.Bcc = []string{emailConfig.EmailAddr}
e.Subject = emailConfig.Subject
e.HTML = []byte(strings.Replace(emailConfig.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)
}
2 months ago
}
return
}