验证码作为一种人机识别手段,其主要作用是区分正常人和机器的操作,拦截恶意行为。本文将以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有关文章。