gopkg.in/gomail.v2
package model

import (
	"fmt"
	"gopkg.in/gomail.v2"
	"net/smtp"
	"strings"
)

const (
	// 邮件服务器地址
	MailHost = "smtp.163.com"
	// 端口
	MailPort = 25
	// 发送邮件用户账号
	MailUser = "******@163.com"
	// 授权密码
	MailPwd = "********"
)

/*
   title 使用gomail发送邮件
   @param []string mailAddress 收件人邮箱
   @param string subject 邮件主题
   @param string body 邮件内容
   @return error
*/
func SendGoMail(mailAddress []string, subject string, body string) error {
	m := gomail.NewMessage()
	// 这种方式可以添加别名,即 nickname, 也可以直接用<code>m.SetHeader("From", MAIL_USER)</code>
	nickname := "gomail"
	m.SetHeader("From",nickname + "<" +MailUser+ ">")
	// 发送给多个用户
	m.SetHeader("To", mailAddress...)
	// 设置邮件主题
	m.SetHeader("Subject", subject)
	// 设置邮件正文
	m.SetBody("text/html", body)
	d := gomail.NewDialer(MailHost, MailPort, MailUser, MailPwd)
	// 发送邮件
	err := d.DialAndSend(m)
	return err
}

package model

import "testing"

func TestSendGoMail(t *testing.T) {
	type args struct {
		mailAddress []string
		subject     string
		body        string
	}
	tests := []struct {
		name    string
		args    args
		wantErr bool
	}{
		// TODO: Add test cases.
		{
			name: "01",
			args:
				args{
					subject:"您好,这是gomail-text测试邮件",
					mailAddress:[]string{"******@qq.com"},
					body:`
					您的服务存在异常,请查收!!!
				`} ,
			wantErr:false },
		{
			name: "02",
			args:
				args{
					subject:"您好,这是gomail-html测试邮件",
					mailAddress:[]string{"*****@qq.com"},
					body:`<html>
							<body>
								<h1>您的服务存在异常</h1>
							</body>
						</html>
				`} ,
			wantErr:false },
	}
	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			if err := SendGoMail(tt.args.mailAddress, tt.args.subject, tt.args.body); (err != nil) != tt.wantErr {
				t.Errorf("SendGoMail() error = %v, wantErr %v", err, tt.wantErr)
			}
		})
	}
}