你知道如何用Node.js作邮箱验证吗

相信你们都知道登陆操做都会有一个接收验证码的过程,我以前一直对这个很是感兴趣,常常问同窗手机验证码是怎么搞的,可是如今咱们不用手机也照样能够实现这个功能。html

01 前言

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

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

02 安装nodemailer

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

npm install nodemailer --save
复制代码

而后咱们再新建一个入口文件app.js,用于测试代码。web

"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和端口。你们能够看一下官方的介绍,详情戳此。它其实已经帮你封装好了,很是方便。npm

一部分服务
一部分服务

发送纯文本text

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

HTML模板发送

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

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

发送图片

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

本人公众号,在线求关注!
本人公众号,在线求关注!

添加附件

这里咱们就能够添加一些文件了,好比这里我添加了txt文件、docx文件、pdf文件、zip文件均可以。

03 验证码功能

咱们其实感兴趣只是验证码部分,别急这就安排一下究竟是怎么回事。咱们首先要想办法生成一个验证码,通常4-6位都是能够的,下面就介绍一种简单的方法来生成一个吧。

let code = Math.random().toString().substr(24)//从第二位开始截取,截取4位(固然也能够6位)
复制代码

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

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

04 一些小问题

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

  • Error: Message failed: 554 DT:SPM 163

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

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

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

  • 发送给多名用户失败

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

05 小结

好了,以上就是本文的所有内容,想一想其实好像也没什么东西,以前以为是很是牛的事情原来可使用很简单的代码就能够实现了。

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

文章代码:github地址

相关文章
相关标签/搜索