Вложение в Nest
Текстовое уведомление уже уходит,
но иногда нужно приложить короткий
файл: выписку, код или заметку.
Пока письмо состоит только
из text, дополнительные
данные клиент не получит
в одном сообщении.
У объекта для sendMail
есть массив attachments.
Каждый элемент описывает имя
файла и содержимое: строку
можно передать в поле
content без чтения
с диска.
Покажем на примере постов:
import { Injectable } from '@nestjs/common';
import { MailerService } from '@nestjs-modules/mailer';
@Injectable()
export class PostService {
mailerService: MailerService;
constructor(mailerService: MailerService) {
this.mailerService = mailerService;
}
async sendWithNote(to: string, subject: string) {
const note = 'Краткая памятка к материалу.';
return this.mailerService.sendMail({
to,
subject,
text: 'Материал и памятка во вложении.',
attachments: [
{
filename: 'note.txt',
content: note,
},
],
});
}
}
Контроллер по-прежнему передаёт получателя и тему:
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,
) {
return this.postService.sendWithNote(to, subject);
}
}
Добавьте в WorkerService
одно вложение из строки
в памяти и отправьте письмо
через WorkerController.