如何利用node實(shí)現(xiàn)發(fā)送QQ郵箱驗(yàn)證碼
開通QQ郵箱POP3/SMTP服務(wù)
登錄QQ郵箱網(wǎng)址,進(jìn)入設(shè)置選擇賬戶tab頁翻到最低下開啟此服務(wù)
獲取qq郵箱授權(quán)碼
搭建node接口服務(wù)
思路
- 創(chuàng)建index.js文件
- 安裝connect、body-parser、nodemailer模塊
- 編寫引入connect框架
- 編寫引入bodyParser模塊
- 引入nodemailer模塊
開始安裝插件
使用cmd命令提示或者Git一次執(zhí)行以下安裝命令
開始編寫index.js文件程序
引入各個(gè)模塊
let connect = require('connect'), // 引入connect模塊 bodyParser = require('body-parser'), // 引入body-parser解析模塊 nodemailer = require('nodemailer'); // 引入nodemailer模塊
聲明并定于發(fā)送郵件函數(shù)
async function sendMail(text,receive) { let user = "703669046@qq.com";//自己的郵箱 let pass = "sfsdfsdfsggxcew"; //qq郵箱授權(quán)碼 let to = `${receive}@qq.com`; //對方的郵箱 let transporter = nodemailer.createTransport({ host: "smtp.qq.com", port: 587, secure: false, auth: { user: user, // 用戶賬號 pass: pass, //授權(quán)碼,通過QQ獲取 }, }); let info = await transporter.sendMail({ from: `測試node發(fā)送郵箱<${user}>驗(yàn)證碼`, // sender address to: `測試驗(yàn)證碼<${to}>`, // list of receivers subject: "測試驗(yàn)證碼", // Subject line text: text, // plain text body }); }
編寫connect、body-parser解析模塊
var app = connect() .use(bodyParser.json()) //JSON解析 .use(bodyParser.urlencoded({ extended: true })) //use()方法還有一個(gè)可選的路徑字符串,對傳入請求的URL的開始匹配。 //use方法來維護(hù)一個(gè)中間件隊(duì)列
跨域請求設(shè)置
.use(function (req, res, next) { //跨域處理 // Website you wish to allow to connect res.setHeader('Access-Control-Allow-Origin', '*'); //允許任何源 // Request methods you wish to allow res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE'); //允許任何方法 // Request headers you wish to allow res.setHeader('Access-Control-Allow-Headers', '*'); //允許任何類型 res.writeHead(200, { "Content-Type": "text/plain;charset=utf-8" }); //utf-8轉(zhuǎn)碼 next(); //next 方法就是一個(gè)遞歸調(diào)用 })
編寫發(fā)送qq郵箱驗(yàn)證碼接口
.use('/emails', function (req, res, next) { let qqEmail= req.body.email; var obj = { code:Math.ceil(Math.random()*1000) }; let text=`驗(yàn)證碼:${obj.code}.您正在使用登錄功能,驗(yàn)證碼提供他人可能導(dǎo)致賬號被盜,請勿轉(zhuǎn)發(fā)或泄漏` sendMail(text,qqEmail) res.end(JSON.stringify(obj)) next(); })
設(shè)置端口
在var app = connect()后面接上
.listen(3331);
啟動(dòng)node服務(wù)
在index.js當(dāng)前文件下開啟cmd命令提示符或者Git命令框執(zhí)行node index.js
命令
前端模塊
我是使用vue-cli+elementui
- html代碼部分
<template> <div> <el-form :model="ruleForm" status-icon ref="ruleForm" label-width="100px" class="demo-ruleForm" > <el-form-item label="QQ" prop="email"> <el-input type="email" v-model="ruleForm.email" autocomplete="off"></el-input> <el-button @click="handleCode">獲取驗(yàn)證碼</el-button> </el-form-item> <el-form-item label="驗(yàn)證碼" prop="code"> <el-input v-model.number="ruleForm.code"></el-input> </el-form-item> <el-form-item> <el-button type="primary" @click="submitForm('ruleForm')">提交</el-button> <el-button @click="resetForm('ruleForm')">重置</el-button> </el-form-item> </el-form> </div> </template>
效果圖
js請求代碼部分
import ajax from '../../utli/request' export const getCheckCode = param => ajax.$post('/emails', param || {});
js事件部分
<script> import {getCheckCode} from './api/form' export default { data() { return { ruleForm: { email: "", checkPass: "", code: "" }, }; }, methods: { submitForm(formName) { this.$refs[formName].validate(valid => { if (valid) { alert("submit!"); } else { console.log("error submit!!"); return false; } }); }, resetForm(formName) { this.$refs[formName].resetFields(); }, async handleCode(){ let params= { email:this.ruleForm.email } let res = await getCheckCode(params); if(res.state==200){ console.log(res) } } } }; </script>
發(fā)送qq驗(yàn)證給用戶
成功收到郵箱驗(yàn)證碼
總結(jié)
到此這篇關(guān)于如何利用node實(shí)現(xiàn)發(fā)送QQ郵箱驗(yàn)證碼的文章就介紹到這了,更多相關(guān)node發(fā)送QQ郵箱驗(yàn)證碼內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
NodeJS設(shè)計(jì)模式總結(jié)【單例模式,適配器模式,裝飾模式,觀察者模式】
這篇文章主要介紹了NodeJS設(shè)計(jì)模式,結(jié)合實(shí)例形式總結(jié)分析了nodejs單例模式,適配器模式,裝飾模式,觀察者模式的概念、原理與具體實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-09-09Node.js API詳解之 module模塊用法實(shí)例分析
這篇文章主要介紹了Node.js API詳解之 module模塊用法,結(jié)合實(shí)例形式分析了Node.js API中module模塊基本功能、原理、用法及操作注意事項(xiàng),需要的朋友可以參考下2020-05-05Node.js實(shí)現(xiàn)連接mysql數(shù)據(jù)庫功能示例
這篇文章主要介紹了Node.js實(shí)現(xiàn)連接mysql數(shù)據(jù)庫功能,簡單分析了nodejs連接數(shù)據(jù)庫的操作步驟與相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-09-09NodeJS和BootStrap分頁效果的實(shí)現(xiàn)代碼
這篇文章主要介紹了NodeJS和BootStrap分頁效果的實(shí)現(xiàn)代碼的相關(guān)資料,非常不錯(cuò)具有參考借鑒價(jià)值,需要的朋友可以參考下2016-11-11node.js express中app.param的用法詳解
express.js是nodejs的一個(gè)MVC開發(fā)框架,并且支持jade等多種模板。下面這篇文章主要給大家介紹了關(guān)于node.js express中app.param用法的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來一起看看吧。2017-07-07Node.js中MongoDB插入數(shù)據(jù)的實(shí)現(xiàn)方法
在Node.js中,可以使用MongoDB原生驅(qū)動(dòng)或Mongoose庫來連接和操作MongoDB數(shù)據(jù)庫,本文就來介紹一下Node.js中MongoDB插入數(shù)據(jù)的實(shí)現(xiàn)方法,感興趣的可以了解一下2023-12-12Node.js中的EventEmitter類使用小結(jié)
EventEmitter 是 Node.js 中的一個(gè)核心模塊,它提供了一種實(shí)現(xiàn)事件驅(qū)動(dòng)編程的機(jī)制,它是一個(gè)基于觀察者模式的類,用于在應(yīng)用程序中處理事件和觸發(fā)事件,這篇文章主要介紹了Node.js中的EventEmitter類介紹,需要的朋友可以參考下2023-12-12