koa2--nodemailer实现邮箱验证
依赖包安装:
/**
* koa-bodyparser用于把formData数据解析到ctx.request.body
* 通过ctx.request.body访问请求的参数
* koa-redis用于保存状态
*/
npm install nodemailer koa-bodyparser koa-redis
引入使用:
const Koa = require('koa')
const redis = require('koa-redis')
const nodeMailer = require('nodemailer')
const bodyParser = require('koa-bodyparser')
const app = new Koa()
// redis数据库
const store = redis().client
// formData数据解析到ctx.request.body
app.use(bodyParser())
以QQ邮箱为发送方,实现过程:
app.use(async ctx => {
// 接口--/users/verify
if ((ctx.request.url.indexOf('/users/verify') > -1) && (ctx.request.method === 'POST')) {
// post参数名
const { username, email } = ctx.request.body
// 请求到期时间
const expire = await store.hget(`nodemail:${username}`, 'expire')
// 频率--1分钟内1次
if (expire && (+new Date() - expire < 0)) {
ctx.body = {
code: -1,
msg: '验证请求过于频繁,1分钟内1次'
}
return
}
// 配置参数
const conf = {
get user() {
return '1489508889@qq.com'
},
get pass() { // smtp授权码,自行替换
return 'xxxxxxxxxxxxx'
},
get code() { // 验证码
return () => {
return Math.random().toString(16).slice(2, 6).toUpperCase()
}
},
get expire() { // 到期时间
return () => {
return +new Date() + 60 * 1000
}
}
}
const transportOptions = {
service: 'QQ', // no need to set host or port etc. 更多邮箱支持 https://nodemailer.com/smtp/well-known/
auth: {
user: conf.user, // 发件邮箱
pass: conf.pass // smtp授权码
}
}
let code
// 邮件模版
const sendMailOptions = {
from: `"认证邮件"<${conf.user}>`, // 发件人
to: email, // 收件人
subject: '注册验证', // 邮件主题
html: `<h3>注册验证码是${code = conf.code()}</h3>` // 邮件内容
}
// create reusable transporter
let transporter = nodeMailer.createTransport(transportOptions)
try {
// send mail
let info = await transporter.sendMail(sendMailOptions)
if (info) {
// 存储状态
await store.hmset(`nodemail:${username}`, 'code', code, 'expire', conf.expire(), 'email', email, 'storageTime', +new Date())
ctx.body = {
code: 0,
msg: '验证码发送成功'
}
}
} catch (error) {
console.log(error)
ctx.body = {
code: -1,
msg: '验证码发送失败,请重新尝试'
}
}
}
})
app.listen(4000, () => {
console.log('server running at : 4000')
})
测试结果:





QQ邮箱开启smtp:

koa2--nodemailer实现邮箱验证的更多相关文章
- (进阶篇)PHP实现用户注册后邮箱验证,激活帐号
我们在很多网站注册会员时,注册完成后,系统会自动向用户的邮箱发送一封邮件,这封邮件的内容就是一个URL链接,用户需要点击打开这个链接才能激活之前在该网站注册的帐号.激活成功后才能正常使用会员功能. 本 ...
- PHP用户注册邮箱验证激活帐号
我们在很多网站注册会员时,注册完成后,系统会自动向用户的邮箱发送一封邮件,这封邮件的内容就是一个URL链接,用户需要点击打开这个链接才能激活之前在该网站注册的帐号.激活成功后才能正常使用会员功能. 本 ...
- android 自定义view -- 实现自定义 邮箱验证的Edittext
//onFinishInflate 当View中所有的子控件均被映射成xml后触发 /** * 实现自定义 实现邮箱验证的EidtText */public class CustomEditText ...
- [麦先生]在Laravel框架里实现邮箱验证---发送邮件
在经过一段时间的使用后,发现在项目中很多地方需要用到用户验证,以短信验证和邮箱验证为主流趋势,小麦总结了如果在Laravel框架中实现发送邮件功能,以后会陆续更上如何实现短信验证..... 在.env ...
- javamail实现邮箱验证功能
javamail是基于SMTP协议和POP3协议的邮件发送与接收系统,在用户注册与登陆的过程中,常需要用到邮箱验证功能,下面是基于javamail的一个简单实现 用户注册后通过servlet得到邮箱地 ...
- PHP邮箱验证是否有效
今天一开电脑发现有人在我的主页给我乱留言,所以加了一个邮箱验证. 网上发现一个很巧妙的算法,分享一下: function checkmail($email){ $exp = "^[a-z'0 ...
- discuz3.2x增加邮箱验证功能
为防止垃圾用户多次注册,为disczu增加邮箱验证功能. 大致分为二步: 1.申请邮箱,这里推荐使用腾讯免费企业邮箱:https://exmail.qq.com/portal/introducefre ...
- .net 实现注册邮箱验证激活
没事上网当了个注册邮箱验证激活的代码,用起来感觉还不错,特意和大家要一起分享一下 下面是主要实现代码: uing System.Net.Mail; public partial class jquer ...
- JS非空验证及邮箱验证
非空验证 <body> <table> <tr> <td>姓名:</td> <td><input type="t ...
- DEDECMS开启邮箱验证通知的解决方法
[摘要]织梦CMS是开源内容管理系统,是国内开源CMS的领先品牌,目前程序安装量已达七十万,本文介绍DEDECMS会员注册时,开启邮箱验证通知的解决方法. 在论坛上看到很多人都说这个功能没用,邮箱根本 ...
随机推荐
- lastlogon
function Get-ADUserLastLogon($userName) { $dcs = Get-ADDomainController -Filter {Name -like "*& ...
- paddlepaddle如何预加载embedding向量
使用小批量数据时,模型容易过拟合,所以需要对全量数据进行处理,我是用的是word2vec训练的词向量. 那么训练好对词向量如何加载呢? #!/usr/bin/env python # -*- codi ...
- hangfire 实现已完成的job设置过期,防止数据无限增长
1.添加SucceededStateExpireHandler 继承接口 IStateHandler public class SucceededStateExpireHandler : IState ...
- Angular8开发拼多多WebApp_汇总贴
https://coding.imooc.com/class/336.html?mc_marking=b9f5e475d0cb8922d899d416f5b4433f&mc_channel=s ...
- 转 zabbix 自动发现和 zabbix自定义用户key与参数User parameters
########31 https://www.cnblogs.com/yjt1993/p/10883345.html 1.概念 在配置Iterms的过程中,有时候需要对类似的Iterms进行添加,这些 ...
- nginx使用与配置入门指南
这是一篇关于nginx使用与配置的入门指南,但不包括nginx的编译与安装.我假定你知晓如何安装nginx.对大多数Linux系统来说,nginx都已经存在于它们的软件包里,直接使用系统提供的软件管理 ...
- Unity3D 使用SQLite
使用Unity操作SQLite,需要用到三个库文件,分别是Mono.Data.Sqlite.dll和System.Data.dll和Sqlite3.dll,前两个库文件可以在unity中找到,具体步骤 ...
- csu 1976: 搬运工小明
1976: 搬运工小明 Submit Page Summary Time Limit: 2 Sec Memory Limit: 128 Mb Submitted: 94 ...
- Jenkins+gitlab+msbuild
配置gitlab 这里会生成一个token在页面上方,一定要复制出来.存在别的地方. jenkins配置gitlab 在jenkins服务器上安装vs,目的是使用它的msbuild,如果项目中还用到了 ...
- 文件和异常的练习3——python编程从入门到实践
10-10 常见单词:访问项目Gutenberg(http://gutenberg.org/),并找一些你想分析的图书.下载这些作品的文本文件或将浏览器中的原始文本复制到文本文件中. 可以使用coun ...