欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

驗(yàn)證碼的使用場(chǎng)景

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

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

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

通過(guò)編碼的方式發(fā)送郵件,就是調(diào)用qq郵箱提供的接口來(lái)進(jìn)行郵件的發(fā)送,我們?cè)诰帉?xiě)該功能前,需要拿到qq郵箱的POP3/SMTP服務(wù)的授權(quán)碼。

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

第二步:下載依賴包

 go get gopkg.in/gomail.v2

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

第三步:寫(xiě)代碼

注意要點(diǎn):

驗(yàn)證碼有效時(shí)間兩次發(fā)送驗(yàn)證碼的間隔時(shí)間一個(gè)驗(yàn)證碼只能使用一次

因?yàn)樯婕暗綌?shù)據(jù)庫(kù),所以我省略掉了這部分的代碼,讀者自行添加

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

package main
import (
	"fmt"
	"gopkg.in/gomail.v2"
	"math/rand"
	"time"
)
// RandomGenerateVerificationCode 隨機(jī)生成長(zhǎng)度為 l 的數(shù)字字母混合驗(yàn)證碼
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)建一個(gè)新的郵件撥號(hào)器對(duì)象,用于通過(guò)指定的 SMTP 服務(wù)器發(fā)送郵件。
	// 四個(gè)參數(shù):
	// host:SMTP 服務(wù)器的主機(jī)地址。例如 "smtp.qq.com"。
	// port:SMTP 服務(wù)器的端口號(hào)。例如 587。
	// username:SMTP 服務(wù)器的用戶名(通常是你的郵箱地址)。
	// password:SMTP 服務(wù)器的密碼(或者授權(quán)碼)。
	d := gomail.NewDialer("smtp.qq.com", 587, from, authorizeCode)
	// 通過(guò)撥號(hào)器對(duì)象發(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 := "驗(yàn)證碼"
	body := fmt.Sprintf("你的驗(yàn)證碼為 %s,有效時(shí)間為 %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ù)庫(kù)中檢驗(yàn)密碼(注意密碼加密)......
}

結(jié)果:

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

body := fmt.Sprintf(`
		<!DOCTYPE html>
		<html>
		<head>
			<meta charset="UTF-8">
			<title>驗(yàn)證碼</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>你的驗(yàn)證碼</h1>
				<p class="code">%s</p>
				<p>有效時(shí)間為 5 分鐘</p>
				<div class="footer">如果您沒(méi)有請(qǐng)求此驗(yàn)證碼,請(qǐng)忽略此郵件。</div>
			</div>
		</body>
		</html>
	`, code)

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

當(dāng)然除此之外還有行為驗(yàn)證碼,圖片驗(yàn)證碼,語(yǔ)音驗(yàn)證碼...圖片如下:

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

相關(guān)文章

  • Go語(yǔ)言實(shí)現(xiàn)UDP協(xié)議及TCP通訊

    Go語(yǔ)言實(shí)現(xiàn)UDP協(xié)議及TCP通訊

    這篇文章介紹了Go語(yǔ)言實(shí)現(xiàn)UDP協(xié)議及TCP通訊的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • golang替換無(wú)法顯示的特殊字符(\u0000,?\000,?^@)

    golang替換無(wú)法顯示的特殊字符(\u0000,?\000,?^@)

    這篇文章主要介紹了golang替換無(wú)法顯示的特殊字符,包括的字符有\(zhòng)u0000,?\000,?^@等,下文詳細(xì)資料,需要的小伙伴可以參考一下
    2022-04-04
  • Go操作mongodb數(shù)據(jù)庫(kù)方法示例

    Go操作mongodb數(shù)據(jù)庫(kù)方法示例

    這篇文章主要為大家介紹了Go操作mongodb數(shù)據(jù)庫(kù)方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • Go語(yǔ)言二維數(shù)組的傳參方式

    Go語(yǔ)言二維數(shù)組的傳參方式

    這篇文章主要介紹了Go語(yǔ)言二維數(shù)組的傳參方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-04-04
  • Go語(yǔ)言反射reflect.Value實(shí)現(xiàn)方法的調(diào)用

    Go語(yǔ)言反射reflect.Value實(shí)現(xiàn)方法的調(diào)用

    本文主要介紹了Go語(yǔ)言反射reflect.Value實(shí)現(xiàn)方法的調(diào)用,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • 使用Go語(yǔ)言編寫(xiě)一個(gè)NTP服務(wù)器的流程步驟

    使用Go語(yǔ)言編寫(xiě)一個(gè)NTP服務(wù)器的流程步驟

    NTP服務(wù)器【Network?Time?Protocol(NTP)】是用來(lái)使計(jì)算機(jī)時(shí)間同步化的一種協(xié)議,為了確保封閉局域網(wǎng)內(nèi)多個(gè)服務(wù)器的時(shí)間同步,我們計(jì)劃部署一個(gè)網(wǎng)絡(luò)時(shí)間同步服務(wù)器(NTP服務(wù)器),本文給大家介紹了使用Go語(yǔ)言編寫(xiě)一個(gè)NTP服務(wù)器的流程步驟,需要的朋友可以參考下
    2024-11-11
  • goland中使用leetcode插件實(shí)現(xiàn)

    goland中使用leetcode插件實(shí)現(xiàn)

    本文主要介紹了goland中使用leetcode插件實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • 關(guān)于Golang標(biāo)準(zhǔn)庫(kù)flag的全面講解

    關(guān)于Golang標(biāo)準(zhǔn)庫(kù)flag的全面講解

    這篇文章主要介紹了關(guān)于Golang標(biāo)準(zhǔn)庫(kù)flag的全面講解,這個(gè)庫(kù)的代碼量只有1000行左右,卻提供了非常完善的命令行參數(shù)解析功能,更多相關(guān)內(nèi)容需要的朋友可以參考一下
    2022-09-09
  • 詳解如何在Go項(xiàng)目中輸出版本信息

    詳解如何在Go項(xiàng)目中輸出版本信息

    這篇文章主要介紹了詳解如何在Go項(xiàng)目中輸出版本信息,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • Golang使用archive/zip包實(shí)現(xiàn)ZIP壓縮與解壓

    Golang使用archive/zip包實(shí)現(xiàn)ZIP壓縮與解壓

    Golang?中的?archive/zip?包用于處理?ZIP?格式的壓縮文件,提供了一系列用于創(chuàng)建、讀取和解壓縮?ZIP?格式文件的函數(shù)和類型,使用起來(lái)非常方便,下面就跟隨小編一起了解一下具體使用方法吧
    2023-08-08

最新評(píng)論