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 style 中visibility和display之间的区别
Jan 22 Javascript
Colortip基于jquery的信息提示框插件在IE6下面的显示问题修正方法
Dec 06 Javascript
40款非常有用的 jQuery 插件推荐(系列一)
Dec 21 Javascript
可简单避免的三个JS发布错误的详细介绍
Aug 02 Javascript
JS简单计算器实例
Jan 20 Javascript
etmvc+jQuery EasyUI+combobox多值操作实现角色授权实例
Nov 09 Javascript
JavaScript表单验证开发
Nov 23 Javascript
详解微信小程序 相对定位和绝对定位
May 11 Javascript
angularjs实现搜索的关键字在正文中高亮出来
Jun 13 Javascript
jQuery封装placeholder效果实现方法,让低版本浏览器支持该效果
Jul 08 jQuery
对Vue2 自定义全局指令Vue.directive和指令的生命周期介绍
Aug 30 Javascript
JS获取并处理php数组的方法实例分析
Sep 04 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数据库开发知多少
2006/10/09 PHP
用PHP将数据导入到Foxmail
2006/10/09 PHP
Yii获取当前url和域名的方法
2015/06/08 PHP
fsockopen pfsockopen函数被禁用,SMTP发送邮件不正常的解决方法
2015/09/20 PHP
php使用ffmpeg获取视频信息并截图的实现方法
2016/05/03 PHP
PHP目录操作实例总结
2016/09/27 PHP
PHP运用foreach神奇的转换数组(实例讲解)
2018/02/01 PHP
JS实现模仿微博发布效果实例代码
2013/12/16 Javascript
动态显示可输入的字数提示还可以输入的字数
2014/04/01 Javascript
JavaScript中的函数的两种定义方式和函数变量赋值
2014/05/12 Javascript
关于jQuery判断元素是否存在的问题示例探讨
2014/07/21 Javascript
JavaScript BASE64算法实现(完美解决中文乱码)
2017/01/10 Javascript
angular $watch 一个变量的变化(实例讲解)
2017/08/02 Javascript
Web开发使用Angular实现用户密码强度判别的方法
2017/09/27 Javascript
webpack源码之loader机制详解
2018/04/06 Javascript
React+EggJs实现断点续传的示例代码
2020/07/07 Javascript
浅谈js数组splice删除某个元素爬坑
2020/10/14 Javascript
[00:55]深扒TI7聊天轮盘语音出处3
2017/05/11 DOTA
[49:15]DOTA2-DPC中国联赛 正赛 CDEC vs XG BO3 第二场 1月19日
2021/03/11 DOTA
python回调函数的使用方法
2014/01/23 Python
使用Filter过滤python中的日志输出的实现方法
2019/07/17 Python
Python中logging日志库实例详解
2020/02/19 Python
在python3中实现更新界面
2020/02/21 Python
python中 _、__、__xx__()区别及使用场景
2020/06/30 Python
pycharm 关闭search everywhere的解决操作
2021/01/15 Python
美国知名日用品连锁超市:Dollar General(多来店)
2017/01/14 全球购物
猫咪家具:CatsPlay
2018/11/03 全球购物
加拿大拼图大师:Puzzle Master
2020/12/28 全球购物
《诺贝尔》教学反思
2014/02/17 职场文书
我的小天地教学反思
2014/04/30 职场文书
爱情保证书
2015/01/17 职场文书
家庭暴力离婚起诉书
2015/05/18 职场文书
运动会通讯稿50字
2015/07/20 职场文书
《兰兰过桥》教学反思
2016/02/20 职场文书
中国现代文学之经典散文三篇
2019/09/18 职场文书
使用Redis实现分布式锁的方法
2022/06/16 Redis