相信大家都知道登录操作会有一个接收验证码的过程。现在我们不用手机也能实现这个功能。01前言其实手机验证码一般都是收费的,免费的一般比较少,而且会有数量限制。既然不能用手机验证码发送,那我们就曲折的实现这个功能来救国吧。其实很简单,我们只需要安装一个第三方的npm包,就可以实现发送邮件的功能。这个包就是nodemailer,我们一起测试一下。02安装nodemailer,我们随便新建一个目录,然后在根目录下初始化package.json文件(npminit),就可以直接安装nodemailer了。npminstallnodemailer--save然后我们新建一个入口文件app.js,用于测试代码。"usestrict";constnodemailer=require("nodemailer");constfs=require("fs");constpath=require("path");lettransporter=nodemailer.createTransport({//host:'smtp.ethereal.email',service:"qq",//使用内置传输发送邮件查看支持列表:https://nodemailer.com/smtp/well-known///port:465,//SMTPportsecureConnection:true,//使用SSLauth:{user:"alanwu.hd@qq.com",pass:"xxxxxxxxxxx",//授权码,不是QQ密码},});letmailOptions={from:'"alanwu"',//发送地址:"157687xxxxx@163.com",//收件人名单(可以多个)subject:"你好,我是中国的alan!",//主题//发送文本或html格式(选择一个)text:'Helloworld!',//纯文本正文//html:fs.createReadStream(path.resolve(__dirname,'index.html'))html:'',attachments:[//添加附件(multiple){filename:"image",path:path.resolve(__dirname,"2.jpg"),cid:"01",//对应上图的cid},{filename:"a.txt",内容:"你好世界!",},{filename:"b.txt",path:"./text.txt",//可以创建根目录},],};//发送邮件transporter.sendMail(mailOptions,(error,info)=>{if(error){returnconsole.log(error);}console.log(info);});我们先来看看服务领域。如果这样写,就不用写host和port了。可以看一下官方的介绍,详情点这里。其实已经给你打包好了,很方便。发送纯文本相对简单。我们可以直接在mailOptions下的text中写上我们要发送的文字。其他html和附件不需要配置。发送HTML模板有些同学可能觉得文字太low了,我们应该写一些更华丽的网页发送。没问题,其实我们也可以自定义html网页,我们不需要使用textfield,直接使用htmlfield,我们需要导入html文件。我们在根目录下新建一个index.html文件,将这个html文件发送给对方。这里我只是拿了一个网页。我们需要使用fs.createReadStream(path.resolve(__dirname,'index.html'))导入。重新运行,我们将收到电子邮件。除了网页,我们还可以通过图片的形式发送图片。我们不会在html字段中发送html文件。写好html:''后,我们还在附件中写上附件的地址,这里我直接在根目录下放了一张图片,cid一定要对应。添加附件这里我们可以添加一些文件,比如我这里添加了txt文件,docx文件,pdf文件,zip文件。03验证码功能我们其实只对验证码部分感兴趣,别着急,我们来安排一下是怎么回事。我们首先得想办法生成验证码,一般4-6位就可以了,下面介绍一种简单的生成方法。letcode=Math.random().toString().substr(2,4)//从第2位开始截取,截取4位(当然6位也可以),我们直接使用textfield发送即可.代码可以在开始时生成。这样我们其实可以有一个验证的功能,让用户输入的验证码和你生成的验证码保持一致。text:`您的验证码是${code},验证码在10分钟内有效`04一些小问题我在测试的时候确实遇到了一些小问题,但是不知道是什么原因。Error:Messagefailed:554DT:SPM163去163官网查看,结论是:DT:SPM发送的邮件包含未经授权的信息,或者被系统识别为垃圾邮件。请检查用户发送的病毒或垃圾邮件。这是我发图片的时候,就是我的二维码图片不好,但是可以换成普通照片,没有解决办法。发送给多个用户失败。当我尝试在to字段中写两个用户时,只有一个成功,另一个被返回。我不知道发生了什么事。05总结好了,以上就是本文的全部内容。想了想,好像也没什么。之前觉得很好的东西,用很简单的代码就可以实现。其实关于nodemailer还有很多属性没有提到。我只讲发送邮件的核心部分。其实在我们日常生活中这样就足够了,尤其是在做一些登录验证操作的时候。文章代码:github地址