在开发个人开源项目或者个人博客的时候,需要用户进行认证登录,首先我们想到的是手机验证码,但是在各大厂商验证码都需要收费,这时候我们可以用邮件进行发送验证码。主要是免费!
1.环境及Nodemailer安装介绍
我这边使用的是express,各位可以使用原生node 或者 koa都是可以的
安装
npm i nodemailer -S
复制代码
邮箱权限申请流程
我这里拿QQ邮箱为例
1.开启SMTP服务
位置: 邮箱设置 -> 帐户 -> 往下滑,找到SMTP配置,如下图
点击开启,弹出
有令牌的可以使用手机令牌(QQ安全中心APP),没有的话只能花费0.1元发送短信开启啦。
开启之后生成一串的授权码,我们把它先复制起来
接下来进入代码模块
代码配置
引入nodemailer,并配置如下图
再来个send函数配置,详解都在注释里
发送回调
实战操作
按照如上配置, 写个接口
我这边只是随机生成四个数字,作为实验。
我们来到界面,进行操作
输入邮箱
打开邮箱查看效果
是不是很简单。
源码送上,加上邮件装饰布局哦
const nodemailer = require('nodemailer')
const obj = {
transporter: nodemailer.createTransport({
host: 'smtp.qq.com', // 默认是这个
port: 465,
auth: {
user: '你的邮箱',
pass: '你的邮箱授权码'
}
}),
send: function(mail, content) {
const mailOptions = {
// 发送方的邮箱地址
from: '注册验证码<你的邮箱>',
to: mail, // 对方邮箱
// cc : '' //抄送 用于多人邮件
// bcc : '' //密送
subject: '激活验证码',
text: `您的注册验证码为:${content}, 24小时内有效,请谨慎保管`,
html: `
<head>
<base target="_blank" />
<style type="text/css">::-webkit-scrollbar{ display: none; }</style>
<style id="cloudAttachStyle" type="text/css">#divNeteaseBigAttach, #divNeteaseBigAttach_bak{display:none;}</style>
<style id="blockquoteStyle" type="text/css">blockquote{display:none;}</style>
<style type="text/css">
body{font-size:14px;font-family:arial,verdana,sans-serif;line-height:1.666;padding:0;margin:0;overflow:auto;white-space:normal;word-wrap:break-word;min-height:100px}
td, input, button, select, body{font-family:Helvetica, 'Microsoft Yahei', verdana}
pre {white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word;width:95%}
th,td{font-family:arial,verdana,sans-serif;line-height:1.666}
img{ border:0}
header,footer,section,aside,article,nav,hgroup,figure,figcaption{display:block}
blockquote{margin-right:0px}
</style>
</head>
<body tabindex="0" role="listitem">
<table width="700" border="0" align="center" cellspacing="0" style="width:700px;">
<tbody>
<tr>
<td>
<div style="width:700px;margin:0 auto;border-bottom:1px solid #ccc;margin-bottom:30px;">
<table border="0" cellpadding="0" cellspacing="0" width="700" height="39" style="font:12px Tahoma, Arial, 宋体;">
<tbody><tr><td width="210"></td></tr></tbody>
</table>
</div>
<div style="width:680px;padding:0 10px;margin:0 auto;">
<div style="line-height:1.5;font-size:14px;margin-bottom:25px;color:#4d4d4d;">
<strong style="display:block;margin-bottom:15px;">尊敬的用户:<span style="color:#f60;font-size: 16px;"></span>您好!</strong>
<strong style="display:block;margin-bottom:15px;">
您正在进行<span style="color: red">ShanJDisc账号申请</span>操作,请在验证码输入框中输入:<span style="color:#f60;font-size: 24px">${content}</span>,以完成操作。
</strong>
</div>
<div style="margin-bottom:30px;">
<small style="display:block;margin-bottom:20px;font-size:12px;">
<p style="color:#747474;">
注意:此操作可能会修改您的密码、登录邮箱或绑定手机。如非本人操作,请及时登录并修改密码以保证帐户安全
<br>(工作人员不会向你索取此验证码,请勿泄漏!)
</p>
</small>
</div>
</div>
<div style="width:700px;margin:0 auto;">
<div style="padding:10px 10px 0;border-top:1px solid #ccc;color:#747474;margin-bottom:20px;line-height:1.3em;font-size:12px;">
<p>此为系统邮件,请勿回复<br>
请保管好您的邮箱,避免账号被他人盗用
</p>
<p>ShanJDisc</p>
</div>
</div>
</td>
</tr>
</tbody>
</table>
</body>
`
}
this.transporter.sendMail(mailOptions, (error, info) => {
if (error) {
return console.log(error)
}
console.log('Message sent: %s', info.messageId)
})
}
}
// 抛出对象以接收
module.exports = obj
复制代码
nodemailer 确实很实用,可以解决个人的开源项目登录注册,或者其他校验操作的验证码校验。本文章属于原创,需要转载请留言哦,如果你觉得这篇文章还阔以的话,请给个小赞赞,你的赞就是我发表文章的动力!
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END