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 相关文章推荐
在你的网页中嵌入外部网页的方法
Apr 02 Javascript
JavaScript 基础知识 被自己遗忘的
Oct 15 Javascript
在chrome中window.onload事件的一些问题
Mar 01 Javascript
jQuery之尺寸调整组件的深入解析
Jun 19 Javascript
javacript获取当前屏幕大小
Jun 04 Javascript
bootstrap IE8 兼容性处理
Mar 22 Javascript
JS实现复选框的全选和批量删除功能
Apr 05 Javascript
JQuery 封装 Ajax 常用方法(推荐)
May 21 jQuery
打造通用的匀速运动框架(实例讲解)
Oct 17 Javascript
Angular搜索 过滤 批量删除 添加 表单验证功能集锦(实例代码)
Oct 25 Javascript
Webpack之tree-starking 解析
Sep 11 Javascript
vue实现滚动鼠标滚轮切换页面
Dec 13 Vue.js
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
使用 php4 加速 web 传输
2006/10/09 PHP
php简单封装了一些常用JS操作
2007/02/25 PHP
php通过baihui网API实现读取word文档并展示
2015/06/22 PHP
jQuery函数的第二个参数获取指定上下文中的DOM元素
2014/05/19 Javascript
jQuery源码解读之addClass()方法分析
2015/02/20 Javascript
如何利用JS通过身份证号获取当事人的生日、年龄、性别
2016/01/22 Javascript
jQuery解析与处理服务器端返回xml格式数据的方法详解
2016/07/04 Javascript
AngularJS 中文API参考手册
2016/07/28 Javascript
使用Ajax与服务器(JSON)通信实例
2016/11/04 Javascript
webpack独立打包和缓存处理详解
2017/04/03 Javascript
如何使用JS在HTML中自定义字符串格式化
2017/07/20 Javascript
bootstrap datetimepicker控件位置异常的解决方法
2017/11/23 Javascript
JavaScript监听键盘事件代码实现
2020/06/03 Javascript
详解Vue.js 响应接口
2020/07/04 Javascript
[01:31:22]DOTA2-DPC中国联赛定级赛 LBZS vs Magma BO3第二场 1月10日
2021/03/11 DOTA
Python多线程编程(二):启动线程的两种方法
2015/04/05 Python
python使用itchat实现手机控制电脑
2018/02/22 Python
Python中的二维数组实例(list与numpy.array)
2018/04/13 Python
利用python GDAL库读写geotiff格式的遥感影像方法
2018/11/29 Python
python面试题Python2.x和Python3.x的区别
2019/05/28 Python
python列表每个元素同增同减和列表元素去空格的实例
2019/07/20 Python
Flask框架搭建虚拟环境的步骤分析
2019/12/21 Python
pytorch:torch.mm()和torch.matmul()的使用
2019/12/27 Python
Python利用全连接神经网络求解MNIST问题详解
2020/01/14 Python
Python3基本输入与输出操作实例分析
2020/02/14 Python
Python如何输出整数
2020/06/07 Python
python和node.js生成当前时间戳的示例
2020/09/29 Python
HTML5手机端弹出遮罩菜单特效代码
2016/01/27 HTML / CSS
BCBG官网:BCBGMAXAZRIA
2017/12/29 全球购物
澳大利亚婴儿喂养品牌:Cherub Baby
2018/11/01 全球购物
Charles&Keith美国官方网站:新加坡快时尚鞋类和配饰零售商
2019/11/27 全球购物
Ever New美国:澳大利亚领先的女装时尚品牌
2019/11/28 全球购物
程序员求职信
2014/04/16 职场文书
模具专业自荐信
2014/05/29 职场文书
2016中秋节月饼促销广告语
2016/01/28 职场文书
pnpm对npm及yarn降维打击详解
2022/08/05 Javascript