欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

node 使用 nodemailer工具發(fā)送驗證碼到郵箱

 更新時間:2023年10月13日 10:53:38   作者:哇伊卡  
最近閑著沒事,我就在練習(xí)使用node和mysql編寫接口,計劃寫一個完整的vue系統(tǒng),這篇文章主要介紹了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ù),

![image.png](https://img-blog.csdnimg.cn/img_convert/2fd1e05b4c7dea4b3d5a8ec487588274.png

開啟服務(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配置全局路徑的教程

    今天小編就為大家分享一篇Linux Centos7.2下安裝nodejs&npm配置全局路徑的教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • Node.js+Express+Mysql 實現(xiàn)增刪改查

    Node.js+Express+Mysql 實現(xiàn)增刪改查

    這篇文章主要介紹了Node.js+Express+Mysql 實現(xiàn)增刪改查,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • 充分發(fā)揮Node.js程序性能的一些方法介紹

    充分發(fā)揮Node.js程序性能的一些方法介紹

    這篇文章主要介紹了充分發(fā)揮Node.js程序性能的一些方法介紹,Node.js是把JavaScript用于服務(wù)器端的框架,需要的朋友可以參考下
    2015-06-06
  • npm配置淘寶鏡像的教程詳解

    npm配置淘寶鏡像的教程詳解

    npm淘寶鏡像,也稱為npm cnpm或npm.taobao.org,是一個針對npm包管理器的國內(nèi)鏡像服務(wù),通過設(shè)置npm淘寶鏡像,你可以更快地下載和安裝依賴,本文給大家介紹了npm配置淘寶鏡像的教程,需要的朋友可以參考下
    2024-07-07
  • 30分鐘用Node.js構(gòu)建一個API服務(wù)器的步驟詳解

    30分鐘用Node.js構(gòu)建一個API服務(wù)器的步驟詳解

    這篇文章主要介紹了30分鐘用Node.js構(gòu)建一個API服務(wù)器的步驟詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-05-05
  • nodejs的http和https下載遠程資源post數(shù)據(jù)實例

    nodejs的http和https下載遠程資源post數(shù)據(jù)實例

    這篇文章主要為大家介紹了nodejs的http和https下載遠程資源post數(shù)據(jù)實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09
  • NodeJS遍歷文件生產(chǎn)文件列表功能示例

    NodeJS遍歷文件生產(chǎn)文件列表功能示例

    這篇文章主要介紹了NodeJS遍歷文件生產(chǎn)文件列表功能,結(jié)合實例形式分析了nodejs針對文件與目錄的遍歷、判斷及讀寫等相關(guān)操作技巧,需要的朋友可以參考下
    2017-01-01
  • 利用node.js實現(xiàn)反向代理的方法詳解

    利用node.js實現(xiàn)反向代理的方法詳解

    在實際工程開發(fā)中,會有前后端分離的需求。為了平滑的完成前端請求到后端各個獨立服務(wù),需要一個中間件實現(xiàn)請求轉(zhuǎn)發(fā)的功能,利用Nginx可以實現(xiàn),在這里使用nodejs實現(xiàn)一個反向代理服務(wù)器。本文主要介紹了關(guān)于利用node.js實現(xiàn)反向代理的相關(guān)資料,需要的朋友可以參考下。
    2017-07-07
  • NodeJS實現(xiàn)圖片文本分割

    NodeJS實現(xiàn)圖片文本分割

    這篇文章主要為大家詳細介紹了NodeJS實現(xiàn)圖片文本分割,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • Node.js連接MongoDB數(shù)據(jù)庫產(chǎn)生的問題

    Node.js連接MongoDB數(shù)據(jù)庫產(chǎn)生的問題

    Node.js是使用JavaScript 編寫的可以運行在服務(wù)端的JS語言。node.js和mongodb碰撞會產(chǎn)生一系列問題,下面通過本文給大家分享Node.js連接MongoDB數(shù)據(jù)庫,需要的的朋友參考下
    2017-02-02

最新評論