日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Express使用nodemailer完成邮箱验证功能详细流程(含封装,可作自定义模块)

發布時間:2025/3/17 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Express使用nodemailer完成邮箱验证功能详细流程(含封装,可作自定义模块) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Express使用nodemailer完成郵箱驗證功能詳細流程(含封裝,可作自定義模塊)

記錄大創項目中,在express中使用第三方模塊nodemailer完成郵箱驗證功能,含客戶端請求驗證郵件和服務端發送驗證碼和判斷驗證碼。

1. 安裝和引入模塊

安裝

npm i nodemailer --save

引入

我們先新建一個 mail.js 文件作為包含發送郵件功能的模塊。

/* mail.js文件,發送郵件模塊*/ const nodemailer = require('nodemailer'); module.exports = { sendMail }; //最后暴露一個sendMail方法,之后會進行這個方法的封裝

在其他的路由文件中:

const express = require("express"); const mail = require("./mail"); //引入我們的自定義模塊let app = express.Router(); //路由

2. 封裝自定義模塊

準備:

使用 nodemailer 這個模塊需要我們有一個能發送郵件的郵箱,使用QQ郵箱。此外,需要我們到郵箱中開啟 POP3/SMTP 服務,開啟方法如下:

登錄郵箱–> 郵箱首頁上方點擊“設置” --> 郵箱設置中點擊“賬戶” --> 下滑找到“開啟服務” -->點擊POP3/SMTP服務,之后按提示完成開啟。

模塊中配置郵箱:

/* mail.js文件,發送郵件模塊*/ //配置郵箱 let transporter = nodemailer.createTransport({host: "smtp.qq.com",secureConnection: true, // use SSLport: 465,secure: true, // secure:true for port 465, secure:false for port 587auth: {user: "XXXXXXX@qq.com", //其他的不要動,更改郵箱pass: "XXXXXX", // QQ郵箱需要使用的授權碼}, });

封裝發送郵件方法sendMail()

//參數:mail:需要發送的郵件地址;code:驗證碼 function sendMail(mail, code) {// 設置郵件內容(誰發送什么給誰)let mailOptions = {from: '" XXX " <XXXXXX@qq.com>', // 發件人to: mail, // 收件人subject: "郵箱驗證", // 主題text: `您正在嘗試修改密碼,您的驗證碼是 ${code},有效期5分鐘。`, // 直接發送文本//html: "<b>驗證功能</b>", // 也可以發送html格式文本// 下面是發送附件,不需要就注釋掉/* attachments: [{filename: "test.md",path: "./test.md",},{filename: "content",content: "發送內容",},], */};//這里返回一個異步操作return new Promise((resolve, reject) => {// 使用先前創建的傳輸器的 sendMail 方法傳遞消息對象transporter.sendMail(mailOptions, (error, info) => {if(error) reject(); else {console.log(`Message: ${info.messageId}`);console.log(`sent: ${info.response}`);resolve();}});}); }

完整的自定義模塊:

/* mail.js文件,發送郵件模塊*/ const nodemailer = require('nodemailer'); /* mail.js文件,發送郵件模塊*/ //配置郵箱 let transporter = nodemailer.createTransport({host: "smtp.qq.com",secureConnection: true, // use SSLport: 465,secure: true, // secure:true for port 465, secure:false for port 587auth: {user: "XXXXXXX@qq.com", //其他的不要動,更改郵箱pass: "XXXXXX", // QQ郵箱需要使用的授權碼}, });//參數:mail:需要發送的郵件地址;code:驗證碼 function sendMail(mail, code) {// 設置郵件內容(誰發送什么給誰)let mailOptions = {from: '" XXX " <XXXXXX@qq.com>', // 發件人to: mail, // 收件人subject: "郵箱驗證", // 主題text: `您正在嘗試修改密碼,您的驗證碼是 ${code},有效期5分鐘。`, // 直接發送文本//html: "<b>驗證功能</b>", // 也可以發送html格式文本// 下面是發送附件,不需要就注釋掉/* attachments: [{filename: "test.md",path: "./test.md",},{filename: "content",content: "發送內容",},], */};//這里返回一個異步操作return new Promise((resolve, reject) => {// 使用先前創建的傳輸器的 sendMail 方法傳遞消息對象transporter.sendMail(mailOptions, (error, info) => {if(error) reject(); else {console.log(`Message: ${info.messageId}`);console.log(`sent: ${info.response}`);resolve();}});}); }module.exports = { sendMail }; //最后暴露一個sendMail方法,之后會進行這個方法的封裝

3. 客戶端請求獲取驗證碼

這里直接使用JQ的ajax發送請求了:

$.ajax({headers: {email: 'xxxxx@qq.com', //這里直接在請求頭中傳遞郵箱地址了},url: "/get_verifyCode",type: "post",contentType: "application/json",success: function (data) {alert(data.msg);return;},error: function (err) {console.log(err);},});

4. 服務端發送驗證碼

/* 路由文件 */ //發送驗證碼 app.post("/get_verifyCode", (req, res) => {//請求頭附帶的郵箱地址const email = req.headers.email; //隨機生成一個驗證碼let code = parseInt(Math.random() * 10000);//使用mail模塊中的sendMail方法mail.sendMail(email, code).then(() => {res.send({ err: 0, msg: "驗證碼已發送" });}).catch(() => {res.send({ err: 1, msg: "驗證碼發送失敗" });}); });

到此為止,服務端已經可以成功發送驗證碼郵件了。


5. 服務端對驗證碼的驗證

前面是在發送驗證碼功能的路由中隨機生成的驗證碼,那么如何在客戶端發來的驗證請求中驗證我們之前生成的驗證碼呢?

我們需要一個全局變量,保存之前生成的驗證碼,并對應當時發送驗證碼的郵箱地址。發送驗證碼功能代碼改動如下:

/* 路由文件 */let verify_codes = {}; //保存驗證碼,用于后續驗證//發送驗證碼 app.post("/get_verifyCode", (req, res) => {const email = req.headers.email; let code = parseInt(Math.random() * 10000);//保存驗證碼verify_codes[email] = code; //這樣對象中就保存了一個 {郵箱:驗證碼} 格式的屬性console.log(verify_codes);mail.sendMail(email, code).then(() => {res.send({ err: 0, msg: "驗證碼已發送" });}).catch(() => {res.send({ err: 1, msg: "驗證碼發送失敗" });}); });

之后我們只需要判斷用戶傳來的驗證碼參數 code 和郵箱參數 email 和服務端保存的對象變量是否一致:

if( code === verify_codes[email] ) { //執行代碼 }

至此,郵箱驗證功能全部完成。

總結

以上是生活随笔為你收集整理的Express使用nodemailer完成邮箱验证功能详细流程(含封装,可作自定义模块)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。