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