node 使用 nodemailer工具發(fā)送驗證碼到郵箱
最近閑著沒事,我就在練習(xí)使用node和mysql編寫接口,計劃寫一個完整的vue系統(tǒng)。剛剛處理完注冊登錄的功能,我決定加入驗證碼驗證。在思考是否使用手機號或郵箱驗證時,最終我選擇了將驗證碼發(fā)送到郵箱。于是我發(fā)現(xiàn)了一個非常有用的工具——nodemailer。
功能
- 零依賴性的單個模塊–由于沒有死角,因此代碼易于審核
- 高度重視安全性
- Unicode 支持使用任何字符,包括表情符號
- Windows 支持 –您可以使用 npm在 Windows 上,就像其他模塊一樣,沒有編譯的依賴項。從 Azure 或 Windows 盒子免費使用它
- 使用 HTML 內(nèi)容以及純文本替代
- 加 附件 到消息
- 嵌入式的 HTML 內(nèi)容的圖像附件–您的設(shè)計不會被阻塞
- 使用 TLS / STARTTLS 的安全電子郵件傳遞
- 不同 運輸方式 除了內(nèi)置 SMTP 支持
- 與簽署消息 DKIM
- 自訂 插件支持 用于處理消息
- OAuth2 認證方式
- 代理人 用于 SMTP 連接
- ES6 碼 - 沒有更多的無意內(nèi)存泄漏,由于吊裝 VAR 的
- 來自的自動生成的電子郵件測試帳戶電子郵件
1.先下nodemailer載依賴
npm i nodemailer 或 yarn add nodemailer
2.在utils文件下創(chuàng)建sendEmail.js,引入nodemailer模塊
const nodemailer = require('nodemailer')
創(chuàng)建一個SMTP客戶端配置對象:
nodemailer.createTransport({ host: "smtp.qq.com", // 郵箱服務(wù)的host,我使用的是QQ郵箱 port: 465, secure: true, auth: { user: 'XXX@qq.com', 發(fā)送郵件的郵箱 pass: '郵箱授權(quán)碼' } });
郵箱授權(quán)碼獲?。?/p>
登錄qq郵箱-》點擊設(shè)置,找到賬戶,下滑找到POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服務(wù),
開啟服務(wù),按照指示即可獲取。
設(shè)置收件人:
mailOptions = { from: '來自XX<XXX@qq.com>', //發(fā)送郵件的郵箱信息 to: toEmail, // 發(fā)送給誰的郵箱 subject: "驗證碼", // 標(biāo)題 // text: `你的驗證碼為XXX,3分鐘內(nèi)有效,請務(wù)透漏給他人`,//發(fā)送文本 html: "你的驗證碼為<b style='color:skybkue;'>" + XXX + "</b>,3分鐘內(nèi)有效,請務(wù)透漏給他人!", }
調(diào)用transporter.sendMail發(fā)送郵件:
transporter.sendMail(mailOptions)
完整代碼
sendEmail.js =>
const nodemailer = require('nodemailer') const sendEmail = (toEmail, sendText, host = 'smtp.qq.com') => { return new Promise((resolve, reject) => { let transporter = nodemailer.createTransport({ host: host, port: 465, // 開啟安全連接,這個開不開都可以,對安全性有要求的話,最好開啟 secureConnection: true, auth: { user: 'XXX@qq.com', pass: '郵箱授權(quán)碼', }, tls: { rejectUnauthorized: false, // 拒絕認證就行了, 不然會報證書問題 }, }); const mailOptions = { from: '來自XXX<XXX@qq.com>', to: toEmail, subject: "驗證碼", html: "你的驗證碼為<b style='color:skybkue;'>" + sendText + "</b>,3分鐘內(nèi)有效,請務(wù)透漏給他人!", } transporter.sendMail(mailOptions, (error, info) => { if (error) { reject(error); } else { resolve(info) } }) }) } module.exports = { sendEmail }
調(diào)用sendEmail獲取驗證碼接口 =>:
const { sendEmail } = require("../utils/sendEmail"); /*email 郵箱賬戶 passWord 密碼 verification_code 驗證碼 code_expires 驗證碼有效期 code_effective 驗證碼是否有效 (0 無效 ;1 有效 */ exports.GetCaptcha = async (req, res) => { try { const isExit = await resSql('SHOW TABLES LIKE "userAccount"'); if (!isExit.length) { await resSql( `CREATE TABLE userAccount(email VARCHAR(50) NOT NULL,passWord VARCHAR(255),verification_code INT(10),code_expires VARCHAR(255),code_effective TINYINT(1) DEFAULT 0,PRIMARY KEY (email))` ); } // 發(fā)送驗證碼到郵箱 // console.log('=========檢測郵箱格式======='); const { email } = req.body; const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; if (!emailRegex.test(email)) { res.json({ code: 500, message: "錯誤的郵箱格式", }); return; } // 設(shè)置驗證碼 let verification_code = ""; for (let i = 0; i < 6; i++) { verification_code += parseInt(Math.random() * 10); } const now_timestamp = moment().format("x"); // 驗證碼3min內(nèi)有效 const code_expires = `${Number(now_timestamp) + 180000}`; // 查詢email是否存在 const isExitEmail = await resSql( `SELECT * FROM userAccount WHERE email='${email}'` ); // 插入 let sendCodeSql = `INSERT INTO userAccount (email, verification_code, code_expires, code_effective) VALUES ("${email}", "${verification_code}", "${code_expires}", 1)`; if (isExitEmail.length) { // 存在就修改 sendCodeSql = `UPDATE userAccount SET verification_code='${verification_code}', code_expires='${code_expires}', code_effective=1 WHERE email='${email}'`; } sendEmail(email, verification_code) .then(async () => { try { await resSql(sendCodeSql); res.json({ code: 200, message: "發(fā)送成功!驗證碼3分鐘內(nèi)有效", }); } catch (error) { res.json({ code: 500, message: error, }); } }) .catch((err) => { res.json({ code: 500, message: err || "發(fā)送失敗", }); }); } catch (error) { res.json({ code: 500, message: error || "錯誤返回", }); } };
到此這篇關(guān)于node 使用 nodemailer 發(fā)送驗證碼到郵箱的文章就介紹到這了,更多相關(guān)node發(fā)送驗證碼到郵箱內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Linux Centos7.2下安裝nodejs&npm配置全局路徑的教程
今天小編就為大家分享一篇Linux Centos7.2下安裝nodejs&npm配置全局路徑的教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-05-05Node.js+Express+Mysql 實現(xiàn)增刪改查
這篇文章主要介紹了Node.js+Express+Mysql 實現(xiàn)增刪改查,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-0430分鐘用Node.js構(gòu)建一個API服務(wù)器的步驟詳解
這篇文章主要介紹了30分鐘用Node.js構(gòu)建一個API服務(wù)器的步驟詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-05-05nodejs的http和https下載遠程資源post數(shù)據(jù)實例
這篇文章主要為大家介紹了nodejs的http和https下載遠程資源post數(shù)據(jù)實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-09-09Node.js連接MongoDB數(shù)據(jù)庫產(chǎn)生的問題
Node.js是使用JavaScript 編寫的可以運行在服務(wù)端的JS語言。node.js和mongodb碰撞會產(chǎn)生一系列問題,下面通過本文給大家分享Node.js連接MongoDB數(shù)據(jù)庫,需要的的朋友參考下2017-02-02