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