使用 nodemailer 实现邮箱验证

1.工具准备

  • 下载 nodemailer:cnpm i nodemailer --save
  • 下载 axios(我这里的请求使用 axios 完成):cnpm i axios --save
  • nodejs 使用 express 框架:cnpm i express --save

2.编写发送邮件代码 mail.js

// mail.js
module.exports = {
    mail
}

/**
 * 发送邮件
 * @param {string} to 收件方邮箱
 * @param {string} title 内容标题
 * @param {string} content 邮件内容
 * @param {Function} callback 回调函数(内置参数)
 *
 */
function mail(to,title,content,callback) {
    const nodemailer = require('nodemailer'); //引入依赖
    /**
     * 详细配置文件地址: node_modules/lib/well-known/services
     */
    let transporter = nodemailer.createTransport({
        host: 'smtp.qq.com',// 根据不同邮箱使用不同域名
        port: 465,
        secure: true,
        auth: {
            user: '1111111111', //发送方邮箱
            pass: '****' //发送方邮箱的授权码,一般去邮箱设置里面找,应该可以找到
        }
    });

    let info = {
        from: '李强<1111111111@qq.com>',//发送方昵称和邮箱
        to: to,
        subject: title,
        text: content
        //html: '<h1>这里内容</h1>',text和html任选其一即可
    }
    //发送邮件
    transporter.sendMail(info,(err,data) => {
        callback &&  callback(err,data)
    });
}

qq邮箱授权码:打开qq邮箱 -> 设置 -> 账户 -> 生成授权码

qq邮箱授权码

3.编写html+请求代码

<style>
    div {
        display: flex;
        align-items: center;
        justify-content: space-between;
    }
</style>
<input type="email" id="email" placeholder="User Email"/>
<div>
    <input type="text" id="code" placeholder="Email Code"/>
    <button click="sendCode">发送验证码</button>
</div>
<button click="confirm">确定</button>
<script>
    function sendCode() {
        axios.post("/sendEmail", {
            email: document.getElementById("email").value
        }).then((response) => {
            let res = response.data;
            alert(res.msg);
        });
    }
    function confirm() {
        axios.post("/confirm", {
            code: document.getElementById("code").value
        }).then((response) => {
            let res = response.data;
            alert(res.msg);
        });
    }
</script>

4.编写响应代码

const express = require('express');
const router = express.Router();
const sendMail = require('./../utils/mail')
let code = "";
router.post("/sendEmail", (req, res, next) => {
    let email = req.body.email;
    code = "";
    // 随机生成六位验证码
    for(let i = 0; i < 6; i++) {
        code += Math.floor(Math.random() * 10);
    }
    sendMail.mail(email,"家电商城注册验证码",code,(err,data) => {
        if(err) {
            res.json({
                status: '1',
                msg: err.message
            });
        }else {
            res.json({
                status: '0',
                msg: "验证码已发送"
            });
        }
    });
});
router.post("/confirm", (req, res, next) => {
    let userCode = req.body.code;
    if(code != userCode) {
        res.json({
            status: '1',
            msg: '验证码错误'
        });
    }else {
        res.json({
            status: '0',
            msg: '验证成功'
        });
    }
});
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值