113 lines
3.0 KiB
Go
113 lines
3.0 KiB
Go
package mail
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"text/template"
|
|
|
|
"go-common/app/admin/ep/saga/conf"
|
|
"go-common/app/admin/ep/saga/model"
|
|
"go-common/library/log"
|
|
|
|
"github.com/pkg/errors"
|
|
|
|
gomail "gopkg.in/gomail.v2"
|
|
)
|
|
|
|
// SendMail2 ...
|
|
func SendMail2(addr *model.MailAddress, subject string, data string) (err error) {
|
|
var (
|
|
msg = gomail.NewMessage()
|
|
)
|
|
msg.SetAddressHeader("From", conf.Conf.Property.Mail.Address, conf.Conf.Property.Mail.Name)
|
|
msg.SetHeader("To", msg.FormatAddress(addr.Address, addr.Name))
|
|
msg.SetHeader("Subject", subject)
|
|
msg.SetBody("text/plain", data)
|
|
d := gomail.NewDialer(
|
|
conf.Conf.Property.Mail.Host,
|
|
conf.Conf.Property.Mail.Port,
|
|
conf.Conf.Property.Mail.Address,
|
|
conf.Conf.Property.Mail.Pwd,
|
|
)
|
|
if err = d.DialAndSend(msg); err != nil {
|
|
err = errors.WithMessage(err, fmt.Sprintf("Send mail (%+v,%s,%s) failed", addr, subject, data))
|
|
return
|
|
}
|
|
log.Info("Send mail (%+v,%s,%s) success", addr, subject, data)
|
|
return
|
|
}
|
|
|
|
// SendMail send mail
|
|
func SendMail(m *model.Mail, data *model.MailData) (err error) {
|
|
var (
|
|
toUsers []string
|
|
msg = gomail.NewMessage()
|
|
buf = &bytes.Buffer{}
|
|
)
|
|
msg.SetAddressHeader("From", conf.Conf.Property.Mail.Address, conf.Conf.Property.Mail.Name) // 发件人
|
|
for _, ads := range m.ToAddress {
|
|
toUsers = append(toUsers, msg.FormatAddress(ads.Address, ads.Name))
|
|
}
|
|
t := template.New("MR Mail")
|
|
if t, err = t.Parse(mailTPL); err != nil {
|
|
log.Error("tpl.Parse(%s) error(%+v)", mailTPL, errors.WithStack(err))
|
|
return
|
|
}
|
|
err = t.Execute(buf, data)
|
|
if err != nil {
|
|
log.Error("t.Execute error(%+v)", errors.WithStack(err))
|
|
return
|
|
}
|
|
msg.SetHeader("To", toUsers...)
|
|
msg.SetHeader("Subject", m.Subject) // 主题
|
|
msg.SetBody("text/html", buf.String()) // 正文
|
|
d := gomail.NewDialer(
|
|
conf.Conf.Property.Mail.Host,
|
|
conf.Conf.Property.Mail.Port,
|
|
conf.Conf.Property.Mail.Address,
|
|
conf.Conf.Property.Mail.Pwd,
|
|
)
|
|
if err = d.DialAndSend(msg); err != nil {
|
|
log.Error("Send mail Fail(%v) diff(%s)", msg, err)
|
|
return
|
|
}
|
|
return
|
|
}
|
|
|
|
// SendMail3 SendMail all parameter
|
|
func SendMail3(from string, sender string, senderPwd string, m *model.Mail, data *model.MailData) (err error) {
|
|
var (
|
|
toUsers []string
|
|
msg = gomail.NewMessage()
|
|
buf = &bytes.Buffer{}
|
|
)
|
|
msg.SetAddressHeader("From", from, sender) // 发件人
|
|
for _, ads := range m.ToAddress {
|
|
toUsers = append(toUsers, msg.FormatAddress(ads.Address, ads.Name))
|
|
}
|
|
t := template.New("MR Mail")
|
|
if t, err = t.Parse(mailTPL3); err != nil {
|
|
log.Error("tpl.Parse(%s) error(%+v)", mailTPL3, errors.WithStack(err))
|
|
return
|
|
}
|
|
err = t.Execute(buf, data)
|
|
if err != nil {
|
|
log.Error("t.Execute error(%+v)", errors.WithStack(err))
|
|
return
|
|
}
|
|
msg.SetHeader("To", toUsers...)
|
|
msg.SetHeader("Subject", m.Subject) // 主题
|
|
msg.SetBody("text/html", buf.String()) // 正文
|
|
d := gomail.NewDialer(
|
|
"smtp.exmail.qq.com",
|
|
465,
|
|
from,
|
|
senderPwd,
|
|
)
|
|
if err = d.DialAndSend(msg); err != nil {
|
|
log.Error("Send mail Fail(%v) diff(%s)", msg, err)
|
|
return
|
|
}
|
|
return
|
|
}
|