发送邮箱验证码

前置内容

本文内容中未定义的方法和函数请先阅读:

  1. 【Npm nodemailer】:https://www.npmjs.com/package/nodemailer
  2. 【云剪切板——统一后端返回数据格式】:https://www.hyz.cool/articles/209
  3. 【Nodejs express 连接 Redis】:https://www.hyz.cool/articles/208

路由

  • UserController.js
const express = require("express")
const UserController = express.Router();
const UserService = require("../services/UserService")

/**
 * 发送邮箱
 */
UserController.get("/email",UserService.sendEmailCode)

module.exports = UserController
js

发送邮箱工具类

  • EmailSender.js
const nodeMailer = require("nodemailer")
//配置
const EmailConfig={
    host:'smtp.126.com',
    secure:true,
    auth:{
        user:"***@126.com",
        pass:"****"
    }
}

let transporter = nodeMailer.createTransport(EmailConfig)

//发送验证码
export const sendCode = (email, code) => {
    //邮件内容
    let mailOptions = {
        from: `"续加仪的云剪切板" <${EmailConfig.auth.user}>`,//发送者
        to: email,//接收者
        subject: "续加仪云剪切板注册验证码",//主题
        html: `<p style="text-indent: 20px;">您本次注册账号的邮箱验证码是:</p>
           <p style="text-align: center;text-decoration: underline;font-size: x-large;text-space: 3px;"><strong>${code}</strong></p>
           <p style="text-indent: 10px;">有效时间3分钟,请不要向任何人泄漏!</p>
           <p style="text-align: right;">【续加仪的云剪切板】</p>
           <p style="text-align: right;">【祝好!】</p>`
    }
    //发送并返回结果
    return new Promise((resolve, reject) => {
        transporter.sendMail(mailOptions,(error,info)=>{
            if(error) reject("发送验证码失败!",error)
            else resolve("发送验证码成功")
        })
    })
}
js

发送邮箱验证码

  • UserService.js
/**
 * 发送邮箱验证码
 */
export const sendEmailCode = [
    validator.query("email","邮箱地址不能为空").isLength({min:1})
        .custom(email=>{
            return new Promise((resolve, reject)=>{
                let reg = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/
                if(reg.test(email))resolve(true)
                else reject("邮箱格式不正确")
            })
        }),
    (req,res,next)=>{
        //校验参数
        let validationResult = validator.validationResult(req);
        if (!validationResult.isEmpty()) return Result.result(res, Result.invalidParams(validationResult.array()))

        //拿到参数
        let {email} = req.query;
        //判断是否已经发过
        RedisService().get(KEY.EMAIL+email).then(result=>{
            if(result)  return Result.result(res,Result.failed("验证码已经发送过了,请3分钟后再试"))
            //生成code
            let code = parseInt(Math.random()*1000000)%900000+100000
            //发送
            sendCode(email,code).then(result=>{
                //写入缓存
                RedisService().set(KEY.EMAIL+email,code,{EX:3*60});
                //返回结果
                return Result.result(res,Result.success("发送邮箱验证码成功"))
            }).catch(err=>{
                return Result.result(res,Result.failed("发送邮箱验证码失败"))
            })
        }).catch(err=>{
            return Result.result(res,Result.failed("查询邮箱验证码失败"))
        })
    }]
js
打赏
  • 微信
  • 支付宝
评论
来发评论吧~
···

歌手: