45 lines
1.1 KiB
Go
45 lines
1.1 KiB
Go
package gomailer
|
|
|
|
import (
|
|
"crypto/tls"
|
|
"fmt"
|
|
|
|
"gopkg.in/gomail.v2"
|
|
)
|
|
|
|
// Mailer 邮件发送接口
|
|
type Mailer interface {
|
|
SendMail(to []string, subject string, body string) error
|
|
}
|
|
|
|
// MailerImpl 邮件发送实现
|
|
type MailerImpl struct {
|
|
message *gomail.Message
|
|
dialer *gomail.Dialer
|
|
}
|
|
|
|
// NewMailer 创建邮件发送实例
|
|
func NewMailer(host string, port int, username, password, nickname string) Mailer {
|
|
m := gomail.NewMessage()
|
|
m.SetHeader(`From`, m.FormatAddress(username, nickname))
|
|
// 下面的配置改成你自己的邮箱配置
|
|
d := gomail.NewDialer(host, port, username, password)
|
|
// 修改TLSconfig
|
|
d.TLSConfig = &tls.Config{InsecureSkipVerify: true}
|
|
return &MailerImpl{
|
|
message: m,
|
|
dialer: d,
|
|
}
|
|
}
|
|
|
|
// SendMail 发送邮件
|
|
func (m *MailerImpl) SendMail(to []string, subject string, body string) error {
|
|
m.message.SetHeader(`To`, to...)
|
|
m.message.SetHeader(`Subject`, subject)
|
|
m.message.SetBody(`text/html`, body)
|
|
if err := m.dialer.DialAndSend(m.message); err != nil {
|
|
return fmt.Errorf("send mail failed: %v", err)
|
|
}
|
|
return nil
|
|
}
|