使用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实现仿qq消息的弹出窗效果

    js实现仿qq消息的弹出窗效果

    这篇文章主要介绍了js实现仿qq消息的弹出窗效果,文章代码实现模拟qq弹出框消息提醒,感兴趣的小伙伴们可以参考一下
    2016-01-01
  • Javascript日期格式化format函数的使用方法

    Javascript日期格式化format函数的使用方法

    这篇文章主要介绍的是javascript时间格式format函数,我们有时候调用的new Date()不是格式化的时间,可能显示不是很正常,那么这时候就需要格式化时间,今天这里分享一个javascript的foramt()函数,有需要的可以参考借鉴。
    2016-08-08
  • 原生js jquery ajax请求以及jsonp的调用方法

    原生js jquery ajax请求以及jsonp的调用方法

    下面小编就为大家带来一篇原生js jquery ajax请求以及jsonp的调用方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • JavaScript去掉数组重复项的方法分析【测试可用】

    JavaScript去掉数组重复项的方法分析【测试可用】

    这篇文章主要介绍了JavaScript去掉数组重复项的方法,结合实例形式分析了javascript使用object特性实现数组去除重复项功能的相关操作技巧,需要的朋友可以参考下
    2018-07-07
  • JS控制下拉列表左右选择实例代码

    JS控制下拉列表左右选择实例代码

    在本篇内容中小编给各位分享的是关于如何使用JS控制下拉列表左右选择的实例代码,需要的朋友们可以参考下。
    2020-05-05
  • JavaScript实现图片懒加载(Lazyload)

    JavaScript实现图片懒加载(Lazyload)

    这篇文章主要介绍了JavaScript实现图片懒加载(Lazyload)的相关资料,需要的朋友可以参考下
    2016-11-11
  • js 动态生成json对象、时时更新json对象的方法

    js 动态生成json对象、时时更新json对象的方法

    下面小编就为大家带来一篇js 动态生成json对象、时时更新json对象的方法。小编觉的挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12
  • JS实现文字向下滚动完整实例

    JS实现文字向下滚动完整实例

    这篇文章主要介绍了JS实现文字向下滚动的方法,以一个完整实例形式详细分析了html页面布局、css样式及对应的js滚动功能实现技巧,需要的朋友可以参考下
    2015-02-02
  • 微信小程序wxml列表渲染原理解析

    微信小程序wxml列表渲染原理解析

    这篇文章主要介绍了微信小程序wxml列表渲染原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • JavaScript中对象的不同创建方法

    JavaScript中对象的不同创建方法

    js对象与一般的面向对象的程序设计语言有所不同的。js中的对象是基本原型的。下面给大家介绍js中对象的不同创建方法,非常不错,感兴趣的朋友一起学习吧
    2016-08-08

最新评论