首页 > 编程语言 >在 NestJS 中使用 Nodemailer 发送电子邮件的方法

在 NestJS 中使用 Nodemailer 发送电子邮件的方法

时间:2024-04-11 15:34:09浏览次数:27  
标签:Nodemailer 发送 NestJS import 电子邮件 app nestjs

在学习 Nestjs 的过程中,我希望能够使用 Nodemailer 发送测试邮件,但在 NestJS 应用程序的上下文中我遇到了困难。我在互联网上搜索了解决方案,在经过大量研究后,我找到了一个解决方法。结果证明,这真的很简单。

在本文中,我将分享我的解决方案,以便您可以在您的 NestJS 项目中使用它。

(本文视频讲解:java567.com)

目录

  • 如何设置 NestJS 项目
  • 如何在应用程序中配置 Nodemailer
  • 如何使用 Nodemailer 发送电子邮件
  • 结论

如何设置 NestJS 项目

理想情况下,当用户点击忘记密码路由时,应该向用户的电子邮件发送一个链接,通过该链接,用户应该能够重置密码。本文将演示使用 Nodemailer 实现此功能的测试案例场景。

打开你喜欢的 IDE 或导航到终端并粘贴以下命令:

$ npm i -g @nestjs/cli
$ nest new nodemailer-app

上述命令将生成一个名为 nodemailer-app 的新项目。

完成后,导航到你的项目文件夹并安装 Nodemailer 包,npm i --save @nestjs-modules/mailer nodemailer 和类型,npm i --save-dev @types/nodemailer

如何配置您的应用程序中的 Nodemailer

在继续之前,请确保你在 mailtrap.io 上有一个帐户。如果有,请登录并导航到Email Testing。如果没有,请创建自己的收件箱。导航到收件箱,你应该看到将用于在应用程序中配置 Nodemailer 的凭据。

在你的项目目录中,转到应用程序模块文件并配置包:

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { AuthModule } from './auth/auth.module';
import { MailerModule } from '@nestjs-modules/mailer';

@Module({
  imports: [
    AuthModule,
    MailerModule.forRoot({
      transport: {
        host: process.env.EMAIL_HOST,
        auth: {
          user: process.env.EMAIL_USERNAME,
          pass: process.env.EMAIL_PASSWORD,
        },
      },
    }),
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

在上述代码中,你从 @nestjs-modules/mailer 中导入了 MailerModule。然后你调用了 forRoot() 方法。在 forRoot() 方法内部,你指定了一个包含主机和 auth 属性的 transport 属性。

不要忘记从 mailtrap.io 上的收件箱中获取主机、端口、用户名和密码。

你可以创建一个 .env 文件,其中包含所有的凭据详细信息。这样做是明智的。为了能够在 NestJS 中加载适当的 .env 文件,安装:

$ npm i --save @nestjs/config

然后在你的 app.module.ts 文件中,导入 ConfigModule

import { ConfigModule } from '@nestjs/config';

仍然在你的 app.module.ts 文件中

// 将配置模块包含在你的导入数组中

@Module({
  imports: [
    ConfigModule.forRoot({ envFilePath: '.env', isGlobal: true }),
  ],
  controllers: [AppController],
  providers: [AppService],
})

如何使用 NodeMailer 发送电子邮件

配置好 Nodemailer 后,现在是时候用它发送电子邮件了。

在你的 app.service.ts 文件中,粘贴以下代码:

import { MailerService } from '@nestjs-modules/mailer';
import { Injectable } from '@nestjs/common';

@Injectable()
export class AppService {
  constructor(private readonly mailService: MailerService) {}

  sendMail() {
    const message = `Forgot your password? If you didn't forget your password, please ignore this email!`;

    this.mailService.sendMail({
      from: 'Kingsley Okure <[email protected]>',
      to: '[email protected]',
      subject: `How to Send Emails with Nodemailer`,
      text: message,
    });
  }
}

app.service.ts 文件中,注入了 MailerService,然后在类中使用它发送电子邮件。在类内部,MailerService 有一个接受对象作为参数的 sendMail 函数。该对象包含 fromtosubjecttext 属性。

一旦完成了这一步,在 app.controller.ts 文件中,粘贴以下代码:

import { Controller, Get, Res } from '@nestjs/common';
import { AppService } from './app.service';

@Controller()
export class AppController {
  constructor(private readonly appService: AppService) {}

  @Get()
  sendMailer(@Res() response: any) {
    const mail = this.appService.sendMail();

    return response.status(200).json({
      message: 'success',
      mail,
    });
  }
}

控制器中所做的全部工作就是创建一个 Get 请求,该请求将调用你在服务中创建的 sendMail 函数。

在实际应用中,所有这些操作理想情况下将在忘记密码功能中完成。用户一旦点击了忘记密码路由,将会收到一封电子邮件。

要测试这个小型设置,打开你的 Postman 并转到 localhost:3000 然后点击发送。

然后转到你的 mailtrap.io 收件箱并查看你的消息。

结论

在本文中,你学习了如何使用 Nodemailer 发送电子邮件,这是一种旨在帮助开发人员一次发送邮件给多个人的软件。

你还学习了如何在 NestJs 应用程序的上下文中配置和设置它。

(本文视频讲解:java567.com)

标签:Nodemailer,发送,NestJS,import,电子邮件,app,nestjs
From: https://www.cnblogs.com/web-666/p/18129355

相关文章

  • 比nestjs更优雅的ioc:跨模块访问资源
    使用ts的最佳境界:化类型于无形在项目中使用ts可以带来类型智能提示与校验的诸多好处。同时,为了减少类型标注,达到化类型于无形的效果,CabloyJS引入了ioc和依赖查找的机制。在上一篇文章中,我们创建了一个业务模块test-home,并且采用依赖查找的机制演示了如何优雅的定义和使用资源,包括......
  • 002nestjs控制器(controller)
    一、控制器的作用控制器负责处理传入请求并向客户端返回响应二、使用方法新建/cats目录创建cats.controller.ts在里面添加如下内容import{Controller,Get}from'@nestjs/common';@Controller('cats')exportclassCatsController{@Get()findAll():string{......
  • NestJS 基础概念
     1.ModuleModule是NestJS的基本组织单位。模块系统基于Node.js的CommonJS模块系统,但提供了更高级别的抽象和组织方式。通过使用模块,你可以将应用程序拆分成多个独立且可复用的部分,每个模块都负责实现特定的功能或业务逻辑。模块可以封装相关的代码、配置和依赖关系,使得......
  • 比nestjs更优雅的ts控制反转策略-依赖查找
    一、Cabloy5.0内测预告Cabloy5.0采用TS对整个全栈框架进行了脱胎换骨般的大重构,并且提供了更加优雅的ts控制反转策略,让我们的业务开发更加快捷顺畅1.新旧技术栈对比:后端前端旧版js、egg2.0、mysqljs、vue2、framework7新版ts、egg3.0、多数据库兼容(支持mysql......
  • nestJs中 Guards ,Interceptors ,Pipes ,Controller ,Filters的执行顺序
    执行顺序:Guards(守卫):Guards是最先执行的中间件,用于确定是否允许请求继续处理。Guards在请求被路由到控制器之前执行,通常用于身份验证、角色检查或权限验证。如果Guards返回一个布尔值 false 或者抛出一个异常,请求处理流程将终止,不会执行后续的Pipes、Interceptors或控......
  • Nestjs系列 文件上传(一)
    Express中的文件上传Nest的文件上传是基于Express中间件multer实现的,所以需要先了解下multer包的使用。npminit-y#创建一个package.jsonnpminstallexpressmultercors#安装依赖包cors是处理跨域用的。创建index.js文件,并写入内容constexpress=re......
  • Nestjs系列 Nestjs基础(四)
    Nest中的middlewaremiddware基础用法已经在Nest的AOP架构章节中存在。此次记录middleware的更详细用法新建项目,然后创建一个middleware模板nestgmiddlewaretest--no-spec--flat可以看到此时的req和res都是any,可以对其进行明确的类型标注,express就从......
  • Nestjs系列 Nestjs进阶(一)
    自定义装饰器简单使用当Nest内置的装饰器不能满足开发需求时,可以自定义装饰器,其自定义装饰器的规则和react的自定义hooks较为相似,自定义时,其封装必须使用Nest的内置装饰器或者其它自定义装饰器,react中是必须使用reacthooks,这一点规则类似。使用命令快速创建一个dec......
  • 2024-03-06 Module '"@nestjs/platform-express"' has no exported member 'Expr
    问题描述:nestjs后端开发,遇到跨域问题,打算用express来配合处理,结果引入express的一个模块失败。app.modules.tsimport{MiddlewareConsumer,Module,NestModule}from'@nestjs/common';import{AppController}from'./app.controller';import{AppService}from'.......
  • 2024-03-06 NestJs学习日志之跨域
    新建一个跨域中间件(如:cors.middleware.ts),并把它导入到项目根目录的app.modules.ts里面使用。中间件代码如下:import{Injectable,NestMiddleware}from"@nestjs/common";@Injectable()//跨域中间件exportclassCorsMiddlewareimplementsNestMiddleware{use(r......