email.go 2.0 KB
Newer Older
M
maplepie 已提交
1 2 3
package utils

import (
Mr.奇淼('s avatar
Mr.奇淼( 已提交
4
	"crypto/tls"
M
maplepie 已提交
5 6
	"fmt"
	"net/smtp"
Mr.奇淼('s avatar
Mr.奇淼( 已提交
7
	"strings"
M
maplepie 已提交
8

Mr.奇淼('s avatar
Mr.奇淼( 已提交
9
	"github.com/flipped-aurora/gin-vue-admin/plugin/email/global"
M
maplepie 已提交
10 11 12 13

	"github.com/jordan-wright/email"
)

14 15 16 17 18 19
//@author: [maplepie](https://github.com/maplepie)
//@function: Email
//@description: Email发送方法
//@param: subject string, body string
//@return: error

Mr.奇淼('s avatar
Mr.奇淼( 已提交
20 21
func Email(To, subject string, body string) error {
	to := strings.Split(To, ",")
M
maplepie 已提交
22 23 24
	return send(to, subject, body)
}

25 26 27 28 29 30
//@author: [SliverHorn](https://github.com/SliverHorn)
//@function: ErrorToEmail
//@description: 给email中间件错误发送邮件到指定邮箱
//@param: subject string, body string
//@return: error

31
func ErrorToEmail(subject string, body string) error {
Mr.奇淼('s avatar
Mr.奇淼( 已提交
32
	to := strings.Split(global.GlobalConfig.To, ",")
33 34 35 36 37 38
	if to[len(to)-1] == "" { // 判断切片的最后一个元素是否为空,为空则移除
		to = to[:len(to)-1]
	}
	return send(to, subject, body)
}

39 40 41 42 43 44
//@author: [maplepie](https://github.com/maplepie)
//@function: EmailTest
//@description: Email测试方法
//@param: subject string, body string
//@return: error

M
maplepie 已提交
45
func EmailTest(subject string, body string) error {
Mr.奇淼('s avatar
Mr.奇淼( 已提交
46
	to := []string{global.GlobalConfig.From}
M
maplepie 已提交
47 48 49
	return send(to, subject, body)
}

50 51 52 53 54 55
//@author: [maplepie](https://github.com/maplepie)
//@function: send
//@description: Email发送方法
//@param: subject string, body string
//@return: error

M
maplepie 已提交
56
func send(to []string, subject string, body string) error {
Mr.奇淼('s avatar
Mr.奇淼( 已提交
57 58 59 60 61 62
	from := global.GlobalConfig.From
	nickname := global.GlobalConfig.Nickname
	secret := global.GlobalConfig.Secret
	host := global.GlobalConfig.Host
	port := global.GlobalConfig.Port
	isSSL := global.GlobalConfig.IsSSL
M
maplepie 已提交
63 64 65

	auth := smtp.PlainAuth("", from, secret, host)
	e := email.NewEmail()
66 67
	if nickname != "" {
		e.From = fmt.Sprintf("%s <%s>", nickname, from)
Mr.奇淼('s avatar
Mr.奇淼( 已提交
68
	} else {
M
maplepie 已提交
69 70 71 72 73 74 75 76 77
		e.From = from
	}
	e.To = to
	e.Subject = subject
	e.HTML = []byte(body)
	var err error
	hostAddr := fmt.Sprintf("%s:%d", host, port)
	if isSSL {
		err = e.SendWithTLS(hostAddr, auth, &tls.Config{ServerName: host})
Mr.奇淼('s avatar
Mr.奇淼( 已提交
78
	} else {
M
maplepie 已提交
79 80 81
		err = e.Send(hostAddr, auth)
	}
	return err
Mr.奇淼('s avatar
Mr.奇淼( 已提交
82
}