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 { 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() { //加载游戏相关配置 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() } /* * 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.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) } } return }