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 相关文章推荐
WordPress 照片lightbox效果的运用几点
Jun 22 Javascript
jquery数据验证插件(自制,简单,练手)实例代码
Oct 24 Javascript
JS中判断null、undefined与NaN的方法
Mar 24 Javascript
实现checkbox全选、反选、取消JavaScript小脚本异常
Apr 10 Javascript
网站接入QQ登录的两种方法
Jul 22 Javascript
更快的异步执行(setTimeout多浏览器)
Aug 12 Javascript
javascript实现简单的全选和反选功能
Jan 05 Javascript
IOS中safari下的select下拉菜单文字过长不换行的解决方法
Sep 26 Javascript
bootstrap弹出层的多种触发方式
May 10 Javascript
利用pm2部署多个node.js项目的配置教程
Oct 22 Javascript
使用vue制作探探滑动堆叠组件的实例代码
Mar 07 Javascript
JS实现简单的九宫格抽奖
Jun 28 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
PHP判断图片格式的七种方法小结
2013/06/03 PHP
将酷狗krc歌词解析并转换为lrc歌词php源码
2014/06/20 PHP
PHP匿名函数(闭包函数)详解
2019/03/22 PHP
Maps Javascript
2007/01/22 Javascript
JS命名空间的另一种实现
2013/08/09 Javascript
JavaScript自定义事件介绍
2013/08/29 Javascript
javascript函数作用域学习示例(js作用域)
2014/01/13 Javascript
创建你的第一个AngularJS应用的方法
2015/06/16 Javascript
JavaScript中对DOM节点的访问、创建、修改、删除
2015/11/16 Javascript
jQuery操作Table技巧大汇总
2016/01/23 Javascript
TypeScript Type Innference(类型判断)
2016/03/10 Javascript
vue.js模仿京东省市区三级联动的选择组件实例代码
2017/11/22 Javascript
vue实现导航栏效果(选中状态刷新不消失)
2017/12/13 Javascript
Vue中保存数据到磁盘文件的方法
2018/09/06 Javascript
详解Vue组件之作用域插槽
2018/11/22 Javascript
JS函数节流和防抖之间的区分和实现详解
2019/01/11 Javascript
基于Vue sessionStorage实现保留搜索框搜索内容
2020/06/01 Javascript
js实现简单扫雷
2020/11/27 Javascript
Python中import机制详解
2017/11/14 Python
Sanic框架Cookies操作示例
2018/07/17 Python
Flask-Mail用法实例分析
2018/07/21 Python
python使用tkinter库实现五子棋游戏
2019/06/18 Python
Python读取xlsx文件的实现方法
2019/07/04 Python
Python Django的安装配置教程图文详解
2019/07/17 Python
python爬虫开发之PyQuery模块详细使用方法与实例全解
2020/03/09 Python
python3让print输出不换行的方法
2020/08/24 Python
CSS3 倾斜的网页图片库实例教程
2009/11/14 HTML / CSS
英国高街品牌:Miss Selfridge(塞尔弗里奇小姐)
2016/09/21 全球购物
TripAdvisor德国:全球领先的旅游网站
2017/12/07 全球购物
什么是命名空间(NameSpace)
2015/11/24 面试题
大学生职业规划前言模板
2013/12/27 职场文书
会计工作心得体会
2014/01/13 职场文书
2014年四风个人对照检查及整改措施
2014/10/28 职场文书
销售督导岗位职责
2015/04/10 职场文书
深度学习tensorflow基础mnist
2021/04/14 Python
MySQL中的布尔值,怎么存储false或true
2021/06/04 MySQL