验证码作为一种人机识别手段,其主要作用是区分正常人和机器的操作,拦截恶意行为。本文将以QQ邮箱为例,使用Node.js后端实现发送验证码到用户邮箱的过程。其他邮箱也可以参照本文找到邮箱相对应的SMTP服务器地址和POP3/SMTP服务的授权码。
1.开启POP3/SMTP服务
进入邮箱账户->设置(不同浏览器不同邮箱的位置不同)
找到POP3/SMTP服务开启,验证后得到授权码
授权码只显示一次,建议复制后保存到本地,以免遗失。

2.找到对应邮箱的SMTP服务器地址
3.编写代码
nodemailer模块:用于发送邮件:npm i nodemailer --save 文档
示例代码
const nodemailer = require('nodemailer');
// 配置信息
const config = {
host: "smtp.qq.com", //SMTP服务器地址
port: 465, // SMTP 端口
secureConnection: true, // SSL安全链接
service: "qq", //邮箱类型
auth: {
user: "915915818@qq.com", //SMTP账号
pass: "输入自己刚刚申请的授权码", //SMTP邮箱授权码 不是账号密码
},
};
// 创建接口
const transport = nodemailer.createTransport(config);
//发送邮件 返回promise类型
function eMail(mail) {
return new Promise((resolve, reject) => {
transport.sendMail(mail, (error, info) => {
if (error) {
reject(error);
} else {
resolve(info);
}
})
})
transporter.close() //用完,记得关闭这个接口
}
//发送验证码
async function checkcode(to) {
// 随机生成六位验证码
let code = Math.floor(Math.random() * 1000000);
// 发送内容
let mail = {
from: '"慕旋博客" <915915818@qq.com>', //发件方
to, //接收方
subject: '慕旋博客', //发送标题
//text: '测试内容', //发送文本
html: `<div><span>验证码:</span><b>${code}</b></div>` //发送html模版
}
const res = await eMail(mail);
console.log(res);
}
//用自己账号进行测试
checkcode('915915818@qq.com');
4.补充内容
接收方可以是一个数组,即一次性设置多个接收的邮箱。邮件的展示内容可以选择纯文本或html模版,搭配ejs模版引擎可以生成好看的邮件页面。验证码的校验问题可以参考后续jwt和session有关文章。








