email.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. package services
  2. import (
  3. "eta/eta_api/models"
  4. "fmt"
  5. "gopkg.in/gomail.v2"
  6. "strconv"
  7. )
  8. type SendEmailReq struct {
  9. Title string `description:"标题"`
  10. Content string `description:"内容"`
  11. ToUser []string `description:"收信人邮箱"`
  12. }
  13. func SendEmail(req SendEmailReq) (success bool, err error) {
  14. if req.Title == "" {
  15. err = fmt.Errorf("邮件主题不可为空")
  16. return
  17. }
  18. if req.Content == "" {
  19. err = fmt.Errorf("邮件内容不可为空")
  20. return
  21. }
  22. if len(req.ToUser) <= 0 {
  23. err = fmt.Errorf("收信人不可为空")
  24. return
  25. }
  26. // 邮箱配置
  27. confMap, e := models.GetBusinessConf()
  28. if e != nil {
  29. err = fmt.Errorf("GetBusinessConf err: %s", e.Error())
  30. return
  31. }
  32. checkArr := []string{
  33. models.BusinessConfEmailServerHost, models.BusinessConfEmailServerPort,
  34. models.BusinessConfEmailSender, models.BusinessConfEmailSenderUserName,
  35. models.BusinessConfEmailSenderPassword,
  36. }
  37. for _, v := range checkArr {
  38. if confMap[v] == "" {
  39. err = fmt.Errorf("%s配置有误", v)
  40. return
  41. }
  42. }
  43. port, _ := strconv.Atoi(confMap[models.BusinessConfEmailServerPort])
  44. if port <= 0 {
  45. port = 587 // 默认587端口
  46. }
  47. m := gomail.NewMessage()
  48. m.SetHeader("From", confMap[models.BusinessConfEmailSender])
  49. m.SetHeader("To", req.ToUser...)
  50. m.SetHeader("Subject", req.Title)
  51. m.SetBody("text/html", req.Content)
  52. d := gomail.NewDialer(confMap[models.BusinessConfEmailServerHost], port, confMap[models.BusinessConfEmailSenderUserName], confMap[models.BusinessConfEmailSenderPassword])
  53. if e = d.DialAndSend(m); e != nil {
  54. err = fmt.Errorf("邮件发送失败, Err: %s", e.Error())
  55. return
  56. }
  57. success = true
  58. return
  59. }