使用nodemail+Gmail发送验证码

安装:

const nodemailer = require('nodemailer'); // 用于发送电子邮件

其中谷歌相关配置及其API开通查看:http://t.csdnimg.cn/v4wHr
Gmail谷歌邮箱配置:

let transporter = nodemailer.createTransport({
    service: 'Gmail',
    auth: {
        type: "OAuth2",
        user: '你的谷歌邮箱@gmail.com',//
        pass: '谷歌邮箱密码',
        clientId:"你的clientId",
        clientSecret: "你的clientSecret",
        refreshToken: "你的refreshToken",//有限时
        accessToken:"你的 accessToken",//有限时
    }
}
);

完整代码:

const router = require('@koa/router')()
const nodemailer = require('nodemailer'); // 用于发送电子邮件

// 配置电子邮件发送器
// refreshToken和accessToken会更新
let transporter = nodemailer.createTransport({
    service: 'Gmail',
    auth: {
        type: "OAuth2",
        user: '******@gmail.com',//谷歌邮箱
        pass: '*********',//谷歌邮箱密码
        clientId:"**********",//凭据-客户端ID
        clientSecret: "**********",//凭据-客户端密钥
        refreshToken:"****************",//必填参数,随token过期失效
        accessToken: "**********",//必填参数,随token过期失效
    }
}
);

// 生成随机验证码
function generateVerificationCode() {
    return Math.floor(1000 + Math.random() * 9000).toString();
}

// 存储验证码与邮箱的映射关系,可以使用数据库或内存存储
const verificationCodes = new Map();

router.post('/send-verification-code', async ctx => {
    const { email } = ctx.request.body;
    // 生成验证码
    const code = generateVerificationCode();
    // 存储验证码,通常需要设置过期时间
    verificationCodes.set(email, code);
    // 发送验证码邮件
    const mailOptions = {
      from: '*********@gmail.com',//你的谷歌邮箱
      to: email,
      subject: '验证码邮件',
      text: `您的验证码是: ${code}`
    };
    console.log('mailOptions:',mailOptions);

    
    try {
      const res = await transporter.sendMail(mailOptions);
      console.log(res);
      ctx.body = { success: true, message: '验证码邮件已发送' };
    } catch (error) {
        console.log('connect ETIMEDOUT超时/token过期导致refreshToken、accessToken更新');
      ctx.body = { success: false, message: '无法发送验证码邮件' };
    }
  });

使用postman测试:
在这里插入图片描述
发送成功:
在这里插入图片描述

如果接口返回数据为

{ “success”: false, “message”: “无法发送验证码邮件” }

存在俩种情况:

  1. fefresh token、access token失效:fefresh token、access
    token具有时效性,会根据Step1的token失效而失效,解决方法需要更新token,并获取更新的fefresh
    token、access token

在这里插入图片描述

  1. 网络连接存在问题,大陆区域与非大陆区域访问需借助相关工具
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值