Node.js实现注册邮箱激活功能的方法示例


Posted in Javascript onMarch 23, 2018

在做自己的node项目极客教程时,需要开发一个注册邮箱激活的功能,这个功能非常常见,当我们注册一个账号时,肯定会有这步,下面看下如何实现这个功能。

1. 注册邮箱

先注册一个支持发送验证邮件的邮箱,我这里注册的是网易的163邮箱,所以下面都是以163邮箱作为发件邮箱

注册成功后进行登录,然后点击导航栏的设置,选择POP3/SMTP/IMAP,开启POP3/SMTP/IMAP服务,设置授权码就可以了。

2. 下载nodemailer插件

在命令行输入:npm install --save nodemailer

3. 编写发送邮件代码

3.1 对发送激活邮件代码进行封装,然后导出:

//email.js

// 引入 nodemailer
const nodemailer = require('nodemailer');

// 创建一个SMTP客户端配置
const config = {
    host: 'smtp.163.com',
    port: 465,
    auth: {
      user: 'xxxx@163.com', //刚才注册的邮箱账号
      pass: 'xxxxxx' //邮箱的授权码,不是注册时的密码
    }
  };

// 创建一个SMTP客户端对象
const transporter = nodemailer.createTransport(config);

// 发送邮件
module.exports = function (mail){
  transporter.sendMail(mail, function(error, info){
    if(error) {
      return console.log(error);
    }
    console.log('mail sent:', info.response);
  });
};

3.2 进行测试:

//sendtest.js

var send = require('./email.js');


// 创建一个邮件对象
var mail = {
  // 发件人
  from: '极客教程 <xxxx@163.com>',
  // 主题
  subject: '[极客教程]激活邮箱账号',
  // 收件人
  to: 'xxxx@qq.com',
  // 邮件内容,HTML格式
  text: `尊敬的${user.name},您好!点击链接即可激活您的极客教程
      网账号,http://localhost:3000/checkCode?name=${user.name}&code=${user.code}为保障您的帐号安全,请在24小时内点击该链接,您也可以将链接复制到浏览器地址栏访问。 若如果您并未尝试修改密码,请忽略本邮件,由此给您带来的不便请谅解。本邮件由系统自动发出,请勿直接回复!` //接收激活请求的链接
};
send(mail);

成功就可以在测试的邮箱看到所发的信息。

Node.js实现注册邮箱激活功能的方法示例

4. 验证步骤

简单的讲一下如何实现邮箱验证。

1 . 在自己定义的数据库用户数据结构中一定要有激活码、过期时间、是否已经激活的字段,用于在激活时进行判断;

{
  code: String, //激活码,格式自己定义
  date: Number, //过期日期,过期后不能激活
  islive: Boolean //判断是否激活
}

2 . 发送激活链接,其中包含用户名和激活码,如下面这样:

// 创建一个邮件对象
var mail = {
  // 发件人
  from: '极客教程 <xxxx@163.com>',
  // 主题
  subject: '[极客教程]激活邮箱账号',
  // 收件人
  to: 'xxxx@qq.com',
  // 邮件内容,HTML格式
  text: `尊敬的${user.name},您好!点击链接即可激活您的极客教程
      网账号,http://localhost:3000/checkCode?name=${user.name}&code=${user.code}为保障您的帐号安全,请在24小时内点击该链接,您也可以将链接复制到浏览器地址栏访问。 若如果您并未尝试修改密码,请忽略本邮件,由此给您带来的不便请谅解。本邮件由系统自动发出,请勿直接回复!` //接收激活请求的链接
};
send(mail);

3 . 响应激活请求,根据激活链接的用户名进行查找,若用户存在则判断激活码是否一致,并判断激活码是否过期,全部正确则改变激活状态,此时激活成功,如下代码:

// check email code
exports.checkCode = function (req, res){
  var username = req.query.name;
  var code = req.query.code;
  User.findOne({name: username}, function (err, user){
      if (user.code === code && (user.date - Date.now()) > 0){
          User.update({name: username}, {islive: true}, function (err){
              if (err){
                  res.json({error: true})
              }else{
                  console.log(user)
                  res.json({ok: true})
              }
          });
      }else{
        res.json({
          email: user.mail,
          failure: true
        })
      }
  });
}

5. 遇到的问题

开发中遇到如下问题:

{ [AuthError: Invalid login - 535 Error: authentication failed]
name: ‘AuthError',
data: ‘535 Error: authentication failed',
stage: ‘auth' }

smtp服务器验证不通过,因为网易的邮箱有个授权限制,一定要好好检查你注册邮箱时的账号和授权码。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Jquery异步请求数据实例代码
Dec 28 Javascript
JS控制日期显示的小例子
Nov 23 Javascript
jQuery中 delegate使用的问题
Jul 03 Javascript
javascript实现C语言经典程序题
Nov 29 Javascript
基于JavaScript Array数组方法(新手必看篇)
Aug 20 Javascript
Angular2从搭建环境到开发步骤详解
Oct 17 Javascript
Vue响应式添加、修改数组和对象的值
Mar 20 Javascript
angular2中router路由跳转navigate的使用与刷新页面问题详解
May 07 Javascript
详解前端路由实现与react-router使用姿势
Aug 07 Javascript
详解vue-cli 构建Vue项目遇到的坑
Aug 30 Javascript
json字符串传到前台input的方法
Aug 06 Javascript
vuecli3.x中轻松4步带你使用tinymce的步骤
Jun 25 Javascript
Angular学习笔记之集成三方UI框架、控件的示例
Mar 23 #Javascript
Vue自定义过滤器格式化数字三位加一逗号实现代码
Mar 23 #Javascript
JavaScript 五大常见函数
Mar 23 #Javascript
JS中原始值和引用值的储存方式示例详解
Mar 23 #Javascript
剖析Angular Component的源码示例
Mar 23 #Javascript
vue利用axios来完成数据的交互
Mar 23 #Javascript
JS动画定时器知识总结
Mar 23 #Javascript
You might like
PHP5中使用PDO连接数据库的方法
2010/08/01 PHP
浅析51个PHP处理字符串的函数
2013/08/02 PHP
php实现四舍五入的方法小结
2015/03/03 PHP
php生成图片验证码
2015/06/09 PHP
Yii控制器中filter过滤器用法分析
2016/07/15 PHP
PHP PDOStatement::getAttribute讲解
2019/02/01 PHP
jquery制作弹窗提示窗口代码分享
2014/03/02 Javascript
jQuery实现的Div窗口震动特效
2014/06/09 Javascript
使用JavaScript进行进制转换将字符串转换为十进制
2014/09/21 Javascript
浅谈javascript语法和定时函数
2015/05/03 Javascript
详解React-Todos入门例子
2016/11/08 Javascript
bootstrap table 数据表格行内修改的实现代码
2017/02/13 Javascript
详解Angular 4 表单快速入门
2017/06/05 Javascript
js异步编程小技巧详解
2017/08/14 Javascript
js es6系列教程 - 基于new.target属性与es5改造es6的类语法
2017/09/02 Javascript
Angular4.x通过路由守卫进行路由重定向实现根据条件跳转到相应的页面(推荐)
2018/05/10 Javascript
js实现导航跟随效果
2018/11/17 Javascript
Vue分页效果与购物车功能
2019/12/13 Javascript
Node.js API详解之 dgram模块用法实例分析
2020/06/05 Javascript
使用vue编写h5公众号跳转小程序的实现代码
2020/11/27 Vue.js
JavaScript实现雪花飘落效果
2020/12/27 Javascript
python绘制双柱形图代码实例
2017/12/14 Python
Python正则表达式匹配和提取IP地址
2019/06/06 Python
解决python xx.py文件点击完之后一闪而过的问题
2019/06/24 Python
Matlab中plot基本用法的具体使用
2020/07/17 Python
boostrap modal 闪现问题的解决方法
2020/09/01 HTML / CSS
线程问题:wait()方法是定义在哪个类里面
2015/07/07 面试题
校园活动策划书范文
2014/01/10 职场文书
物流创业计划书
2014/02/01 职场文书
自主招生推荐信范文
2014/05/10 职场文书
出纳岗位职责
2015/01/31 职场文书
世界遗产导游词
2015/02/13 职场文书
2015年教师节贺卡寄语
2015/03/24 职场文书
机关工会工作总结2015
2015/05/26 职场文书
婚育证明样本
2015/06/16 职场文书
Golang 并发编程 SingleFlight模式
2022/04/26 Golang