node 邮箱方式发送验证码

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/Reagan_/article/details/98883503

想要实现发送验证码功能,要准备:

  • nodemail模块
  • 一个有授权的发送验证码的邮箱

nodemail模块:是连接js应用和邮箱的桥梁。
是一个专门来发送消息的中转模块。

步骤
你需要做些什么来发送消息,将以下:

  • 创建一个Nodemailer运输车使用 SMTP或一些其他的传输机制
  • 设置 消息选项 (发送者 用户名、密码)
  • 交付消息对象使用 sendMail () 你以前创建的运输车的方法

nodemailer模块
开启 Smtp : Simple Message Transfer Protocol 简单邮件传输协议
官网:https://nodemailer.com/about/

发送邮箱功能步骤:
1.先在qq邮箱(其他邮箱也可以)的设置\账户里面有个

开启服务:
POP3/SMTP服务 (如何使用 Foxmail 等软件收发邮件?)
已开启 |  关闭
IMAP/SMTP服务 (什么是 IMAP,它又是如何设置?)
已开启 |  关闭

把他俩都开启,记住授权码。

2.下载nodemailer模块

cnpm i -S nodemailer

之后重启程序npm start

3.引入nodemailer模块

var nodemailer = require('nodemailer');

配置邮箱,暴露邮箱接口
utils/config.js

var Email={
    config:{
        host: "smtp.qq.com",
        port: 587,
        auth: {
            user: '[email protected]', // 发件人
            pass: 'vumkdmfgimwtbbci' // 密码
        }
    },
    get transporter(){  //get方法,直接得到config对象  transporter:在controlers的user.js里要用这个方法
        return nodemailer.createTransport(this.config);
    },
    get verify(){   //verify自定义的方法:生成验证码
        return Math.random().toString().substring(2,6);  //substring(2,6):验证码要4位,从2到6位提取
    },
    get time(){
        return Date.now();
    }
};
module.exports={
    Mongoose,
    Email
};

这里使用的是createTransport方法,与官网本质一样,只是形式不一样,这里先配置了,再传入createTransport来调用。

4.controlers/users.js
引入Email,解构赋值。
处理数据,编写验证码的接口。
使用transporter.sendMail()方法发送mailOptions,有容错处理。

var {Email} = require('../untils/config.js');
var verify=async(req,res,next)=>{
    var email=req.query.email;  //前端发送来的邮箱

    var mailOptions={ //发送给用户显示的字段
        from:'小猪网 [email protected]',
        to: email,
        subject: '小猪网邮箱验证码', 
        text: '验证码:'+ Email.verify
    }  
    var  info = await Email.transporter.sendMail(mailOptions)
    if(info){
        res.send({
            msg:'验证码发送成功',
            status:0
        });
    }else{
        res.send({
            msg:'验证码发送失败',
            status:-1
        });
    }
};

到这里验证码就发送出去了。

接下来做的就是检查验证码是否生效了。
生效条件:正确、未过期

  • 正确 : 发送验证码的时候,将验证码保存在session里;注册的时候,如果用户请求里邮箱一致、验证码等于session里的验证码,那么验证码就正确。
    if(email !== req.session.email || verify !== req.session.verify){}
  • 未过期 : 设置60秒过期,时间差小于60秒则未过期
    if((Email.time - req.session.time)/1000 > 60){}

猜你喜欢

转载自blog.csdn.net/Reagan_/article/details/98883503