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 相关文章推荐
使用JQuery快速实现Tab的AJAX动态载入(实例讲解)
Dec 11 Javascript
js获取html页面节点方法(递归方式)
Dec 13 Javascript
高效Web开发的10个jQuery代码片段
Jul 22 Javascript
jQuery绑定事件的四种方式介绍
Oct 31 Javascript
小程序开发基础之view视图容器
Aug 21 Javascript
vue.js实现带日期星期的数字时钟功能示例
Aug 28 Javascript
基于Vue实现图片在指定区域内移动的思路详解
Nov 11 Javascript
使用Vue实现调用接口加载页面初始数据
Oct 28 Javascript
一起写一个即插即用的Vue Loading插件实现
Oct 31 Javascript
vue双向绑定数据限制长度的方法
Nov 04 Javascript
js HTML DOM EventListener功能与用法实例分析
Apr 27 Javascript
浅谈Ant Design Pro 菜单自定义 icon
Nov 17 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
smarty 原来也不过如此~~呵呵
2006/11/25 PHP
global.php
2006/12/09 PHP
一周学会PHP(视频)Http下载
2006/12/12 PHP
php 批量替换程序的具体实现代码
2013/10/04 PHP
destoon公司主页模板风格的添加方法
2014/06/20 PHP
Zend Framework入门知识点小结
2016/03/19 PHP
浅谈PHPANALYSIS提取关键字
2019/03/08 PHP
客户端脚本中常常出现的一些问题和调试技巧
2007/01/09 Javascript
学习YUI.Ext 第二天
2007/03/10 Javascript
简略的前端架构心得&amp;&amp;基于editor为例子的编码小技巧
2010/11/25 Javascript
Js日期选择自动填充到输入框(界面漂亮兼容火狐)
2013/08/02 Javascript
利用浏览器全屏api实现js全屏
2014/01/16 Javascript
Es6 写的文件import 起来解决方案详解
2016/12/13 Javascript
Angular实现跨域(搜索框的下拉列表)
2017/02/16 Javascript
详解Angular 4 表单快速入门
2017/06/05 Javascript
Vue组件创建和传值的方法
2018/08/17 Javascript
详解VUE里子组件如何获取父组件动态变化的值
2018/12/26 Javascript
详解React中合并单元格的正确写法
2019/01/08 Javascript
webpack项目使用eslint建立代码规范实现
2019/05/16 Javascript
[02:11]2016国际邀请赛中国区预选赛全程回顾
2016/07/01 DOTA
Python对列表去重的多种方法(四种方法)
2017/12/05 Python
python实现桌面壁纸切换功能
2019/01/21 Python
Django文件存储 默认存储系统解析
2019/08/02 Python
python rsync服务器之间文件夹同步脚本
2019/08/29 Python
python主线程与子线程的结束顺序实例解析
2019/12/17 Python
体验完美剃须:The Art of Shaving
2018/08/06 全球购物
安全宣传标语
2014/06/10 职场文书
2014年有孩子的离婚协议书范本
2014/10/08 职场文书
单位法人授权委托书范本
2014/10/09 职场文书
学生逃课检讨书1000字
2014/10/20 职场文书
离婚协议书范文
2015/01/26 职场文书
采购内勤岗位职责
2015/04/13 职场文书
回复函格式及范文
2015/07/14 职场文书
培训后的感想
2015/08/07 职场文书
nginx七层负载均衡配置详解
2022/07/15 Servers
win10拖拽文件时崩溃怎么解决?win10文件不能拖拽问题解决方法
2022/08/14 数码科技