node.js模擬實(shí)現(xiàn)自動(dòng)發(fā)送郵件驗(yàn)證碼
作者:「零一」
引言
我們?cè)陂_(kāi)發(fā)網(wǎng)站時(shí),發(fā)送驗(yàn)證碼的功能是必定會(huì)遇到的,但發(fā)送短信驗(yàn)證碼是需要付費(fèi)的,那么郵箱驗(yàn)證碼就是一個(gè)白嫖的好辦法,今天就來(lái)教大家用node如何自動(dòng)發(fā)送郵箱驗(yàn)證碼。
接下來(lái)跟著我的步驟走,就能輕松完成郵箱的自動(dòng)發(fā)送
1. QQ郵箱設(shè)置
2. 安裝nodemailer
npm i -S nodemailer
3.配置信息
//1. 導(dǎo)入nodemailer const nodemailer = require('nodemailer') //2. 創(chuàng)建運(yùn)輸對(duì)象 let transporter = nodemailer.createTransport({ host: 'smtp.qq.com', secure: true, auth: { user: '5641132547@qq.com',//輸入你開(kāi)啟SMTP服務(wù)的QQ郵箱 pass: 'oxpbfzjtnurbjhei' //輸入我們剛才獲得的那串字符 } }) //3.配置發(fā)送郵件的信息 let mailOptions = { from: '5641132547@qq.com', // 發(fā)送者,也就是你的QQ郵箱 to: '12938203121@qq.com', // 接受者郵箱,可以同時(shí)發(fā)送多個(gè),以逗號(hào)隔開(kāi) subject: '測(cè)試發(fā)送郵件', // 郵件標(biāo)題 html: ` <p>這是我的測(cè)試郵件</p> <p>哈哈哈,收到請(qǐng)回復(fù)</p> ` //郵件內(nèi)容,以html的形式輸入,在郵件中會(huì)自動(dòng)解析顯示 }; //4.發(fā)送郵件 transporter.sendMail(mailOptions, function(err, data){ //回調(diào)函數(shù),用于判斷郵件是否發(fā)送成功 ... })
4.綜合
但我們會(huì)發(fā)現(xiàn),通常發(fā)送郵件是作為一個(gè)工具,目標(biāo)郵箱,也就是我們要發(fā)送過(guò)去的郵箱,通常是會(huì)變化的,那我們就需要把代碼封裝一下,接下來(lái)放一個(gè)完整的代碼。
/* 文件名: sendEmail.js */ const nodemailer = require('nodemailer') let transporter = nodemailer.createTransport({ host: 'smtp.qq.com', secure: true, auth: { user: '5641132547@qq.com', pass: 'asdasfsfwqqw' } }); module.exports = async function fn(email, code){ let status = null await new Promise((resolve, reject) => { transporter.sendMail({ from: '5641132547@qq.com', to: email, subject: '網(wǎng)站賬戶(hù)注冊(cè)驗(yàn)證碼', html: ` <p>網(wǎng)站賬戶(hù)注冊(cè)驗(yàn)證碼:</p> <span style="font-size: 18px; color: red">` + code + `</span>` }, function (err, info) { if (err) { status = 0 reject() } else { status = 1 resolve() } }); }) return status }
/* 文件名 main.js */ //導(dǎo)入我們sendEmail.js文件中導(dǎo)出的東西 const sendEmail = require('./sendEmail.js') //此時(shí)sendEmail是一個(gè)函數(shù),可傳參數(shù)有 email, code , 執(zhí)行完會(huì)返回一個(gè)status, 用于判斷是否發(fā)送成功 const result = sendEmail('190380192@qq.com', 568712) if(result === 0) { console.log('郵件發(fā)送失敗') } else if(result === 1) { console.log('郵件發(fā)送成功') }
最后我們就會(huì)收到這樣一封郵件啦
5.講解
對(duì)于上一部分對(duì)整個(gè)代碼的封裝當(dāng)中, 可能大家對(duì) async 和 await 這兩個(gè)關(guān)鍵詞有點(diǎn)陌生,這里我就給大家簡(jiǎn)單講解一下吧,如果想深入了解的,可以去查閱ES7的資料進(jìn)行了解。
首先, 我們的發(fā)送郵箱是屬于異步操作的。 async 是 用于表示函數(shù)中存在異步操作, 而 await 后面必須給嗯一個(gè)Promise , 則在這個(gè)函數(shù)內(nèi),必須要等到 await 后面的 Promise 內(nèi)的函數(shù)執(zhí)行完畢以后,才會(huì)繼續(xù)往下執(zhí)行。
結(jié)束語(yǔ)
好啦,node.js模擬發(fā)送驗(yàn)證碼的教程就講解到這啦,更多關(guān)于node.js自動(dòng)發(fā)送郵件驗(yàn)證碼的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!