開啟SMTP服務:
QQ郵箱參考下面連接:
QQ郵箱如何開通SMTP服務
https://jingyan.baidu.com/article/00a07f389eea7dc3d128dc36.html
發郵件測試
package test
import (
"core/define"
"crypto/tls"
"net/smtp"
"testing"
"github.com/jordan-wright/email"
)
func TestSendMail(t *testing.T) {
e := email.NewEmail()
mailUserName := "whm2416@163.com" //郵箱賬號
mailPassword := define.MailPassword //郵箱授權碼
code := "12345678" //發送的驗證碼
Subject := "驗證碼發送測試" //發送的主題
e.From = "Get <whm2416@163.com>"
e.To = []string{"228654416@qq.com"}
e.Subject = Subject
e.HTML = []byte("你的驗證碼為:<h1>" + code + "</h1>")
err := e.SendWithTLS("smtp.163.com:465", smtp.PlainAuth("", mailUserName, mailPassword, "smtp.163.com"),
&tls.Config{InsecureSkipVerify: true, ServerName: "smtp.163.com"})
if err != nil {
t.Fatal(err)
}
}
func TestSendMailQQ(t *testing.T) {
mailUserName := "whm2416@qq.com" //郵箱賬號
mailPassword := define.MailPassword //郵箱授權碼
addr := "smtp.qq.com:465" //TLS地址
host := "smtp.qq.com" //郵件服務器地址
code := "12345678" //發送的驗證碼
Subject := "驗證碼發送測試" //發送的主題
e := email.NewEmail()
e.From = "Get <whm2416@qq.com>"
e.To = []string{"228654416@qq.com"}
e.Subject = Subject
e.HTML = []byte("你的驗證碼為:<h1>" + code + "</h1>")
err := e.SendWithTLS(addr, smtp.PlainAuth("", mailUserName, mailPassword, host),
&tls.Config{InsecureSkipVerify: true, ServerName: "smtp.qq.com"})
if err != nil {
t.Fatal(err)
}
}
效果:
業務實現
邏輯層:
func (l *MailCodeSendRegisterLogic) MailCodeSendRegister(req *types.MailCodeSendRequest) (resp *types.MailCodeSendReply, err error) {
// 該郵箱未被注冊
cnt, err := models.Engine.Where("email = ?", req.Email).Count(new(models.UserBasic))
if err != nil {
return
}
if cnt > 0 {
err = errors.New("該郵箱已被注冊")
return
}
// 獲取驗證碼
code := helper.RandCode()
// 存儲驗證碼
models.RDB.Set(l.ctx, req.Email, code, time.Second*time.Duration(define.CodeExpire))
// 發送驗證碼
err = helper.MailSendCode(req.Email, code)
return
}
封裝包:
// MailSendCode
// 郵箱驗證碼發送
func MailSendCode(mail, code string) error {
e := email.NewEmail()
e.From = "Get <getcharzhaopan@163.com>"
e.To = []string{"getcharzp@qq.com"}
e.Subject = "驗證碼發送測試"
e.HTML = []byte("你的驗證碼為:<h1>" + code + "</h1>")
err := e.SendWithTLS("smtp.163.com:465", smtp.PlainAuth("", "getcharzhaopan@163.com", define.MailPassword, "smtp.163.com"),
&tls.Config{InsecureSkipVerify: true, ServerName: "smtp.163.com"})
if err != nil {
return err
}
return nil
}
func RandCode() string {
s := "1234567890"
code := ""
rand.Seed(time.Now().UnixNano())
for i := 0; i < define.CodeLength; i++ {
code += string(s[rand.Intn(len(s))])
}
return code
}