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 相关文章推荐
javascript动态改变img的src属性图片不显示的解决方法
Oct 20 Javascript
JavaScript 图像动画的小demo
May 23 Javascript
jQuery处理xml格式的返回数据(实例解析)
Nov 28 Javascript
js中for in的用法示例解析
Dec 25 Javascript
js文字横向滚动特效
Nov 11 Javascript
利用JS生成博文目录及CSS定制博客
Feb 10 Javascript
快速掌握jquery分页插件jqPaginator的使用方法
Aug 09 jQuery
javascript回调函数详解
Feb 06 Javascript
详解Vue基于 Nuxt.js 实现服务端渲染(SSR)
Apr 05 Javascript
nuxt.js中间件实现拦截权限判断的方法
Nov 21 Javascript
webpack file-loader和url-loader的区别
Jan 15 Javascript
微信小程序图片左右摆动效果详解
Jul 13 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
phpMyAdmin 链接表的附加功能尚未激活问题的解决方法(已测)
2012/03/27 PHP
Php output buffering缓存及程序缓存深入解析
2013/07/15 PHP
javascript的函数、创建对象、封装、属性和方法、继承
2011/03/10 Javascript
基于JQuery的多标签实现代码
2012/09/19 Javascript
异步动态加载JS并运行(示例代码)
2013/12/13 Javascript
js对table的td进行相同内容合并示例详解
2013/12/27 Javascript
jquery attr方法获取input的checked属性问题
2014/05/26 Javascript
node.js中的console.dir方法使用说明
2014/12/10 Javascript
jquery表单验证需要做些什么
2015/11/17 Javascript
javascript使用Promise对象实现异步编程
2016/03/01 Javascript
JS获取当前使用的浏览器名字以及版本号实现方法
2016/08/19 Javascript
Javascript中的getter和setter初识
2017/08/17 Javascript
基于AngularJS的简单使用详解
2017/09/10 Javascript
轻松理解vue的双向数据绑定问题
2017/10/30 Javascript
nuxt.js 缓存实践
2018/06/25 Javascript
video.js 实现视频只能后退不能快进的思路详解
2018/08/09 Javascript
Vue环境搭建+VSCode+Win10的详细教程
2020/08/19 Javascript
[01:45]IMBATV TI4前线报道-选手到达
2014/07/07 DOTA
[40:56]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 Liquid vs TNC
2018/04/01 DOTA
列举Python中吸引人的一些特性
2015/04/09 Python
Python中的localtime()方法使用详解
2015/05/22 Python
Python字符编码与函数的基本使用方法
2017/09/30 Python
Django基础知识 web框架的本质详解
2019/07/18 Python
使用pyinstaller逆向.pyc文件
2019/12/20 Python
详解Python 实现 ZeroMQ 的三种基本工作模式
2020/03/24 Python
利用python绘制中国地图(含省界、河流等)
2020/09/21 Python
艺术设计专业个人求职信
2013/09/21 职场文书
土木工程应届生自荐信
2013/09/24 职场文书
端午节粽子促销活动方案
2014/02/02 职场文书
作风建设演讲稿
2014/05/23 职场文书
临床医学专业求职信
2014/08/08 职场文书
九九重阳节标语
2014/10/07 职场文书
公安机关纪律作风整顿个人剖析材料材料
2014/10/10 职场文书
担保书格式
2015/01/20 职场文书
银行求职信范文
2019/05/13 职场文书