使用nestjs实现邮件发送的代码详解

 更新时间:2023年10月07日 09:05:03   作者:西檬  
邮箱发送是我们常见的一个服务,本篇文章带大家用nestjs来实现一下,文中有详细的代码示例和图文讲解,对大家的学习或工作有一定的帮助,需要的朋友可以参考下

前置准备

首先我们需要开通邮箱服务,这里我以qq邮箱为例子演示一下

我这里已经开通好了,我们第一次开通时会给你一个密钥,这个需要记下来,后面会用到。这里开通很简单,就问你用途,无脑填即可。

当我们开通之后,我们在nestjs中创建好一个邮箱服务

这里我们需要用到一个包 nodemailer 这个包的生态很成熟,帮我们做好了那些协议,我们直接用即可

我的习惯是,对于单独的服务例如邮箱服务,prisma查询构造生成器等,我会放到services目录下,其他模块想使用直接依赖注入就可

下面我们进入实操

这个是nodemailer这个包需要配置的配置项,我们来解释一下

  • host:服务器邮箱地址,这里qq的是 smtp.qq.com,其他邮箱例如网易的,可以百度搜索的到
  • port: 服务器端口号, qq的是465, 一般都是465
  • secure:表示安全连接
  • auth: 账户信息,第一个user就填写你开通服务的邮箱账号, 第二个pass就是刚刚生成的密钥
import { Injectable } from '@nestjs/common';
import * as nodemailer from 'nodemailer';
interface MailInfo {
    // 接收方邮箱
    to: string;
    // 标题
    subject: string;
    // 文本
    text?: string;
    // 富文本,如果文本和富文本同时设置,富文本生效。
    html?: string;
  }
@Injectable()
export class EmailService {
  private transporter: nodemailer.Transporter;
  private mailConfig =  {
    host: 'smtp.qq.com',
    port: 465,
    secure: true,
    auth: {
    user: '你开通的邮箱账号',
    pass: '生成的密钥'
  }
  }
  constructor() {
    this.transporter = nodemailer.createTransport(this.mailConfig);
  }
  async sendEmail(mailInfo: MailInfo) {
     const info = await this.transporter.sendMail({
        from: this.mailConfig.auth.user, //发送方邮箱
        ...mailInfo
     })
     return info
  }
}

对于mailConfig最好抽离成一个单独的模块,可以用命名空间存放,然后用configService读取出来,这里为了演示就简单操作了。

上面的代码就是配置项,主要就是为了利用它的sendMail服务实现邮箱发送,这里需要的参数,我这里也写得很清楚了。接下来让我们实战演练,以邮箱验证码为例

实战演练

我们在开通账号时,我需要邮箱的验证码,只有验证码正确了才能开通,我的逻辑是,前端在点击验证码发送时,将邮箱账号传递到后端,此时后端生成一个验证码,并且存到redis中,设置有效期,然后通过邮箱服务将验证码发送给这个邮箱账号,在邮箱中获取到验证码后再在表单中输入,然后提交时,再和redis中的验证码进行比对。

前端代码我就不展示了,就一个点击发送后设置一个倒计时,主要还是展示后端

 @Post('/send/emailCaptcha')
  async sendEmailCaptcha(@Body() emailInfo: {email: string}){
      if(!emailInfo) {
         throw new HttpException('邮箱不能为空', HttpStatus.BAD_REQUEST)
      }
      //生成随机四位数
      const emailCaptcha = Math.floor(Math.random() * 9000) + 1000
      //生成的数据存在redis中,后面添加用户做验证
      await this.redisClient
      .multi()
      .set(
        `emailCaptcha:${emailInfo.email}`,
         emailCaptcha,
      )
      .expire( `emailCaptcha:${emailInfo.email}`, 60 * 30) //30min
      .exec()
      this.emailService.sendEmail({
            to: emailInfo.email,
            html: `<div>
            您本次的验证码是<span style="color:#FFB6C1; font-weight:700; font-size:24px">${emailCaptcha}</span>, 验证码有效期是30分钟 </div>`,
            subject: 'xxx平台邮箱检验提醒'
      })
  }

这样当我们前端点击验证码发送后,调用这个接口,然后我们就可以在邮箱中收到验证码了

差不多就是这样一个效果,具体样式可以自己调整,核心逻辑就是这里了,后面的逻辑就很简单了,不做演示了。

写在最后

希望这样一个简单的邮件服务能够让大家学到新的知识。

到此这篇关于使用nestjs实现邮件发送的代码详解的文章就介绍到这了,更多相关nestjs实现邮件发送内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • js禁止页面刷新与后退的方法

    js禁止页面刷新与后退的方法

    这篇文章主要介绍了js禁止页面刷新与后退的方法,实例分析了javascript屏蔽F5键、右键菜单、F1键等实现技巧,需要的朋友可以参考下
    2015-06-06
  • UniApp使用vue.config.js进行配置的详细教程

    UniApp使用vue.config.js进行配置的详细教程

    这篇文章主要给大家介绍了关于UniApp使用vue.config.js进行配置的详细教程,uniapp是一套基于Vue语法的框架,同样也支持Vue.config.js配置,一般常用的莫过于路径的名称,需要的朋友可以参考下
    2023-10-10
  • 微信小程序动画组件使用解析,类似vue,且更强大

    微信小程序动画组件使用解析,类似vue,且更强大

    这篇文章主要介绍了微信小程序动画组件,类似vue,且更强大使用解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • es6数组includes()用法实例分析

    es6数组includes()用法实例分析

    这篇文章主要介绍了es6数组includes()用法,结合实例形式分析了es6数组includes()针对给定值判断的相关操作技巧与使用注意事项,需要的朋友可以参考下
    2020-04-04
  • 在JavaScript中对HTML进行反转义详解

    在JavaScript中对HTML进行反转义详解

    下面小编就为大家带来一篇在JavaScript中对HTML进行反转义详解。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-05-05
  • js、jquery实现列表模糊搜索功能过程解析

    js、jquery实现列表模糊搜索功能过程解析

    这篇文章主要介绍了js、jquery实现列表模糊搜索功能过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • 学习JavaScript设计模式之策略模式

    学习JavaScript设计模式之策略模式

    这篇文章主要为大家介绍了JavaScript设计模式中的策略模式,对JavaScript设计模式感兴趣的小伙伴们可以参考一下
    2016-01-01
  • Javascript中的isNaN函数使用说明

    Javascript中的isNaN函数使用说明

    isNaN函数 返回一个 Boolean 值,指明提供的值是否是保留值 NaN (不是数字)。
    2011-11-11
  • JS 跳转页面延迟2种方法

    JS 跳转页面延迟2种方法

    js跳转页面想必大家不会很陌生吧,在浏览页面的时候经常会碰到这种现象存在如果可以延迟的话是不是会更委婉一点呢,接下来为大家介绍下如何实现,感兴趣的朋友可以参考下哈
    2013-03-03
  • bootstrapvalidator之API学习教程

    bootstrapvalidator之API学习教程

    这篇文章为大家分享了bootstrapvalidator之API学习教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06

最新评论