You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
111 lines
3.0 KiB
111 lines
3.0 KiB
package mail |
|
|
|
import ( |
|
"bytes" |
|
"fmt" |
|
"text/template" |
|
|
|
"go-common/app/tool/saga/conf" |
|
"go-common/app/tool/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 |
|
}
|
|
|