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 相关文章推荐
ASP Json Parser修正版
Dec 06 Javascript
基于Jquery与WebMethod投票功能实现代码
Jan 19 Javascript
仿微博字符限制效果实现代码
Apr 20 Javascript
Jquery实现搜索框提示功能示例代码
Aug 13 Javascript
Javascript中常见的逻辑题和解决方法
Sep 17 Javascript
BootStrap Fileinput初始化时的一些参数
Dec 30 Javascript
jQuery、zepto、js常用小技巧
Feb 12 Javascript
Cpage.js给组件绑定事件的实现代码
Aug 31 Javascript
详解node nvm进行node多版本管理
Oct 21 Javascript
使用vue.js在页面内组件监听scroll事件的方法
Sep 11 Javascript
vue3.0 CLI - 2.5 - 了解组件的三维
Sep 14 Javascript
jQuery 点击获取验证码按钮及倒计时功能
Sep 20 jQuery
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压缩HTML函数轻松实现压缩html/js/Css及注意事项
2013/01/27 PHP
php获取表单中多个同名input元素的值
2014/03/20 PHP
PHP自动重命名文件实现方法
2014/11/04 PHP
php实现简单的语法高亮函数实例分析
2015/04/27 PHP
PHP编程 SSO详细介绍及简单实例
2017/01/13 PHP
JavaScript 检测浏览器和操作系统的脚本
2008/12/26 Javascript
用js解决数字不能换行问题
2010/08/10 Javascript
基于JavaScript创建动态Dom
2015/12/08 Javascript
Javascript实现图片轮播效果(一)让图片跳动起来
2016/02/17 Javascript
原生js实现回复评论功能
2017/01/18 Javascript
在iframe中使bootstrap的模态框在父页面弹出问题
2017/08/07 Javascript
使用vue-resource进行数据交互的实例
2017/09/02 Javascript
移动端网页开发调试神器Eruda的介绍与使用技巧
2017/10/30 Javascript
react-router browserHistory刷新页面404问题解决方法
2017/12/29 Javascript
JS实现的将html转为pdf功能【基于浏览器端插件jsPDF】
2018/02/06 Javascript
详解基于DllPlugin和DllReferencePlugin的webpack构建优化
2018/06/28 Javascript
vuex 中插件的编写案例解析
2019/06/10 Javascript
[59:15]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第一场 11.20
2020/11/20 DOTA
Python学习笔记(二)基础语法
2014/06/06 Python
Python中列表(list)操作方法汇总
2014/08/18 Python
Python中的数学运算操作符使用进阶
2016/06/20 Python
使用Python中的tkinter模块作图的方法
2017/02/07 Python
通过Python模块filecmp 对文件比较的实现方法
2018/06/29 Python
Python实现将Excel转换成xml的方法示例
2018/08/25 Python
Python编程在flask中模拟进行Restful的CRUD操作
2018/12/28 Python
Pyqt助手安装PyQt5帮助文档过程图解
2020/11/20 Python
英国折扣零售连锁店:QD Stores
2018/12/08 全球购物
大学校庆策划书
2014/01/31 职场文书
中学教师教育感言
2014/02/21 职场文书
大学生个人自荐信
2014/02/24 职场文书
处级干部考察材料
2014/12/24 职场文书
幼儿园大班教师随笔
2015/08/14 职场文书
温馨祝福晨语:美丽的一天从我的问候开始
2019/11/28 职场文书
Java基于字符界面的简易收银台
2021/06/26 Java/Android
golang为什么要统一错误处理
2022/04/03 Golang
德生BCL3000抢先使用感受和评价
2022/04/07 无线电