⭐背景
大家好,我是yma16,本文分享 node_koa后端——生成验证码存入redis并使用smtp发送邮件。
面向对象:前端初学者、前端转后端的同学
该系列往期文章
node_koa后端——初始化配置jwt和swagger的koa框架
smtp
SMTP是一种提供可靠且有效的电子邮件传输的协议。SMTP是建立在FTP文件传输服务上的一种邮件服务,主要用于系统之间的邮件信息传递,并提供有关来信的通知。SMTP独立于特定的传输子系统,且只需要可靠有序的数据流信道支持,SMTP的重要特性之一是其能跨越网络传输邮件,即“SMTP邮件中继”。使用SMTP,可实现相同网络处理进程之间的邮件传输,也可通过中继器或网关实现某处理进程与其他网络之间的邮件传输。
⭐ Nodemailer 库发送邮件
安装 nodemailer 库
npm install nodemailer
coding环节
✏️ 封装 Nodemailer发送邮件
可以预先配置smtp的免费邮箱验证码
这里可以选择qq邮箱->账号设置->POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV
服务
创建utils/email/index.js
const nodemailer = require('nodemailer')
//创建一个SMTP客户端配置对象
const transporter = nodemailer.createTransport({
// 默认支持的邮箱服务包括:”QQ”、”163”、”126”、”iCloud”、”Hotmail”、”Yahoo”等
service: "QQ",
auth: {
// 发件人邮箱账号
user: '1432448610@qq.com',
//发件人邮箱的授权码 需要在自己的邮箱设置中生成,并不是邮件的登录密码
pass: '******'
}
})
const sendEmail=(toUserEmail,title,content)=>{
return new Promise(resolve=>{
// 配置收件人信息
const receiver = {
// 发件人 邮箱 '昵称<发件人邮箱>'
from: `1432448610@qq.com`,
// 主题
subject:title,
// 收件人 的邮箱 可以是其他邮箱 不一定是qq邮箱
to:toUserEmail,
// 可以使用html标签
html: content
};
// 发送邮件
transporter.sendMail(receiver, (error, info) => {
if (error) {
resolve({
code:0,
msg:error
})
}
transporter.close()
resolve({
code:200,
msg:'success'
})
})
})
};
module.exports={
sendEmail
}
✏️ 写一个发送邮件验证码的api
创建一个route/routes/email.js
const Router = require('koa-router');
const router = new Router();
const {sendEmail}=require('../../utils/email/index');
const {getRedisKey,setRedisConfig}=require('../../utils/redis/index');
// 随机字符串
function randomString(length) {
const chars='0123456789'
let result = '';
for (let i = length; i > 0; --i) result += chars[Math.floor(Math.random() * chars.length)];
return result;
}
// 发送邮件验证码
router.post('/sendEmailCode', async (ctx) => {
try{
const bodyParams = ctx.request.body
const {email}=bodyParams
console.log('email',email)
const code=randomString(4)
const content=`<p>验证码:<span style="color:lightskyblue">${code}</span><p>`
const title='请查收验证码'
setRedisConfig(email,code)
console.log('code',code)
const res=await sendEmail(email,title,content)
ctx.body = {
code:res.code,
data:{
emailRes:res,
code:code
},
msg:'success'
};
}
catch(r){
ctx.body={
code:0,
msg:r
}
}
});
module.exports = router;
🎈 apifox测试验证接口
apifox测试接口
- path: http://localhost:3333/api/sendEmailCode
- method: post
- data:
email:4132448610@qq.com
通信成功! 查收邮箱成功!
⭐结束
本文分享到这结束,如有错误或者不足之处欢迎指出!
👍 点赞,是我创作的动力!
⭐️ 收藏,是我努力的方向!
✏️ 评论,是我进步的财富!
💖 最后,感谢你的阅读!