Node.js实现注册邮箱激活功能的方法示例


Posted in Javascript onMarch 23, 2018

在做自己的node项目极客教程时,需要开发一个注册邮箱激活的功能,这个功能非常常见,当我们注册一个账号时,肯定会有这步,下面看下如何实现这个功能。

1. 注册邮箱

先注册一个支持发送验证邮件的邮箱,我这里注册的是网易的163邮箱,所以下面都是以163邮箱作为发件邮箱

注册成功后进行登录,然后点击导航栏的设置,选择POP3/SMTP/IMAP,开启POP3/SMTP/IMAP服务,设置授权码就可以了。

2. 下载nodemailer插件

在命令行输入:npm install --save nodemailer

3. 编写发送邮件代码

3.1 对发送激活邮件代码进行封装,然后导出:

//email.js

// 引入 nodemailer
const nodemailer = require('nodemailer');

// 创建一个SMTP客户端配置
const config = {
    host: 'smtp.163.com',
    port: 465,
    auth: {
      user: 'xxxx@163.com', //刚才注册的邮箱账号
      pass: 'xxxxxx' //邮箱的授权码,不是注册时的密码
    }
  };

// 创建一个SMTP客户端对象
const 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);
  });
};

3.2 进行测试:

//sendtest.js

var send = require('./email.js');


// 创建一个邮件对象
var mail = {
  // 发件人
  from: '极客教程 <xxxx@163.com>',
  // 主题
  subject: '[极客教程]激活邮箱账号',
  // 收件人
  to: 'xxxx@qq.com',
  // 邮件内容,HTML格式
  text: `尊敬的${user.name},您好!点击链接即可激活您的极客教程
      网账号,http://localhost:3000/checkCode?name=${user.name}&code=${user.code}为保障您的帐号安全,请在24小时内点击该链接,您也可以将链接复制到浏览器地址栏访问。 若如果您并未尝试修改密码,请忽略本邮件,由此给您带来的不便请谅解。本邮件由系统自动发出,请勿直接回复!` //接收激活请求的链接
};
send(mail);

成功就可以在测试的邮箱看到所发的信息。

Node.js实现注册邮箱激活功能的方法示例

4. 验证步骤

简单的讲一下如何实现邮箱验证。

1 . 在自己定义的数据库用户数据结构中一定要有激活码、过期时间、是否已经激活的字段,用于在激活时进行判断;

{
  code: String, //激活码,格式自己定义
  date: Number, //过期日期,过期后不能激活
  islive: Boolean //判断是否激活
}

2 . 发送激活链接,其中包含用户名和激活码,如下面这样:

// 创建一个邮件对象
var mail = {
  // 发件人
  from: '极客教程 <xxxx@163.com>',
  // 主题
  subject: '[极客教程]激活邮箱账号',
  // 收件人
  to: 'xxxx@qq.com',
  // 邮件内容,HTML格式
  text: `尊敬的${user.name},您好!点击链接即可激活您的极客教程
      网账号,http://localhost:3000/checkCode?name=${user.name}&code=${user.code}为保障您的帐号安全,请在24小时内点击该链接,您也可以将链接复制到浏览器地址栏访问。 若如果您并未尝试修改密码,请忽略本邮件,由此给您带来的不便请谅解。本邮件由系统自动发出,请勿直接回复!` //接收激活请求的链接
};
send(mail);

3 . 响应激活请求,根据激活链接的用户名进行查找,若用户存在则判断激活码是否一致,并判断激活码是否过期,全部正确则改变激活状态,此时激活成功,如下代码:

// check email code
exports.checkCode = function (req, res){
  var username = req.query.name;
  var code = req.query.code;
  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.json({error: true})
              }else{
                  console.log(user)
                  res.json({ok: true})
              }
          });
      }else{
        res.json({
          email: user.mail,
          failure: true
        })
      }
  });
}

5. 遇到的问题

开发中遇到如下问题:

{ [AuthError: Invalid login - 535 Error: authentication failed]
name: ‘AuthError',
data: ‘535 Error: authentication failed',
stage: ‘auth' }

smtp服务器验证不通过,因为网易的邮箱有个授权限制,一定要好好检查你注册邮箱时的账号和授权码。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js 页面输出值
Nov 30 Javascript
firefo xml 读写实现js代码
Jun 11 Javascript
javascript实现的距离现在多长时间后的一个格式化的日期
Oct 29 Javascript
Jquery实现仿新浪微博获取文本框能输入的字数代码
Feb 22 Javascript
javascript去除字符串中所有标点符号和提取纯文本的正则
Jun 07 Javascript
Javascript判断图片尺寸大小实例分析
Jun 16 Javascript
JavaScript实现Flash炫光波动特效
May 14 Javascript
thinkphp标签实现bootsrtap轮播carousel实例代码
Feb 19 Javascript
vue获取input输入值的问题解决办法
Oct 17 Javascript
js实现多个倒计时并行 js拼团倒计时
Feb 25 Javascript
微信公众号生成新浪短网址的实现(快速生成)
Aug 18 Javascript
JS实现碰撞检测效果
Mar 12 Javascript
Angular学习笔记之集成三方UI框架、控件的示例
Mar 23 #Javascript
Vue自定义过滤器格式化数字三位加一逗号实现代码
Mar 23 #Javascript
JavaScript 五大常见函数
Mar 23 #Javascript
JS中原始值和引用值的储存方式示例详解
Mar 23 #Javascript
剖析Angular Component的源码示例
Mar 23 #Javascript
vue利用axios来完成数据的交互
Mar 23 #Javascript
JS动画定时器知识总结
Mar 23 #Javascript
You might like
PHP与MYSQL中UTF8 中文排序示例代码
2014/10/23 PHP
微信公众平台开发教程①获取用户Openid及个人信息图文详解
2019/04/10 PHP
php libevent 功能与使用方法详解
2020/03/04 PHP
How to Auto Include a Javascript File
2007/02/02 Javascript
TextArea 控件的最大长度问题(js json)
2009/12/16 Javascript
JavaScript DOM学习第四章 getElementByTagNames
2010/02/19 Javascript
分享一则javascript 调试技巧
2015/01/02 Javascript
Webwork 实现文件上传下载代码详解
2016/02/02 Javascript
javascript每日必学之多态
2016/02/23 Javascript
js 判断附件后缀的简单实现方法
2016/10/11 Javascript
javascript实现滑动解锁功能
2017/03/22 Javascript
微信小程序支付功能 php后台对接完整代码分享
2018/06/12 Javascript
Node.js 如何利用异步提升任务处理速度
2019/01/07 Javascript
jQuery实现鼠标移入显示蒙版效果
2020/01/11 jQuery
Vue+tracking.js 实现前端人脸检测功能
2020/04/16 Javascript
只有 20 行的 JavaScript 模板引擎实例详解
2020/05/11 Javascript
vue如何搭建多页面多系统应用
2020/06/17 Javascript
ant-design-vue中tree增删改的操作方法
2020/11/03 Javascript
[29:23]2014 DOTA2国际邀请赛中国区预选赛 LGD-GAMING VS CIS 第一场1
2014/05/23 DOTA
利用Python实现Windows下的鼠标键盘模拟的实例代码
2017/07/13 Python
Python探索之爬取电商售卖信息代码示例
2017/10/27 Python
用不到50行的Python代码构建最小的区块链
2017/11/16 Python
python numpy格式化打印的实例
2018/05/14 Python
Python基于生成器迭代实现的八皇后问题示例
2018/05/23 Python
python取数作为临时极大值(极小值)的方法
2018/10/15 Python
Python3的unicode编码转换成中文的问题及解决方案
2019/12/10 Python
详解Python3 中的字符串格式化语法
2020/01/15 Python
HTML5全屏(Fullscreen)API详细介绍
2015/04/24 HTML / CSS
推荐WEB开发者最佳HTML5和CSS3代码生成器
2015/11/24 HTML / CSS
华为旗下电子商务平台:华为商城
2016/08/06 全球购物
香港莎莎官网Sasa.com:亚洲著名国际化妆品商城
2019/11/10 全球购物
入职担保书怎么写
2014/05/12 职场文书
未受刑事制裁公证证明
2014/09/20 职场文书
python爬虫--selenium模块
2021/03/31 Python
Mysql数据库表中为什么有索引却没有提高查询速度
2022/02/24 MySQL
python中pymysql包操作数据库方法
2022/04/19 Python