go實現發送郵件驗證碼


開啟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
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM