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 text,radio,checkbox,select操作实现代码
Jul 09 Javascript
javascript工厂方式定义对象
Dec 26 Javascript
Node.js和MongoDB实现简单日志分析系统
Apr 25 Javascript
关于javascript事件响应的基础语法总结(必看篇)
Dec 26 Javascript
JavaScript实现提交模式窗口后刷新父窗口数据的方法
Jun 16 Javascript
vue在使用ECharts时的异步更新和数据加载详解
Nov 22 Javascript
详解用Node.js写一个简单的命令行工具
Mar 01 Javascript
vue实现打印功能的两种方法
Sep 07 Javascript
微信小程序 网络通信实现详解
Jul 23 Javascript
Elementui表格组件+sortablejs实现行拖拽排序的示例代码
Aug 28 Javascript
浅谈vue获得后台数据无法显示到table上面的坑
Aug 13 Javascript
基于javascript实现放大镜特效
Dec 03 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
PHP 查找字符串常用函数介绍
2012/06/07 PHP
腾讯QQ微博API接口获取微博内容
2013/10/30 PHP
php实现Mongodb自定义方式生成自增ID的方法
2015/03/23 PHP
基于PHP实现用户在线状态检测
2020/11/10 PHP
js计数器代码
2006/11/04 Javascript
Jquery.LazyLoad.js修正版下载,实现图片延迟加载插件
2011/03/12 Javascript
JavaScript内核之基本概念
2011/10/21 Javascript
jquery批量控制form禁用的代码
2013/08/06 Javascript
javascript中文本框中输入法切换的问题
2013/12/10 Javascript
jQuery的选择器中的通配符使用介绍
2014/03/20 Javascript
javascript实现的猜数小游戏完整实例代码
2016/05/10 Javascript
AngularJS基础 ng-model-options 指令简单示例
2016/08/02 Javascript
JavaScript 中有关数组对象的方法(详解)
2016/08/15 Javascript
在js中实现邮箱格式的验证方法(推荐)
2016/10/24 Javascript
页面间固定参数,通过cookie传值的实现方法
2017/05/31 Javascript
JavaScript适配器模式详解
2017/10/19 Javascript
基于vue 实现token验证的实例代码
2017/12/14 Javascript
在微信小程序中渲染HTML内容的方法示例
2018/09/28 Javascript
Vuex实现数据共享的方法
2019/12/20 Javascript
python求斐波那契数列示例分享
2014/02/14 Python
python实现微信接口(itchat)详细介绍
2017/10/23 Python
Python3 replace()函数使用方法
2018/03/19 Python
Pandas中把dataframe转成array的方法
2018/04/13 Python
用sqlalchemy构建Django连接池的实例
2019/08/29 Python
Python利用PyExecJS库执行JS函数的案例分析
2019/12/18 Python
用python按照图像灰度值统计并筛选图片的操作(PIL,shutil,os)
2020/06/04 Python
Python Django中间件使用原理及流程分析
2020/06/13 Python
Python浮点型(float)运算结果不正确的解决方案
2020/09/22 Python
python Autopep8实现按PEP8风格自动排版Python代码
2021/03/02 Python
美国高品质个性化珠宝销售网站:Jewlr
2018/05/03 全球购物
Python中pass语句的作用是什么
2016/06/01 面试题
网站美工岗位职责
2014/04/02 职场文书
大学理论知识学习自我鉴定
2014/04/28 职场文书
支部书记四风问题自我剖析材料
2014/09/29 职场文书
2016国庆节67周年寄语
2015/12/07 职场文书
Jupyter notebook 输出部分显示不全的解决方案
2021/04/24 Python