为了账号安全,请及时绑定邮箱和手机立即绑定

Node实现邮箱服务功能

> 可以使用 nodemailer 这个模块提供的能力完成一些诸如邮箱登录、找回密码等功能的开发。
> 项目地址:https://github.com/Ewall1106/mall

配置邮件客户端

  • 我们以 QQ 邮箱为例,打开qq邮箱 > 设置 > 账户中,我们将SMTP服务开启。(默认是关闭的)

  • 接下来会有一些认证方式,按照提示操作,最后会得到一个授权码

基本使用

  • 根据官网的步骤下载这个 nodemailer 包:

$ npm install nodemailer
  • 根据官网的示例代码我们复制并进行简单配置:

'use strict';const nodemailer = require('nodemailer');async function main() {
  let transporter = nodemailer.createTransport({
    // 使用qq的smtp服务器
    host: 'smtp.qq.com',
    port: 587,
    secure: false,
    auth: {
      user: '这里填入你的邮箱',
      pass: '这里填入上一步生成得到的授权码',
    },
  });

  // 配置邮件标题、内容等
  // 这里我自己给自己发送一封 Test 测试邮件
  let info = await transporter.sendMail({
    from: '认证邮件',
    to: '123456@qq.com',
    subject: 'Test',
    text: 'Hello world',
    html: '<b>Hello world</b>',
  });

  console.log('Message sent:', info.messageId);
  console.log('Preview URL:', nodemailer.getTestMessageUrl(info));}main().catch(console.error);
  • 执行这个 js 文件:

$ node mail.js
  • 然后我们就可以从自己的邮箱中收到这封测试邮件了:

项目实践

  • 在注册界面我们需要用到邮箱服务功能 来完成用户的注册。

  • 在用户点击发送邮箱验证码的时候,将邮箱作为 key验证码作为 value 存储到 redis 缓存中。(当然你也可以用其它方式将其保存下来)

async sendMail(ctx) {
  const { email } = ctx.request.body;

  try {
    // 随机生成一个验证码
    const code = 1234;
    // 将上面 `nodemailer` 发送邮箱的方法封装后在这里调用
    sendMail()
    // 设置缓存key-value键值对并设置过期时间
    setValue(email, code, 60 * 60 * 24);

    ctx.body = {
      code: 200,
      entry: '邮箱验证码已经发送成功',
    };
  } catch (err) {
    // handle error...
  }}
  • 然后当我们点击注册按钮的时候对其校验。

async registry(ctx, next) {
  const { email, password,mailcode } = ctx.request.body;

  // 从redis缓存中获取code
  const code = await getValue(email);
  // 比对验证
  if (!code) {
    ctx.body = {
      code: 400,
      message: '请点击发送验证码重新发送',
    };
    return;
  }
  if (code !== mailcode) {
    ctx.body = {
      code: 400,
      message: '请输入正确的邮箱验证码',
    };
    return;
  }
  // ...}
  • 邮箱服务的功能就完成了。

点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
Web前端工程师
手记
粉丝
7084
获赞与收藏
266

关注作者,订阅最新文章

阅读免费教程

感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消