最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

golang qq郵件發(fā)送驗證碼功能

 更新時間:2024年09月26日 15:16:20   作者:壯Sir不壯  
驗證碼在多個場景下發(fā)揮著重要作用,如注冊/登錄、短信接口保護、提交/投票、密碼找回和支付驗證等,以保障賬號安全和防止惡意操作,此外,文章還介紹了使用golang通過qq郵件發(fā)送驗證碼的實現(xiàn)過程,包括獲取授權(quán)碼、下載依賴包和編寫代碼,感興趣的朋友跟隨小編一起看看吧

驗證碼的使用場景

  • 注冊/登錄:使用驗證碼可以有效減少垃圾賬號注冊和惡意登錄;
  • 短信接口保護:高效減少防止短信接口被刷情況;
  • 提交/投票:有效減少惡意刷單、惡意提交、惡意投票等情況;
  • 密碼找回:用于找回密碼、修改手機等需要校驗用戶屬于本人操作的情況;
  • 支付驗證:用戶付款時驗證手機號,保障用戶資金安全。

例子:golang發(fā)送qq郵件

第一步:拿到授權(quán)碼

通過編碼的方式發(fā)送郵件,就是調(diào)用qq郵箱提供的接口來進行郵件的發(fā)送,我們在編寫該功能前,需要拿到qq郵箱的POP3/SMTP服務(wù)的授權(quán)碼。

我們開啟SMTP/IMAP服務(wù),生成授權(quán)碼,保存一下授權(quán)碼,后面要用到。

第二步:下載依賴包

 go get gopkg.in/gomail.v2

這個例子中我使用的是 gopkg.in/gomail.v2 包,發(fā)送郵件也可以用 github.com/jordan-wright/email 包。

第三步:寫代碼

注意要點:

驗證碼有效時間兩次發(fā)送驗證碼的間隔時間一個驗證碼只能使用一次

因為涉及到數(shù)據(jù)庫,所以我省略掉了這部分的代碼,讀者自行添加

將項目中的發(fā)送郵件的內(nèi)容抽取出來得到以下簡略代碼:

package main
import (
	"fmt"
	"gopkg.in/gomail.v2"
	"math/rand"
	"time"
)
// RandomGenerateVerificationCode 隨機生成長度為 l 的數(shù)字字母混合驗證碼
func RandomGenerateVerificationCode(l int) string {
	rand.Seed(time.Now().UnixNano())
	const letters = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
	b := make([]byte, l)
	for i := range b {
		b[i] = letters[rand.Intn(len(letters))]
	}
	return string(b)
}
// sendEmail from 給 to 發(fā)送指定的郵件消息
func sendEmail(from string, to string, subject string, body string, authorizeCode string) error {
	m := gomail.NewMessage()
	// 設(shè)置郵件消息的頭部字段(例如發(fā)件人、收件人、主題等)。
	m.SetHeader("From", from) // 發(fā)送人
	m.SetHeader("To", to)     //  接收人
	// m.SetAddressHeader("Cc", "xxx@qq.com", "xiaozhujiao") // 抄送人
	m.SetHeader("Subject", subject) // 主題
	m.SetBody("text/plain", body)   // 正文的內(nèi)容。text/plain表示純文本,"text/html" 表示 HTML 內(nèi)容。
	// m.Attach("myIpPic.png") // 附件
	// gomail.NewDialer():創(chuàng)建一個新的郵件撥號器對象,用于通過指定的 SMTP 服務(wù)器發(fā)送郵件。
	// 四個參數(shù):
	// host:SMTP 服務(wù)器的主機地址。例如 "smtp.qq.com"。
	// port:SMTP 服務(wù)器的端口號。例如 587。
	// username:SMTP 服務(wù)器的用戶名(通常是你的郵箱地址)。
	// password:SMTP 服務(wù)器的密碼(或者授權(quán)碼)。
	d := gomail.NewDialer("smtp.qq.com", 587, from, authorizeCode)
	// 通過撥號器對象發(fā)送指定的郵件消息
	if err := d.DialAndSend(m); err != nil {
		return err
	}
	return nil
}
func main() {
	l := 6
	code := RandomGenerateVerificationCode(l)
	from := "XXXXXXXXX@qq.com"
	to := "XXXXXXX@qq.com"
	subject := "驗證碼"
	body := fmt.Sprintf("你的驗證碼為 %s,有效時間為 %s\n", code, "5分鐘")
	authorizeCode := "XXXXXXXXXXXX" // 授權(quán)代碼
	err := sendEmail(from, to, subject, body, authorizeCode)
	if err != nil {
		fmt.Println("err = ", err)
		return
	}
	// 從數(shù)據(jù)庫中檢驗密碼(注意密碼加密)......
}

結(jié)果:

如果想要發(fā)送的結(jié)果更好看一點,我們可以添加html代碼,將main函數(shù)里面的body修改為:

body := fmt.Sprintf(`
		<!DOCTYPE html>
		<html>
		<head>
			<meta charset="UTF-8">
			<title>驗證碼</title>
			<style>
				body { font-family: Arial, sans-serif; }
				.container { padding: 20px; border: 1px solid #ddd; border-radius: 5px; }
				h1 { color: #333; }
				.code { font-size: 24px; font-weight: bold; color: #007bff; }
				.footer { margin-top: 20px; font-size: 12px; color: #888; }
			</style>
		</head>
		<body>
			<div class="container">
				<h1>你的驗證碼</h1>
				<p class="code">%s</p>
				<p>有效時間為 5 分鐘</p>
				<div class="footer">如果您沒有請求此驗證碼,請忽略此郵件。</div>
			</div>
		</body>
		</html>
	`, code)

再次運行代碼,結(jié)果如下:

當然除此之外還有行為驗證碼,圖片驗證碼,語音驗證碼...圖片如下:

到此這篇關(guān)于golang qq郵件發(fā)送驗證碼的文章就介紹到這了,更多相關(guān)golang qq郵件發(fā)送驗證碼內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • golang中日期操作之日期格式化及日期轉(zhuǎn)換

    golang中日期操作之日期格式化及日期轉(zhuǎn)換

    在編程中,程序員會經(jīng)常使用到日期相關(guān)操作,下面這篇文章主要給大家介紹了關(guān)于golang中日期操作之日期格式化及日期轉(zhuǎn)換的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-11-11
  • 一文解析 Golang sync.Once 用法及原理

    一文解析 Golang sync.Once 用法及原理

    這篇文章主要介紹了一文解析 Golang sync.Once 用法及原理,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-08-08
  • GoLang分布式鎖與snowflake雪花算法

    GoLang分布式鎖與snowflake雪花算法

    這篇文章主要介紹了GoLang分布式鎖與snowflake雪花算法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2022-12-12
  • Go之接口型函數(shù)用法

    Go之接口型函數(shù)用法

    這篇文章主要介紹了Go之接口型函數(shù)用法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • Golang使用gin框架實現(xiàn)一個完整的聊天室功能

    Golang使用gin框架實現(xiàn)一個完整的聊天室功能

    由于我們項目的需要,我就研究了一下關(guān)于websocket的相關(guān)內(nèi)容,去實現(xiàn)一個聊天室的功能,經(jīng)過幾天的探索,現(xiàn)在使用Gin框架實現(xiàn)了一個完整的聊天室+消息實時通知系統(tǒng),感興趣的小伙伴歡迎閱讀本文
    2023-08-08
  • Golang中interface{}轉(zhuǎn)為數(shù)組的操作

    Golang中interface{}轉(zhuǎn)為數(shù)組的操作

    這篇文章主要介紹了Golang中interface{}轉(zhuǎn)為數(shù)組的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • GoLang strings.Builder底層實現(xiàn)方法詳解

    GoLang strings.Builder底層實現(xiàn)方法詳解

    自從學(xué)習(xí)go一個月以來,我多少使用了一下strings.Builder,略有心得。你也許知道它,特別是你了解bytes.Buffer的話。所以我在此分享一下我的心得,并希望能對你有所幫助
    2022-10-10
  • Go reflect 反射原理示例詳解

    Go reflect 反射原理示例詳解

    這篇文章主要為大家介紹了Go reflect 反射原理示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11
  • 淺析Go語言中數(shù)組的這些細節(jié)

    淺析Go語言中數(shù)組的這些細節(jié)

    這篇文章主要為大家詳細介紹了Go語言中數(shù)組一些細節(jié)的相關(guān)資料,文中的示例代碼講解詳細,對我們學(xué)習(xí)Go語言有一定的幫助,需要的可以了解一下
    2022-11-11
  • 一文帶你熟悉Go語言中的for循環(huán)

    一文帶你熟悉Go語言中的for循環(huán)

    這篇文章主要和大家分享一下Go語言中for循環(huán)的定義與使用,文中的示例代碼講解詳細,對我們學(xué)習(xí)Go語言有一定的幫助,需要的可以參考一下
    2022-11-11

最新評論

阜平县| 谷城县| 保靖县| 珠海市| 祁连县| 金平| 广灵县| 象州县| 论坛| 竹溪县| 马公市| 富源县| 韩城市| 武城县| 闽侯县| 吴堡县| 儋州市| 灌云县| 喀喇| 察雅县| 丽水市| 称多县| 黄大仙区| 同仁县| 南安市| 西和县| 巩义市| 元谋县| 泗阳县| 潞西市| 大埔区| 和硕县| 溆浦县| 宜良县| 新营市| 德州市| 吉安县| 郴州市| 洪湖市| 湘阴县| 雷州市|