邮件发送
package utils
import (
"github.com/go-gomail/gomail"
"strings"
)
type EmailParam struct {
// ServerHost 邮箱服务器地址,如腾讯企业邮箱为smtp.exmail.qq.com
ServerHost string
// ServerPort 邮箱服务器端口,如腾讯企业邮箱为465
ServerPort int
// FromEmail 发件人邮箱地址
FromEmail string
// FromPasswd 发件人邮箱密码(注意,这里是明文形式),TODO:如果设置成密文?
FromPasswd string
// Toers 接收者邮件,如有多个,则以英文逗号(“,”)隔开,不能为空
Toers string
// CCers 抄送者邮件,如有多个,则以英文逗号(“,”)隔开,可以为空
CCers string
}
// 全局变量,因为发件人账号、密码,需要在发送时才指定
// 注意,由于是小写,外面的包无法使用
var serverHost, fromEmail, fromPasswd string
var serverPort int
var m *gomail.Message
func InitEmail(ep *EmailParam) {
toers := []string{}
serverHost = ep.ServerHost
serverPort = ep.ServerPort
fromEmail = ep.FromEmail
fromPasswd = ep.FromPasswd
m = gomail.NewMessage()
if len(ep.Toers) == 0 {
return
}
for _, tmp := range strings.Split(ep.Toers, ",") {
toers = append(toers, strings.TrimSpace(tmp))
}
// 收件人可以有多个,故用此方式
//m.SetHeader("To", toers...)
m.SetHeader("To", toers...)
//抄送列表
if len(ep.CCers) != 0 {
for _, tmp := range strings.Split(ep.CCers, ",") {
toers = append(toers, strings.TrimSpace(tmp))
}
m.SetHeader("Cc", toers...)
}
// 发件人
// 第三个参数为发件人别名,如"李大锤",可以为空(此时则为邮箱名称)
m.SetAddressHeader("From", fromEmail, "天天生鲜邮件服务")
}
// SendEmail body支持html格式字符串
func SendEmail(subject, body string) (err error) {
// 主题
m.SetHeader("Subject", subject)
// 正文
m.SetBody("text/html", body)
d := gomail.NewPlainDialer(serverHost, serverPort, fromEmail, fromPasswd)
// 发送
err = d.DialAndSend(m)
if err != nil {
return err
}
return err
}
调用
package main
import (
"fmt"
"github.com/wu_jun_wei/fresh/utils"
"strconv"
)
func main() {
//发送邮件
//初始邮件化参数
ep := new(utils.EmailParam)
ep.ServerHost = "smtp.qq.com" //qq邮箱
ep.ServerPort = 587 //qq邮箱端口
ep.FromEmail = "342881834631@qq.com" //发送者邮箱
ep.FromPasswd = "ubswshpguwyjda1ff" //发送者邮箱密码 也是第三方授权密码
ep.Toers = "10603241241@qq.com" //接收者邮箱 设置多个接收者 可用 , 隔开 列如 "10603241241@qq.com,32145241@qq.com"
subject := "用户激活!" //邮箱件主题
//邮件内容
body := `<a href="http://192.168.0.157:8080/user/activate?id=` + strconv.Itoa(int(uid)) + `">立即激活</a>`
//初始化邮件系统
utils.InitEmail(ep)
//发送邮件
err := utils.SendEmail(subject, body)
if err != nil {
fmt.Println(err)
return
}
}
ep.FromPasswd = “ubswshpguwyjda1ff” //发送者邮箱密码 也是第三方授权密码
获取方式 (仅用于个人测试)
获取授权码详细链接:https://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=1001256