6、gomail

Gomail 是发送电子邮件的简单高效的包。它已经过充分测试和记录。Gomail 只能使用 SMTP 服务器发送电子邮件。但是该 API 灵活,可以轻松实现使用本地 Postfix,API 等发送电子邮件的其他方法。

gomail 包含的特性

安装

go get -u gopkg.in/gomail.v2

使用

package main

import (
	"crypto/tls"
	"fmt"

	"gopkg.in/gomail.v2"
)

type EmailConf struct {
	From     string
	Host     string
	Port     int
	UserName string
	PassWord string
}

var EmailSuper = EmailConf{
	From:     "杨刚的个人网站",
	Host:     "smtp.exmail.qq.com",
	Port:     465,
	UserName: "super@ygang.top",
	PassWord: "123456789",
}

func SendMail(ec EmailConf, subject, body string, to, cc, bcc, attaches []string) error {
	m := gomail.NewMessage()
	m.SetHeader("From", m.FormatAddress(ec.UserName, ec.From)) // 发送者
	m.SetHeader("To", to...)                                   // 接受者
	m.SetHeader("Cc", cc...)                                   // 抄送
	m.SetHeader("Bcc", bcc...)                                 // 暗送
	m.SetHeader("Subject", subject)                            // 邮件标题
	m.SetBody("text/html", body)                               // 发送邮件内容,text/plain为纯文本
	for _, att := range attaches {                             // 添加附件
		m.Attach(att)
	}
	/*
		实例化邮件发送器
		第一个参数为服务器地址,第二个为端口号,第三个为发送者邮箱号
		第四个如果是qq邮箱为授权玛而其他邮箱是密码
	*/
	d := gomail.NewDialer(ec.Host, ec.Port, ec.UserName, ec.PassWord)
	// 关闭SSL协议认证
	d.TLSConfig = &tls.Config{InsecureSkipVerify: true}

	if err := d.DialAndSend(m); err != nil {
		return err
	}
	return nil
}

func main() {
	to := []string{"123456789@qq.com"}
	attaches := []string{"./go.mod"}
	err := SendMail(EmailSuper, "nihao", "hello golang!", to, nil, nil, attaches)
	if err != nil {
		fmt.Println(err)
	}
}