在学习 Nestjs 的过程中,我希望能够使用 Nodemailer 发送测试邮件,但在 NestJS 应用程序的上下文中我遇到了困难。我在互联网上搜索了解决方案,在经过大量研究后,我找到了一个解决方法。结果证明,这真的很简单。
在本文中,我将分享我的解决方案,以便您可以在您的 NestJS 项目中使用它。
(本文视频讲解:java567.com)
目录- 如何设置 NestJS 项目
- 如何在应用程序中配置 Nodemailer
- 如何使用 Nodemailer 发送电子邮件
- 结论
理想情况下,当用户点击忘记密码路由时,应该向用户的电子邮件发送一个链接,通过该链接,用户应该能够重置密码。本文将演示使用 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 <kingsleyokgeorge@gmail.com>',
to: 'joanna@gmail.com',
subject: `How to Send Emails with Nodemailer`,
text: message,
});
}
}
在 app.service.ts 文件中,注入了 MailerService,然后在类中使用它发送电子邮件。在类内部,MailerService 有一个接受对象作为参数的 sendMail 函数。该对象包含 from、to、subject 和 text 属性。
一旦完成了这一步,在 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)