基于Nest.js(Typescript)+Mongodb+TS定时任务实现发送邮件功能(qq邮箱)
以下是一个使用Nest.js结合MongoDB和Nodemailer实现定时发送邮件的基本示例。请确保您已经安装了Nest.js CLI并创建了Nest.js项目,同时您的MongoDB数据库正常运行,且您有一个可用的QQ邮箱进行发送邮件。
- 安装必要的包:
npm install @nestjs/schedule @nestjs/microservices @nestjs/mongoose nodemailer
- 配置邮箱服务,在
app.module.ts
中:
import { Module } from '@nestjs/common';
import { MailerService } from '@nestjs-modules/mailer';
@Module({
imports: [MailerService.forRoot({
transport: 'smtps://你的qq邮箱:邮箱密码@smtp.qq.com', // 替换为你的QQ邮箱和密码
defaults: {
from: '"你的名字" <你的qq邮箱>', // 替换为你的名字和邮箱
},
})],
providers: [],
})
export class AppModule {}
- 创建定时任务,在
app.controller.ts
中:
import { Controller, Inject } from '@nestjs/common';
import { Cron, Interval } from '@nestjs/schedule';
import { MailerService } from '@nestjs-modules/mailer';
@Controller()
export class AppController {
constructor(
@Inject(MailerService)
private readonly mailerService: MailerService,
) {}
@Cron('*/10 * * * * *') // 每10秒执行一次
async handleCron() {
try {
console.log('Cron is running');
const results = await this.mailerService.sendMail({
to: '收件人邮箱', // 替换为收件人邮箱
subject: 'Testing Nest.js MailerService ⚡',
text: 'Using text bodies',
html: '<b>Using html bodies</b>',
});
console.log(results);
} catch (err) {
console.error(err);
}
}
}
- 运行定时任务,在
main.ts
中启动Nest.js应用:
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
await app.startAllMicroservices();
await app.listen(3000);
}
bootstrap();
确保您的邮箱开启了SMTP服务,并且您的QQ邮箱已经设置了授权码,而不是密码。以上代码仅供参考,实际应用时请根据自己的需求进行相应的调整。
评论已关闭