Шаблон письма в Nest
Тема и получатель уже приходят с клиента, но тело письма остаётся одинаковым и не отражает содержимое сохранённой записи. Без подстановки заголовка уведомление выглядит обезличенным.
Перед вызовом sendMail
сервис собирает текст в шаблонной
строке JavaScript: значение заголовка
вставляют в середину фразы.
Отдельный движок шаблонов
не нужен, достаточно поля
text с готовой строкой.
Покажем на примере постов:
import { Injectable } from '@nestjs/common';
import { MailerService } from '@nestjs-modules/mailer';
@Injectable()
export class PostService {
mailerService: MailerService;
constructor(mailerService: MailerService) {
this.mailerService = mailerService;
}
async sendAboutTitle(
to: string,
subject: string,
title: string,
) {
const text = `Опубликован материал: ${title}.`;
return this.mailerService.sendMail({
to,
subject,
text,
});
}
}
Контроллер передаст заголовок вместе с адресом и темой:
import { Body, 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(
@Body('to') to: string,
@Body('subject') subject: string,
@Body('title') title: string,
) {
return this.postService.sendAboutTitle(
to,
subject,
title,
);
}
}
В WorkerService
сформируйте текст письма
со вставкой данных работника
и вызовите отправку из
WorkerController.