依赖包安装:

/**
* 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实现邮箱验证的更多相关文章

  1. (进阶篇)PHP实现用户注册后邮箱验证,激活帐号

    我们在很多网站注册会员时,注册完成后,系统会自动向用户的邮箱发送一封邮件,这封邮件的内容就是一个URL链接,用户需要点击打开这个链接才能激活之前在该网站注册的帐号.激活成功后才能正常使用会员功能. 本 ...

  2. PHP用户注册邮箱验证激活帐号

    我们在很多网站注册会员时,注册完成后,系统会自动向用户的邮箱发送一封邮件,这封邮件的内容就是一个URL链接,用户需要点击打开这个链接才能激活之前在该网站注册的帐号.激活成功后才能正常使用会员功能. 本 ...

  3. android 自定义view -- 实现自定义 邮箱验证的Edittext

    //onFinishInflate 当View中所有的子控件均被映射成xml后触发 /** * 实现自定义 实现邮箱验证的EidtText */public class CustomEditText ...

  4. [麦先生]在Laravel框架里实现邮箱验证---发送邮件

    在经过一段时间的使用后,发现在项目中很多地方需要用到用户验证,以短信验证和邮箱验证为主流趋势,小麦总结了如果在Laravel框架中实现发送邮件功能,以后会陆续更上如何实现短信验证..... 在.env ...

  5. javamail实现邮箱验证功能

    javamail是基于SMTP协议和POP3协议的邮件发送与接收系统,在用户注册与登陆的过程中,常需要用到邮箱验证功能,下面是基于javamail的一个简单实现 用户注册后通过servlet得到邮箱地 ...

  6. PHP邮箱验证是否有效

    今天一开电脑发现有人在我的主页给我乱留言,所以加了一个邮箱验证. 网上发现一个很巧妙的算法,分享一下: function checkmail($email){ $exp = "^[a-z'0 ...

  7. discuz3.2x增加邮箱验证功能

    为防止垃圾用户多次注册,为disczu增加邮箱验证功能. 大致分为二步: 1.申请邮箱,这里推荐使用腾讯免费企业邮箱:https://exmail.qq.com/portal/introducefre ...

  8. .net 实现注册邮箱验证激活

    没事上网当了个注册邮箱验证激活的代码,用起来感觉还不错,特意和大家要一起分享一下 下面是主要实现代码: uing System.Net.Mail; public partial class jquer ...

  9. JS非空验证及邮箱验证

    非空验证 <body> <table> <tr> <td>姓名:</td> <td><input type="t ...

  10. DEDECMS开启邮箱验证通知的解决方法

    [摘要]织梦CMS是开源内容管理系统,是国内开源CMS的领先品牌,目前程序安装量已达七十万,本文介绍DEDECMS会员注册时,开启邮箱验证通知的解决方法. 在论坛上看到很多人都说这个功能没用,邮箱根本 ...

随机推荐

  1. 【spring源码学习】spring事务中的嵌套事务中的保存点相关知识

    JDBC事务保存点(setSavepoint, releaseSavepoint )实例 以下是使用事务教程中描述的setSavepoint和回滚的代码示例. 此示例代码是基于前面章节中完成的环境和数 ...

  2. Linux下的sleep()和sched_yield()(转)

    阿里四面被问到了这个问题,一脸懵逼,下来也没找到什么阐述这个的文章,就自己查man来对比总结一下吧: sched_yield()的man手册描述如下: DESCRIPTION       sched_ ...

  3. HTML5的服务器EventSource(server-sent event)发送事件

    参考资料: HTML5的服务器(server-sent event)发送事件有什么应用场景? W3school HTML 5 服务器发送事件 『后台消息推送功能』,前端除了轮询.scoket.第三方服 ...

  4. PV、TPS、QPS是怎么计算出来的?(转载的)

    QPS = req/sec = 请求数/秒 [QPS计算PV和机器的方式] QPS统计方式 [一般使用 http_load 进行统计] QPS = 总请求数 / ( 进程总数 * 请求时间 ) QPS ...

  5. Visual Assist之Hashtags功能简介

    Visual Assist是一款非常好的Visual Studio下开发的插件,网上已经有很多关于它的配置以及相关介绍,本文不再赘述.本文将注重介绍它的Hashtags功能. 本文主要内容来自于官网介 ...

  6. SAP翔子_增强篇索引

    序号 描述 SAP翔子_增强篇0 增强篇0 SAP的多种增强方式 SAP翔子_增强篇1 增强篇1 PO保存增强 SAP翔子_增强篇2 增强篇2 生产订单屏幕增强 SAP翔子_增强篇3 增强篇3 SAP ...

  7. LwIP应用开发笔记之四:LwIP无操作系统TFTP服务器

    前面我们已经实现了UDP的回环客户端和回环服务器的简单应用,接下来我们实现一个基于UDP的简单文件传输协议TFTP. 1.TFTP协议简介 TFTP是TCP/IP协议族中的一个用来在客户机与服务器之间 ...

  8. 贴子详情接口偶发时延超过2s的问题

    1. 发现问题     1. 查询慢access日志,发现偶尔有接口时延超过2s,发送概率1%左右 2. 排查     1. 写单元测试,多次测试后,不能重现问题     2. 接口代码里加日志,每隔 ...

  9. FLINK-11738

    caused by: akka.pattern.asktimeoutexception: ask timed out on flink Caused by: akka.pattern.AskTimeo ...

  10. 工具分享:excel2json,将Excel表格转换为JSON

    此次分享的是github上的一个开源小工具:excel2json,用于把Excel表转换成json对象,并保存到一个文本文件. 项目地址:https://github.com/neil3d/excel ...