Node.js實(shí)現(xiàn)注冊(cè)郵箱激活功能的方法示例
在做自己的node項(xiàng)目極客教程時(shí),需要開(kāi)發(fā)一個(gè)注冊(cè)郵箱激活的功能,這個(gè)功能非常常見(jiàn),當(dāng)我們注冊(cè)一個(gè)賬號(hào)時(shí),肯定會(huì)有這步,下面看下如何實(shí)現(xiàn)這個(gè)功能。
1. 注冊(cè)郵箱
先注冊(cè)一個(gè)支持發(fā)送驗(yàn)證郵件的郵箱,我這里注冊(cè)的是網(wǎng)易的163郵箱,所以下面都是以163郵箱作為發(fā)件郵箱
注冊(cè)成功后進(jìn)行登錄,然后點(diǎn)擊導(dǎo)航欄的設(shè)置,選擇POP3/SMTP/IMAP,開(kāi)啟POP3/SMTP/IMAP服務(wù),設(shè)置授權(quán)碼就可以了。
2. 下載nodemailer插件
在命令行輸入:npm install --save nodemailer
3. 編寫(xiě)發(fā)送郵件代碼
3.1 對(duì)發(fā)送激活郵件代碼進(jìn)行封裝,然后導(dǎo)出:
//email.js // 引入 nodemailer const nodemailer = require('nodemailer'); // 創(chuàng)建一個(gè)SMTP客戶端配置 const config = { host: 'smtp.163.com', port: 465, auth: { user: 'xxxx@163.com', //剛才注冊(cè)的郵箱賬號(hào) pass: 'xxxxxx' //郵箱的授權(quán)碼,不是注冊(cè)時(shí)的密碼 } }; // 創(chuàng)建一個(gè)SMTP客戶端對(duì)象 const transporter = nodemailer.createTransport(config); // 發(fā)送郵件 module.exports = function (mail){ transporter.sendMail(mail, function(error, info){ if(error) { return console.log(error); } console.log('mail sent:', info.response); }); };
3.2 進(jìn)行測(cè)試:
//sendtest.js var send = require('./email.js'); // 創(chuàng)建一個(gè)郵件對(duì)象 var mail = { // 發(fā)件人 from: '極客教程 <xxxx@163.com>', // 主題 subject: '[極客教程]激活郵箱賬號(hào)', // 收件人 to: 'xxxx@qq.com', // 郵件內(nèi)容,HTML格式 text: `尊敬的${user.name},您好!點(diǎn)擊鏈接即可激活您的極客教程 網(wǎng)賬號(hào),http://localhost:3000/checkCode?name=${user.name}&code=${user.code}為保障您的帳號(hào)安全,請(qǐng)?jiān)?4小時(shí)內(nèi)點(diǎn)擊該鏈接,您也可以將鏈接復(fù)制到瀏覽器地址欄訪問(wèn)。 若如果您并未嘗試修改密碼,請(qǐng)忽略本郵件,由此給您帶來(lái)的不便請(qǐng)諒解。本郵件由系統(tǒng)自動(dòng)發(fā)出,請(qǐng)勿直接回復(fù)!` //接收激活請(qǐng)求的鏈接 }; send(mail);
成功就可以在測(cè)試的郵箱看到所發(fā)的信息。
4. 驗(yàn)證步驟
簡(jiǎn)單的講一下如何實(shí)現(xiàn)郵箱驗(yàn)證。
1 . 在自己定義的數(shù)據(jù)庫(kù)用戶數(shù)據(jù)結(jié)構(gòu)中一定要有激活碼、過(guò)期時(shí)間、是否已經(jīng)激活的字段,用于在激活時(shí)進(jìn)行判斷;
{ code: String, //激活碼,格式自己定義 date: Number, //過(guò)期日期,過(guò)期后不能激活 islive: Boolean //判斷是否激活 }
2 . 發(fā)送激活鏈接,其中包含用戶名和激活碼,如下面這樣:
// 創(chuàng)建一個(gè)郵件對(duì)象 var mail = { // 發(fā)件人 from: '極客教程 <xxxx@163.com>', // 主題 subject: '[極客教程]激活郵箱賬號(hào)', // 收件人 to: 'xxxx@qq.com', // 郵件內(nèi)容,HTML格式 text: `尊敬的${user.name},您好!點(diǎn)擊鏈接即可激活您的極客教程 網(wǎng)賬號(hào),http://localhost:3000/checkCode?name=${user.name}&code=${user.code}為保障您的帳號(hào)安全,請(qǐng)?jiān)?4小時(shí)內(nèi)點(diǎn)擊該鏈接,您也可以將鏈接復(fù)制到瀏覽器地址欄訪問(wèn)。 若如果您并未嘗試修改密碼,請(qǐng)忽略本郵件,由此給您帶來(lái)的不便請(qǐng)諒解。本郵件由系統(tǒng)自動(dòng)發(fā)出,請(qǐng)勿直接回復(fù)!` //接收激活請(qǐng)求的鏈接 }; send(mail);
3 . 響應(yīng)激活請(qǐng)求,根據(jù)激活鏈接的用戶名進(jìn)行查找,若用戶存在則判斷激活碼是否一致,并判斷激活碼是否過(guò)期,全部正確則改變激活狀態(tài),此時(shí)激活成功,如下代碼:
// check email code exports.checkCode = function (req, res){ var username = req.query.name; var code = req.query.code; User.findOne({name: username}, function (err, user){ if (user.code === code && (user.date - Date.now()) > 0){ User.update({name: username}, {islive: true}, function (err){ if (err){ res.json({error: true}) }else{ console.log(user) res.json({ok: true}) } }); }else{ res.json({ email: user.mail, failure: true }) } }); }
5. 遇到的問(wèn)題
開(kāi)發(fā)中遇到如下問(wèn)題:
{ [AuthError: Invalid login - 535 Error: authentication failed]
name: ‘AuthError',
data: ‘535 Error: authentication failed',
stage: ‘a(chǎn)uth' }
smtp服務(wù)器驗(yàn)證不通過(guò),因?yàn)榫W(wǎng)易的郵箱有個(gè)授權(quán)限制,一定要好好檢查你注冊(cè)郵箱時(shí)的賬號(hào)和授權(quán)碼。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
node.js中實(shí)現(xiàn)kindEditor圖片上傳功能的方法教程
最近在做一個(gè)類似于論壇的系統(tǒng),帖子需要進(jìn)行圖文并茂的顯示,所以用到了富文本編輯器:kindeditor,下面這篇文章主要給大家介紹了在node.js中實(shí)現(xiàn)kindEditor圖片上傳功能的方法教程,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-04-04詳解node Async/Await 更好的異步編程解決方案
這篇文章主要介紹了詳解Async/Await 更好的異步編程解決方案,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-05-05node.js程序作為服務(wù)并在windows下開(kāi)機(jī)自啟動(dòng)(用forever)
這篇文章主要介紹了node.js程序作為服務(wù)并在windows下開(kāi)機(jī)自啟動(dòng)的相關(guān)資料,因?yàn)閷?shí)現(xiàn)的功能比較簡(jiǎn)單,沒(méi)有選擇功能比較強(qiáng)大的pm2,文中選擇利用了forever,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-03-03Node.js中npx命令的使用方法及場(chǎng)景分析
NPM(Node Package Manager) 是Node.js提供的一個(gè)包管理器, 可以使用 NPM 來(lái)安裝 node.js 包 ,npm 是從5.2版開(kāi)始, 增加(自帶)了 npx 命令,本文給大家分享Node.js npx命令使用,需要的朋友一起看看吧2021-08-08詳解如何在NodeJS應(yīng)用程序中處理多個(gè)API請(qǐng)求
NodeJS默認(rèn)是異步的,這意味著它已經(jīng)能夠同時(shí)處理多個(gè)請(qǐng)求,但它只適用于I/O操作,如HTTP請(qǐng)求、文件系統(tǒng)操作、數(shù)據(jù)庫(kù)查詢、實(shí)時(shí)聊天應(yīng)用等,在處理CPU密集型任務(wù)時(shí),可能需要很長(zhǎng)時(shí)間,這就是為什么NodeJS提供了一些我們將在下面介紹的特定包2023-12-12從零開(kāi)始學(xué)習(xí)Node.js系列教程之基于connect和express框架的多頁(yè)面實(shí)現(xiàn)數(shù)學(xué)運(yùn)算示例
這篇文章主要介紹了Node.js基于connect和express框架的多頁(yè)面實(shí)現(xiàn)數(shù)學(xué)運(yùn)算,簡(jiǎn)單講述了connect和express框架的原理及數(shù)學(xué)運(yùn)算相關(guān)操作技巧,需要的朋友可以參考下2017-04-04深入剖析Express cookie-parser中間件實(shí)現(xiàn)示例
本篇文章主要介紹了深入剖析Express cookie-parser中間件實(shí)現(xiàn)示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-02-02