Письмо в Nest
Модуль почты уже в импортах, но ни один адрес не вызывает отправку. Клиент открывает страницу, а уведомление так и не собирается, хотя транспорт готов принять текст.
MailerService внедряют
в провайдер так же, как другие
зависимости Nest. Асинхронная
операция sendMail
принимает объект с получателем,
темой и полем text
для простого текста без разметки.
Контроллер только вызывает
метод сервиса и отдаёт результат
клиенту.
Покажем на примере постов:
import { Module } from '@nestjs/common';
import { MailerModule } from '@nestjs-modules/mailer';
import { PostController } from './post.controller.js';
import { PostService } from './post.service.js';
@Module({
imports: [
MailerModule.forRoot({
transport: {
jsonTransport: true,
},
defaults: {
from: '"Posts" <posts@app.test>',
},
}),
],
controllers: [PostController],
providers: [PostService],
})
export class AppModule {}
Сервис отправит короткое текстовое письмо:
import { Injectable } from '@nestjs/common';
import { MailerService } from '@nestjs-modules/mailer';
@Injectable()
export class PostService {
mailerService: MailerService;
constructor(mailerService: MailerService) {
this.mailerService = mailerService;
}
async sendDigest() {
return this.mailerService.sendMail({
to: 'reader@app.test',
subject: 'Сводка',
text: 'Новые материалы готовы.',
});
}
}
Контроллер вызовет отправку и вернёт ответ операции:
import { Controller, Post } from '@nestjs/common';
import { PostService } from './post.service.js';
@Controller('posts')
export class PostController {
postService: PostService;
constructor(postService: PostService) {
this.postService = postService;
}
@Post('mail')
sendMail() {
return this.postService.sendDigest();
}
}
Добавьте в WorkerService
отправку короткого текстового
письма и вызовите её из
WorkerController.