Node.js如何实现注册邮箱激活功能 (常见)


Posted in Javascript onJuly 23, 2017

一. 先注册一个支持发送验证邮件的邮箱,网易的126邮箱就可以

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

二. 下载nodemailer插件

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

三. 编写发送邮件代码:

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

//email.js
// 引入 nodemailer
var nodemailer = require('nodemailer');
// 创建一个SMTP客户端配置
var config = {
    host: 'smtp.126.com', 
    port: 25,
    auth: {
      user: 'xxx@126.com', //刚才注册的邮箱账号
      pass: 'xxxxxx' //邮箱的授权码,不是注册时的密码
    }
  };
// 创建一个SMTP客户端对象
var 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);
  });
};

2 . 进行测试:

//sendtest.js
var send = require('./mail-test');
// 创建一个邮件对象
var mail = {
  // 发件人
  from: '流觞曲水 <xxx@126.com>',
  // 主题
  subject: '测试',
  // 收件人
  to: 'xxx@qq.com',
  // 邮件内容,HTML格式
  text: '点击激活:xxx' //接收激活请求的链接
};
send(mail);

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

四. 验证步骤

就我自己之前写的一个个人博客的项目而言,简单的讲一下如何实现邮箱验证。

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

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

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

// 创建一个邮件对象
  var mail = {
    // 发件人
    from: '小静博客 <xiaojing@126.com>',
    // 主题
    subject: '激活账号',
    // 收件人
    to: usermess.email, //发送给注册时填写的邮箱
    // 邮件内容,HTML格式
    text: '点击激活:<a href="http://localhost:3000/checkCode?name='+ usermess.name +'&code='+ usermess.code + '" rel="external nofollow" ></a>'
  };

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

exports.checkCode = function (req, res){
  var username = req.query.name;
  var code = req.query.code;
  var outdate = req.query.outdate;
  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.render('login', {
            title: '登录',
            error: '激活失败!'
          });
        }else{
          res.render('login', {
            title: '登录',
            error: '激活成功请登录!'
          });
        }
      });
    }
  });
}

以上所述是小编给大家介绍的Node.js如何实现注册邮箱激活功能 ,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

Javascript 相关文章推荐
js 动态添加标签(新增一行,其实很简单,就是几个函数的应用)
Mar 26 Javascript
javascript 写类方式之一
Jul 05 Javascript
jquery实现的让超出显示范围外的导航自动固定屏幕最顶上
Sep 22 Javascript
jQuery UI Autocomplete 1.8.16 中文输入修正代码
Apr 16 Javascript
2014 HTML5/CSS3热门动画特效TOP10
Dec 07 Javascript
分享2个jQuery插件--jquery.fileupload与artdialog
Dec 26 Javascript
使用js画图之圆、弧、扇形
Jan 12 Javascript
Node.js 学习笔记之简介、安装及配置
Mar 03 Javascript
jQuery判断是否存在滚动条的简单方法
Sep 17 Javascript
bootstrap轮播模板使用方法详解
Nov 17 Javascript
node.js中axios使用心得总结
Nov 29 Javascript
vue的hash值原理也是table切换实例代码
Dec 14 Vue.js
jQuery.Ajax()的data参数类型详解
Jul 23 #jQuery
vue axios用法教程详解
Jul 23 #Javascript
bootstrap table插件的分页与checkbox使用详解
Jul 23 #Javascript
关于JavaScript中的this指向问题总结篇
Jul 23 #Javascript
浅析JS中常用类型转换及运算符表达式
Jul 23 #Javascript
js实现带进度条提示的多视频上传功能
Dec 13 #Javascript
基于javaScript的this指向总结
Jul 22 #Javascript
You might like
由php if 想到的些问题
2008/03/22 PHP
PHP实现手机归属地查询API接口实现代码
2012/08/27 PHP
php命令行(cli)下执行PHP脚本文件的相对路径的问题解决方法
2015/05/25 PHP
详解PHP实现异步调用的4种方法
2016/03/14 PHP
thinkPHP5.0框架独立配置与动态配置方法
2017/03/17 PHP
HTML中的setCapture和releaseCapture使用介绍
2012/03/21 Javascript
关于jquery css的使用介绍
2013/04/18 Javascript
JavaScript字符串对象toUpperCase方法入门实例(用于把字母转换为大写)
2014/10/17 Javascript
Node.js中的流(Stream)介绍
2015/03/30 Javascript
基于jquery实现弹幕效果
2016/09/29 Javascript
聊聊JavaScript如何实现继承及特点
2017/04/07 Javascript
vue项目中使用axios上传图片等文件操作
2017/11/02 Javascript
JavaScript 数组去重并统计重复元素出现的次数实例
2017/12/14 Javascript
js实现一个简单的MVVM框架示例
2018/01/15 Javascript
微信小程序开发问题之wx.previewImage
2018/12/25 Javascript
基于JS实现简单滑块拼图游戏
2019/10/12 Javascript
python实现迭代法求方程组的根过程解析
2019/11/25 Javascript
[03:40]2014DOTA2国际邀请赛 B神专访:躲箭真的很难
2014/07/13 DOTA
python解决字典中的值是列表问题的方法
2013/03/04 Python
Django Admin实现上传图片校验功能
2016/03/06 Python
Python常用内置模块之xml模块(详解)
2017/05/23 Python
Django Admin 实现外键过滤的方法
2017/09/29 Python
Python实现获取照片拍摄日期并重命名的方法
2017/09/30 Python
关于python列表增加元素的三种操作方法
2018/08/22 Python
PyTorch中model.zero_grad()和optimizer.zero_grad()用法
2020/06/24 Python
Python里面如何实现tuple和list的转换
2012/06/13 面试题
博士研究生自我鉴定范文
2013/12/04 职场文书
警示教育活动总结
2014/05/05 职场文书
完美的中文自荐信
2014/05/24 职场文书
2015年路政工作总结
2015/05/22 职场文书
董事会决议范本
2015/07/01 职场文书
利用html+css实现菜单栏缓慢下拉效果的示例代码
2021/03/30 HTML / CSS
几款流行的HTML5 UI框架比较(小结)
2021/04/08 HTML / CSS
Vue3.0写自定义指令的简单步骤记录
2021/06/27 Vue.js
在js中修改html body的样式
2021/11/11 Javascript
Java字符缓冲流BufferedWriter
2022/04/09 Java/Android