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 相关文章推荐
div浮层,滚动条移动,位置保持不变的4种方法汇总
Dec 11 Javascript
jQuery的css()方法用法实例
Dec 24 Javascript
jQuery中:input选择器用法实例
Jan 03 Javascript
JavaScript中的方法重载实例
Mar 16 Javascript
jQuery实现选项卡切换效果简单演示
Dec 09 Javascript
js表单中选择框值的获取及表单的序列化
Dec 17 Javascript
JS闭包与延迟求值用法示例
Dec 22 Javascript
JS拉起或下载app的实现代码
Feb 22 Javascript
React-Native 组件之 Modal的使用详解
Aug 08 Javascript
详解vue mint-ui源码解析之loadmore组件
Oct 11 Javascript
Angular实现类似博客评论的递归显示及获取回复评论的数据
Nov 06 Javascript
利用vue3+ts实现管理后台(增删改查)
Oct 30 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
一个SQL管理员的web接口
2006/10/09 PHP
mysql下创建字段并设置主键的php代码
2010/05/16 PHP
PHP显示今天、今月、上月、今年的起点/终点时间戳的代码
2011/05/25 PHP
php中计算未知长度的字符串哪个字符出现的次数最多的代码
2012/08/14 PHP
修改php.ini以达到屏蔽错误信息并记录日志
2013/06/16 PHP
Yii2 GridView实现列表页直接修改数据的方法
2016/05/16 PHP
Laravel 5.5 实现禁用用户注册示例
2019/10/24 PHP
js 浏览本地文件夹系统示例代码
2013/10/24 Javascript
JS小游戏之象棋暗棋源码详解
2014/09/25 Javascript
JavaScript定义变量和变量优先级问题探讨
2014/10/11 Javascript
基于jQuery实现select下拉选择可输入附源码下载
2016/02/03 Javascript
JQuery DIV 动态隐藏和显示的方法
2016/06/23 Javascript
基于jQuery实现的单行公告活动轮播效果
2017/08/23 jQuery
10分钟上手vue-cli 3.0 入门介绍
2018/04/04 Javascript
微信小程序开发的基本流程步骤
2019/01/31 Javascript
javascript移动端 电子书 翻页效果实现代码
2019/09/07 Javascript
Bootstrap实现模态框效果
2019/09/30 Javascript
[32:47]完美世界DOTA2联赛 GXR vs IO 第二场 11.07
2020/11/09 DOTA
Python创建系统目录的方法
2015/03/11 Python
Python实现按学生年龄排序的实际问题详解
2017/08/29 Python
Python中一些不为人知的基础技巧总结
2018/05/19 Python
Python开发最牛逼的IDE——pycharm
2018/08/01 Python
python矩阵的转置和逆转实例
2018/12/12 Python
python 自定义对象的打印方法
2019/01/12 Python
pandas.DataFrame的pivot()和unstack()实现行转列
2019/07/06 Python
python数据处理之如何选取csv文件中某几行的数据
2019/09/02 Python
flask框架渲染Jinja模板与传入模板变量操作详解
2020/01/25 Python
canvas实现扭蛋机动画效果的示例代码
2018/10/17 HTML / CSS
轻松制作精彩视频:Animoto
2018/09/19 全球购物
初级Java程序员面试题
2016/03/03 面试题
建筑设计师岗位职责
2013/11/18 职场文书
计算机网络专业推荐信
2013/11/24 职场文书
上课迟到检讨书
2014/01/19 职场文书
药学专业学生的自我评价分享
2014/02/06 职场文书
毕业设计工作总结
2015/08/14 职场文书
幼儿教师师德培训心得体会
2016/01/09 职场文书