node使用Nodemailer发送邮件,可用于登录注册的验证码哟

在开发个人开源项目或者个人博客的时候,需要用户进行认证登录,首先我们想到的是手机验证码,但是在各大厂商验证码都需要收费,这时候我们可以用邮件进行发送验证码。主要是免费!

1.环境及Nodemailer安装介绍

我这边使用的是express,各位可以使用原生node 或者 koa都是可以的

安装

npm i nodemailer -S
复制代码

邮箱权限申请流程

我这里拿QQ邮箱为例

1.开启SMTP服务

位置: 邮箱设置 -> 帐户 -> 往下滑,找到SMTP配置,如下图

image.png

点击开启,弹出

image.png

有令牌的可以使用手机令牌(QQ安全中心APP),没有的话只能花费0.1元发送短信开启啦。

开启之后生成一串的授权码,我们把它先复制起来

image.png

接下来进入代码模块

代码配置

引入nodemailer,并配置如下图

image.png

再来个send函数配置,详解都在注释里

image.png

发送回调

image.png

实战操作

按照如上配置, 写个接口

image.png

我这边只是随机生成四个数字,作为实验。

我们来到界面,进行操作

输入邮箱

image.png

打开邮箱查看效果

image.png

是不是很简单。

源码送上,加上邮件装饰布局哦

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
喜欢就支持一下吧
点赞0 分享