最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2023年10月13日 10:53:38   作者:哇伊卡  
最近閑著沒事,我就在練習(xí)使用node和mysql編寫接口,計劃寫一個完整的vue系統(tǒng),這篇文章主要介紹了node 使用 nodemailer工具發(fā)送驗證碼到郵箱,需要的朋友可以參考下

最近閑著沒事,我就在練習(xí)使用node和mysql編寫接口,計劃寫一個完整的vue系統(tǒng)。剛剛處理完注冊登錄的功能,我決定加入驗證碼驗證。在思考是否使用手機(jī)號或郵箱驗證時,最終我選擇了將驗證碼發(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 認(rèn)證方式
  • 代理人 用于 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, // 拒絕認(rèn)證就行了, 不然會報證書問題
        },
      });
      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)文章

  • npm使用國內(nèi)淘寶鏡像的兩種方法

    npm使用國內(nèi)淘寶鏡像的兩種方法

    npm install時候,默認(rèn)是去npm鏡像源獲取,很多時候蝸牛一樣的速度,所以需要將安裝源設(shè)置成國內(nèi)的源,這樣速度就會快很多,本文就來介紹一下npm使用國內(nèi)淘寶鏡像的兩種方法,感興趣的可以了解一下
    2023-08-08
  • nodejs 生成和導(dǎo)出 word的實例代碼

    nodejs 生成和導(dǎo)出 word的實例代碼

    前段時間由于項目需求,得做excel和word的導(dǎo)出功能.這篇文章主要介紹了nodejs 生成和導(dǎo)出 word的實例代碼,需要的朋友可以參考下
    2018-07-07
  • Node.js實現(xiàn)讀取Excel數(shù)據(jù)并插入MySQL

    Node.js實現(xiàn)讀取Excel數(shù)據(jù)并插入MySQL

    這篇文章主要為大家詳細(xì)介紹了Node.js如何實現(xiàn)讀取Excel數(shù)據(jù)并插入到MySQL數(shù)據(jù)庫中,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-11-11
  • Node.js學(xué)習(xí)之內(nèi)置模塊fs用法示例

    Node.js學(xué)習(xí)之內(nèi)置模塊fs用法示例

    這篇文章主要介紹了Node.js學(xué)習(xí)之內(nèi)置模塊fs用法,結(jié)合實例形式詳細(xì)分析了node.js內(nèi)置模塊fs的基本功能、用法與相關(guān)操作注意事項,需要的朋友可以參考下
    2020-01-01
  • nodejs處理圖片的幾種方法總結(jié)(使用sharp、jimp及webconvert)

    nodejs處理圖片的幾種方法總結(jié)(使用sharp、jimp及webconvert)

    這篇文章主要給大家介紹了關(guān)于nodejs處理圖片的幾種方法,文中介紹的方法分別是sharp、jimp及webconvert,在開發(fā)過程中我們有時候需要對圖片進(jìn)行處理,給一個圖片添加水印、多個圖片合成為一圖片等操作,需要的朋友可以參考下
    2023-12-12
  • node.js的http.createServer過程深入解析

    node.js的http.createServer過程深入解析

    這篇文章主要給大家介紹了關(guān)于node.js的http.createServer過程的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用node.js具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • Nodejs之Express中間件的分類介紹

    Nodejs之Express中間件的分類介紹

    這篇文章主要介紹了Nodejs之Express中間件的分類,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • node.js適合游戲后臺開發(fā)嗎?

    node.js適合游戲后臺開發(fā)嗎?

    這篇文章主要介紹了node.js適合游戲后臺開發(fā)嗎?node.js是不是能代替C++開發(fā)游戲后臺呢?看完本文我想你會有一定的了解了,需要的朋友可以參考下
    2014-09-09
  • 基于nodejs使用express創(chuàng)建web服務(wù)器的操作步驟

    基于nodejs使用express創(chuàng)建web服務(wù)器的操作步驟

    express實際上是對nodejs內(nèi)置http進(jìn)行封裝后的第三方包,其中提供了快捷創(chuàng)建web服務(wù)器以及處理請求路由的方法,使我們可以更加方便快捷的實現(xiàn)一個web服務(wù)器項目,本文件給大家詳細(xì)介紹基于nodejs使用express?創(chuàng)建web服務(wù)器的操作步驟
    2023-07-07
  • node和vue實現(xiàn)商城用戶地址模塊

    node和vue實現(xiàn)商城用戶地址模塊

    這篇文章主要為大家詳細(xì)介紹了node和vue實現(xiàn)商城用戶地址模塊,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-12-12

最新評論

平湖市| 德兴市| 东乡| 京山县| 都兰县| 明水县| 蒲江县| 延吉市| 临江市| 尉氏县| 闽侯县| 浦城县| 五莲县| 新沂市| 邵武市| 津市市| 东明县| 洞头县| 临安市| 多伦县| 榕江县| 连州市| 广水市| 辽阳县| 永胜县| 永昌县| 深泽县| 惠来县| 嘉义县| 通渭县| 麟游县| 红安县| 都兰县| 淮滨县| 特克斯县| 荔浦县| 漯河市| 隆德县| 远安县| 瑞丽市| 南京市|