你知道如何使用Node.js做邮箱验证吗?

更新日期: 2020-03-02阅读: 1.8k标签: 验证

相信大家都知道登录操作都会有一个接收验证码的过程,我之前一直对这个非常感兴趣,经常问同学手机验证码是怎么搞的,但是现在我们不用手机也照样可以实现这个功能。


01 前言

其实对于手机验证码来说,一般都要收费的,免费的一般是比较少的,而且都会有数量的限制。既然我们不能使用手机验证码来发送,那么我们就以曲线救国的方式来实现这个功能吧。

其实很简单,我们只要安装一个第三方的npm 包就可以了,这个包可以实现邮件的发送功能。这个包就是nodemailer,下面我们就一起来测试一下到底怎么样。


02 安装nodemailer

我们随便新建一个目录,然后在根目录下面初始化package.json文件(npm init),然后我们就直接安装nodemailer即可。

npm install nodemailer --save

然后我们再新建一个入口文件app.js,用于测试代码

"use strict";
const nodemailer = require("nodemailer");
const fs = require("fs");
const path = require("path");
let transporter = nodemailer.createTransport({
  // host: 'smtp.ethereal.email',
  service: "qq", // 使用了内置传输发送邮件 查看支持列表:https://nodemailer.com/smtp/well-known/
  //   port: 465, // SMTP 端口
  secureConnection: true, // 使用了 SSL
  auth: {
    user: "alanwu.hd@qq.com",
    pass: "xxxxxxxxxxx", //授权码,并非QQ密码
  },
});
let mailOptions = {
  from: '"alanwu" <alanwu.hd@qq.com>', // 发送地址
  to: "157687xxxxx@163.com", // 接收列表(可多个)
  subject: "Hello,this is alan from China!", // 主题
  // 发送text或者html格式(任选一个)
  text: 'Hello world!', // plain text body
  //html:  fs.createReadStream(path.resolve(__dirname,'index.html'))
  html: '<img src="cid:01">', 
  attachments: [                 //添加附件(可多个)
    {
      filename: "image",
      path: path.resolve(__dirname, "2.jpg"),
      cid: "01",//与上面的图片cid对应
    },
    {
      filename: "a.txt",
      content: "hello world!",
    },
    {
      filename: "b.txt",
      path: "./text.txt",//根目录新建即可
    },
  ],
};

// 发送邮件
transporter.sendMail(mailOptions, (error, info) => {
  if (error) {
    return console.log(error);
  }
  console.log(info);
});

我们先来看一下service这个字段,如果写了这个就不用写host和端口。大家可以看一下官方的介绍, 详情戳此 。它其实已经帮你封装好了,非常方便。

发送纯文本text

这个就比较简单了,我们直接在mailOptions 下面的text写上我们要发送的文本即可,其他的html和attachments都不用配置了。

HTML模板发送

有同学可能觉得这个text文本太low了,我们应该写一些比较华丽的网页发送。没问题,其实我们还可以自定义html网页的,我们不要使用text字段就好,改用html字段而且我们要进行html文件的引入。

我们在根目录新建index.html文件,用于发送此html文件给对方,这里我就随便拿了一个网页。我们要使用 fs.createReadStream(path.resolve(__dirname,'index.html')) 的方式进行引入即可。重新运行我们就会接收到邮件了。

发送图片

除了网页之外我们还可以使用图片的形式发送,我们在html字段里不要发送html文件,写上 html: '<img src="cid:01">' 之后,我们在attachments里面也写上附件的地址,我这里就直接在根目录之下放置了一张图片,cid要对应上。

添加附件

这里我们就可以添加一些文件了,比如这里我添加了txt文件、docx文件、pdf文件、zip文件都可以。


03 验证码功能

我们其实感兴趣只是验证码部分,别急这就安排一下到底是怎么回事。我们首先要想办法生成一个验证码,一般4-6位都是可以的,下面就介绍一种简单的方法来生成一个吧。

let code = Math.random().toString().substr(2, 4)//从第二位开始截取,截取4位(当然也可以6位)

我们就直接使用text这个字段进行发送就好了。code可以在一开始生成一下就好。这样其实我们就可以有一个验证的功能了,让用户输入的验证码与你生成对比的是否一致。

text: `您的验证码是${code},验证码在10分钟内有效`

04 一些小问题

我在测试的时候其实有一些小问题,但是我也不知道是什么原因。

  • Error: Message failed: 554 DT:SPM 163

我去163的官网查了一下,得出的结论是:

DT:SPM 发送的邮件内容包含了未被许可的信息,或被系统识别为垃圾邮件。请检查是否有用户发送病毒或者垃圾邮件。

这是我在发送图片的时候,就是我的二维码图片不行,但是我换一张普通的照片就可以,无解。

  • 发送给多名用户失败

当我尝试在to字段那里写两个用户的时候,发现只有一个是成功的,另一个却被退回了,我也不知道是怎么回事。


05 小结

好了,以上就是本文的全部内容,想想其实好像也没什么东西,之前觉得是非常牛的事情原来可以使用很简单的代码就可以实现了。

其实关于nodemailer还有很多属性没有说到,我只讲关于邮件发送的核心部分,其实这在我们的日常生活中也够用了,特别是做一些登录验证操作的时候有用有效。

文章代码: github地址

链接: https://www.fly63.com/article/detial/8821

Validate表单验证插件之常用参数介绍

Validate常用的一些参数和方法:errorElement,errorClass,errorPlacement,errorLabelContainer,errorContainer,wrapper,success,debug

html实现邮箱发送邮件_js发送邮件至指定邮箱功能

在前端开发中,JavaScript并没有提供直接操作Email邮箱的功能方法,但是遇到这样的需求,我们应该如何实现js发送邮件至指定邮箱功能呢?

vue短信验证性能优化写入localstorage中

当点击完按钮时,倒计时还没到60s过完时,刷新浏览器,验证码按钮又可以重新点击;就需要把时间都写到localstorage里面去,当打开页面的时候,就去localstorage里面去取,我这里就贴上我的解决方法,因为前几天有个vue的项目用到该方法

登陆时短信验证码的原理,实现

陆时需要发送短信验证码或者其他的验证方式来校验是否是本人操作,达到安全性的目的。点击获取验证码时,倒计时,暂时设定倒计时的时间为180秒....

网页如何实现拼图滑块的验证码_纯js的实现

滑动解锁应该是有两张图片,一张正常的,一张上面有解锁区域的(后端给),然后前端只用把用户释放鼠标后,滑动模块在图片上的xy轴传给后端,后端做成功与否的判断。如果只是纯前端js验证,不具备高安全性。

风火云短信验证码接收平台, 接码快速,平台稳定,简单易学

目前的社会发展得非常快,互联网产业的发展更是让很多人惊奇,平台越来越多也导致了搭载程序的要求必须高,服务平台完善性还体现于短信验证码是否具备,只有在具备的前提下才能有着更大的保证

验证码的分类_ 网页验证码有哪些方式?

早期的互联网是没有验证码的,随着后来计算机程序的发展,黑客编写了模仿登录、恶意破解密码、刷票、论坛灌水等恶意程序,破坏了整个网络的平衡性。介绍目前常用验证码的分类有哪些:Gif动画验证码、手机短信验证码、手机语音验证码、视频验证码、滑动验证码

滑动验证码原理实现

滑动验证码在很多网站逐步流行起来,一方面对用户体验来说,比较新颖,操作简单,另一方面相对图形验证码来说,安全性并没有很大的降低。常见验证码是需要输入图中字符的,是因为机器识别字符比较困难,以此来防止机器自动的行为。

基于react的滑动图片验证码组件

业务需求,需要在系统登陆的时候,使用“滑动图片验证码”,来验证操作的不是机器人。在一般的页面组件引用即可。onReload这个函数一般是用来请求后台图片的。

Vue中的验证登录状态

Vue项目中实现用户登录及token验证,先说一下我的实现步骤:使用easy-mock新建登录接口,模拟用户数据;使用axios请求登录接口,匹配账号和密码,账号密码验证后, 拿到token,将token存储到sessionStorage中,并跳转到首页

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!