Golang使用gomail发送邮件
1.确定发件方,是qq邮箱,还是163网易邮箱,或其他邮箱,不同服务器,不同端口配置
2.发件方要开启 POP3/SMTP 服务
1. 学习链接
学习链接 – 主看不同邮箱对应配置 – Golang发送邮件 — gomail
QQ 邮箱:
SMTP 服务器地址:smtp.qq.com(SSL协议端口:465/587, 非SSL协议端口:25)
163 邮箱:
SMTP 服务器地址:smtp.163.com(SSL协议端口:465/994,非SSL协议端口:25)
2. 开发步骤
① 导包,Terminal 内输入
go get gopkg.in/gomail.v
【
如果依赖没有加载完整,执行下列语句
go mod tidy
】
② config.yaml文件夹添加发件信息配置
# 邮件账号配置
# host与port是qq邮箱对应的
goemail:
host: "smtp.qq.com"
port: "587"
username: "1****7@qq.com"
password: "lmy******gh"
③ 添加工具类 goemail.go,我放在 utility / utils / goemail.go
package utils
import (
"context"
"github.com/gogf/gf/v2/frame/g"
"gopkg.in/gomail.v2"
"strconv"
)
var UGoemail = uGoemail{}
type uGoemail struct {}
/**
to 主送 机构联系邮箱
cc 抄送 创建人邮箱
subject 标题
content 内容
result 1成功 2失败
host 邮件服务器
port 端口号
username 邮箱
password 授权码
*/
func (e *uGoemail) SendMail(ctx context.Context,to, cc, subject, content string) (result int, err error) {
// Atoi相当于ParseInt(s,10,0),转换为int类型
host := g.Cfg().MustGet(ctx,"goemail.host").String()
port, err := strconv.Atoi(g.Cfg().MustGet(ctx,"goemail.port").String())
username := g.Cfg().MustGet(ctx,"goemail.username").String()
password := g.Cfg().MustGet(ctx,"goemail.password").String()
//发送邮件
m := gomail.NewMessage()
m.SetHeader("From", username) //发送邮箱
m.SetHeader("To", to) //主送
//m.SetHeader("To", "**1@163.com", "**2@qq.com") //发送多个人,逗号分隔
if cc != "" {
m.SetHeader("Cc", cc) //抄送
}
m.SetHeader("Subject", subject) //标题
m.SetBody("text/html", content) // 发送html格式邮件,发送的内容
d := gomail.NewDialer(host, port, username, password)
if err = d.DialAndSend(m); err != nil {
g.Log().Print(ctx,err)
return 2 , err
}
return 1 , nil
}
④ 需要的地方调用
//将账号密码发送到注册邮件
mail, _ := utils.UGoemail.SendMail(ctx, "15****18@163.com", "", "注册信息", "账号:**** 密码:*** , 不要随意转发他人!")
fmt.Println("发送邮件返回值:" , mail)
⑤ 邮件展示