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邮箱 -> 设置 -> 账户 -> 生成授权码
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: '验证成功'
});
}
});