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 相关文章推荐
javascript编程起步(第二课)
Feb 27 Javascript
JavaScript CSS 修改学习第四章 透明度设置
Feb 19 Javascript
javascript数组遍历for与for in区别详解
Dec 04 Javascript
jQuery自定义动画函数实例详解(附demo源码)
Dec 10 Javascript
Bootstarp风格的toggle效果分享
Feb 23 Javascript
JS基于clipBoard.js插件实现剪切、复制、粘贴
May 03 Javascript
JS实现关闭当前页而不弹出提示框的方法
Jun 22 Javascript
深入讲解xhr(XMLHttpRequest)/jsonp请求之abort
Jul 26 Javascript
微信小程序scroll-view组件实现滚动动画
Jan 31 Javascript
vue之组件内监控$store中定义变量的变化详解
Nov 08 Javascript
JS实现小星星特效
Dec 24 Javascript
基于JavaScript判断两个对象内容是否相等
Jan 10 Javascript
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
laravel数据库查询结果自动转数组修改实例
2021/02/27 PHP
Code:loadScript( )加载js的功能函数
2007/02/02 Javascript
Use Word to Search for Files
2007/06/15 Javascript
Ajax,UTF-8还是GB2312 eval 还是execScript
2008/11/13 Javascript
javascript的offset、client、scroll使用方法详解
2012/12/25 Javascript
谈谈关于JavaScript 中的 MVC 模式
2013/04/11 Javascript
用JQuery 判断某个属性是否存在hasAttr的解决方法
2013/04/26 Javascript
js在输入框屏蔽按键,只能键入数字的示例代码
2014/01/03 Javascript
JS替换字符串中字符即替换全部而不是第一个
2014/06/04 Javascript
js中flexible.js实现淘宝弹性布局方案
2020/06/23 Javascript
JavaScript中eval函数的问题
2016/01/31 Javascript
深入理解(function(){... })();
2016/08/16 Javascript
js获取元素下的第一级子元素的方法(推荐)
2017/03/05 Javascript
AngularJS之自定义服务详解(factory、service、provider)
2017/04/14 Javascript
vant(ZanUi)结合async-validator实现表单验证的方法
2018/12/06 Javascript
jQuery实现数字华容道小游戏(实例代码)
2020/01/16 jQuery
基于原生js实现判断元素是否有指定class名
2020/07/11 Javascript
python解析xml文件操作实例
2014/10/05 Python
github配置使用指南
2014/11/18 Python
python实现csv格式文件转为asc格式文件的方法
2018/03/23 Python
Python数据结构之图的应用示例
2018/05/11 Python
详解python如何在django中为用户模型添加自定义权限
2018/10/15 Python
Python OpenCV读取png图像转成jpg图像存储的方法
2018/10/28 Python
linux环境下Django的安装配置详解
2019/07/22 Python
Python使用Beautiful Soup爬取豆瓣音乐排行榜过程解析
2019/08/15 Python
荷兰多品牌网上鞋店:Stoute Schoenen
2017/08/24 全球购物
维珍澳洲航空官网:Virgin Australia
2017/09/08 全球购物
新西兰最大的品牌运动鞋购物网站:Platypus NZ
2017/10/27 全球购物
PatPat香港:婴童服饰和亲子全家装在线购物
2020/09/27 全球购物
大学生职业生涯规划范文
2013/12/31 职场文书
保密工作目标责任书
2014/07/28 职场文书
廉政承诺书
2015/01/19 职场文书
婚礼嘉宾致辞
2015/07/28 职场文书
小学体育跳绳课教学反思
2016/02/16 职场文书
Java Lambda表达式常用的函数式接口
2022/04/07 Java/Android
Windows Server 2012配置DNS服务器的方法
2022/04/29 Servers