package email import ( "scd_check_tools/conf" "scd_check_tools/logger" "encoding/json" "errors" "fmt" "io/ioutil" "os" "strconv" "strings" "gopkg.in/gomail.v2" ) var EmailConfig = new(emailConfig) //邮件配置 type emailConfig struct { Enable bool //是否启动邮件 SmtpHost string `json:"smtp_host"` SmtpPort string `json:"smtp_port"` Username string `json:"send_email"` //发送邮件邮箱 SendNickname string `json:"send_nickname"` //发送者名称 AuthCode string `json:"auth_code"` //发送授权码。需要在邮件平台上生成 } func (c *emailConfig) Load() { cnffile := "conf/email.cnf" logger.Logger.Println("加载Email配置文件:" + cnffile) fileHanlder, err := os.Open(cnffile) if err != nil { logger.Logger.Println("未发现邮件配置:conf/email.cnf") return } txt, err := ioutil.ReadAll(fileHanlder) if err != nil { logger.Logger.Error(err) return } defer fileHanlder.Close() txtStr := string(txt) if txtStr == "" { logger.Logger.Error(errors.New("邮件配置文件conf/email.cnf内容不正确")) return } err = json.Unmarshal(txt, &EmailConfig) if err != nil { logger.Logger.Error(err) return } if EmailConfig.SmtpHost == "" { logger.Logger.Error(errors.New("邮件配置文件conf/email.cnf内容不正确:smtp_host为空!")) return } if EmailConfig.SmtpPort == "" { logger.Logger.Error(errors.New("邮件配置文件conf/email.cnf内容不正确:smtp_port为空!")) return } _, err = strconv.Atoi(EmailConfig.SmtpPort) if err != nil { logger.Logger.Error(errors.New("邮件配置文件conf/email.cnf内容不正确:smtp_port不是正确的端口号!")) return } if EmailConfig.Username == "" { logger.Logger.Error(errors.New("邮件配置文件conf/email.cnf内容不正确:send_email为空!")) return } if EmailConfig.AuthCode == "" { logger.Logger.Error(errors.New("邮件配置文件conf/email.cnf内容不正确:auth_code为空!")) return } if EmailConfig.SendNickname == "" { EmailConfig.SendNickname = conf.GlobalConfig["appname"] } EmailConfig.Enable = true logger.Logger.Debug(fmt.Sprintf("邮件配置文件加载完成:%+v", EmailConfig)) } //邮件发送对象。 //暂不支持附件发送 type Send struct { //接收邮箱 ToEmail string //抄送邮箱列表 CcEmails []string //邮件标题 Subject string //邮件正文内容 Content string } //邮件发送 func (c *Send) To() error { return c.SendEmail(c.ToEmail, c.Subject, c.Content, c.CcEmails) } //邮件发送 func (c *Send) SendEmail(toEmail, subject, content string, cc ...[]string) error { if !EmailConfig.Enable { return nil } if toEmail == "" { return errors.New("接收邮箱不能为空!") } if subject == "" { subject = "无标题" } if content == "" { return errors.New("邮件内容不能为空!") } s := gomail.NewMessage() s.SetHeader("From", s.FormatAddress(EmailConfig.Username, EmailConfig.SendNickname)) s.SetHeader("To", toEmail) s.SetHeader("Subject", subject) if len(cc) > 0 { s.SetHeader("Cc", strings.Join(cc[0], ",")) } //附件 //s.Attach("") s.SetBody("text/html", content) port, _ := strconv.Atoi(EmailConfig.SmtpPort) s1 := gomail.NewDialer(EmailConfig.SmtpHost, port, EmailConfig.Username, EmailConfig.AuthCode) err := s1.DialAndSend(s) if err != nil { return err } return nil }