如何使用NestJs结合邮箱服务,定时发邮件提醒下班🫣🫣🫣
在平时上班过程中,我们经常会很认真的写代码,导致忘记了下班,同事都走光了,就剩一个人,这样就会浪费掉了公司的水电了,为了避免这样的事情发生,我们可以编写一个定时器,定时给自己发送邮件,这样就可以提醒到我们到点下班了。
创建邮箱服务和添加定时器
在 nest 中和使用定时器,首先我们应该安装特定的包,如下命令所示:
pnpm add nodemailer @nestjs/schedule
安装完成之后,我们要在 app.service.ts 中编写如下代码:
// src/app.service.ts
import { Injectable } from "@nestjs/common";
import { Cron } from "@nestjs/schedule";
import * as nodemailer from "nodemailer";
import { Transporter } from "nodemailer";
@Injectable()
export class AppService {
private transporter: Transporter;
constructor() {
this.transporter = nodemailer.createTransport({
host: "smtp.qq.com",
port: 587,
secure: false,
auth: {
user: "写你自己的@qq.com",
pass: "写你自己的",
},
});
}
async sendMail(to: string, subject: string, text: string): Promise<void> {
const mailOptions = {
from: "example@qq.com", // 发送者
to: to, // 接收者,可以是多个,逗号分隔
subject: subject, // 主题
text: text, // 文本内容
};
await this.transporter.sendMail(mailOptions);
}
@Cron("* * * * * *") // 每秒执行一次
async handleCron() {
await this.sendMail("写你自己的", "靓仔", "到点下班啦");
}
}
在上面的这段代码中使用 nodemailer 库来发送电子邮件,并设置了一个 Cron 定时任务来定时触发邮件发送。该定时器会每秒执行一次。邮箱的相关信息需要个人前去相关的邮箱服务中获取。
当 service 中的代码编写完成之后,我们要在 app.module 中导入该定时任务:
import { Module } from "@nestjs/common";
import { ScheduleModule } from "@nestjs/schedule";
import { AppController } from "./app.controller";
import { AppService } from "./app.service";
@Module({
imports: [ScheduleModule.forRoot()],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
这个根模块是整个 NestJS 应用的起点,它通过 imports 引入了定时任务功能,通过 controllers 和 providers 定义了应用如何响应请求和提供服务。具体来说,AppController 处理请求并调用 AppService 来执行业务逻辑,AppService 中可能会使用 ScheduleModule 提供的定时任务功能来定期执行某些任务。
这里代码编写完成了,我们启动项目,然后再查看邮箱,就可以看到消息轰炸提醒我们下班了:
总结
通过上面的例子我们实现了一个邮箱和定时器的功能,定时给我们发送邮件,只不过这个功能是每秒发送一次,可以根据需要把这个技巧用起来吧。
转载自:https://juejin.cn/post/7315226492957802523