package services import ( "crypto/tls" "eta/eta_mobile/models" "fmt" "gopkg.in/gomail.v2" "strconv" ) type SendEmailReq struct { Title string `description:"标题"` Content string `description:"内容"` ToUser []string `description:"收信人邮箱"` } func SendEmail(req SendEmailReq) (success bool, err error) { if req.Title == "" { err = fmt.Errorf("邮件主题不可为空") return } if req.Content == "" { err = fmt.Errorf("邮件内容不可为空") return } if len(req.ToUser) <= 0 { err = fmt.Errorf("收信人不可为空") return } // 邮箱配置 confMap, e := models.GetBusinessConf() if e != nil { err = fmt.Errorf("GetBusinessConf err: %s", e.Error()) return } checkArr := []string{ models.BusinessConfEmailServerHost, models.BusinessConfEmailServerPort, models.BusinessConfEmailSender, models.BusinessConfEmailSenderUserName, models.BusinessConfEmailSenderPassword, } for _, v := range checkArr { if confMap[v] == "" { err = fmt.Errorf("%s配置有误", v) return } } port, _ := strconv.Atoi(confMap[models.BusinessConfEmailServerPort]) if port <= 0 { port = 587 // 默认587端口 } m := gomail.NewMessage() m.SetHeader("From", confMap[models.BusinessConfEmailSender]) m.SetHeader("To", req.ToUser...) m.SetHeader("Subject", req.Title) m.SetBody("text/html", req.Content) d := gomail.NewDialer(confMap[models.BusinessConfEmailServerHost], port, confMap[models.BusinessConfEmailSenderUserName], confMap[models.BusinessConfEmailSenderPassword]) // 解决x509报错的问题。证书不通过。跳过证书验证 config := &tls.Config{ServerName: confMap[models.BusinessConfEmailServerHost], InsecureSkipVerify: true} d.TLSConfig = config if e = d.DialAndSend(m); e != nil { err = fmt.Errorf("邮件发送失败, Err: %s", e.Error()) return } success = true return }