mirror of
https://github.com/docmost/docmost.git
synced 2025-11-12 23:02:36 +10:00
42 lines
1.7 KiB
TypeScript
42 lines
1.7 KiB
TypeScript
import { Inject, Injectable } from '@nestjs/common';
|
|
import { MAIL_DRIVER_TOKEN } from './mail.constants';
|
|
import { MailDriver } from './drivers/interfaces/mail-driver.interface';
|
|
import { MailMessage } from './interfaces/mail.message';
|
|
import { EnvironmentService } from '../environment/environment.service';
|
|
import { InjectQueue } from '@nestjs/bullmq';
|
|
import { QueueName, QueueJob } from '../queue/constants';
|
|
import { Queue } from 'bullmq';
|
|
import { render } from '@react-email/render';
|
|
|
|
@Injectable()
|
|
export class MailService {
|
|
constructor(
|
|
@Inject(MAIL_DRIVER_TOKEN) private mailDriver: MailDriver,
|
|
private readonly environmentService: EnvironmentService,
|
|
@InjectQueue(QueueName.EMAIL_QUEUE) private emailQueue: Queue,
|
|
) {}
|
|
|
|
async sendEmail(message: MailMessage): Promise<void> {
|
|
if (message.template) {
|
|
// in case this method is used directly. we do not send the tsx template from queue
|
|
message.html = await render(message.template, { pretty: true });
|
|
message.text = await render(message.template, { plainText: true });
|
|
}
|
|
|
|
const sender = `${this.environmentService.getMailFromName()} <${this.environmentService.getMailFromAddress()}> `;
|
|
await this.mailDriver.sendMail({ from: sender, ...message });
|
|
}
|
|
|
|
async sendToQueue(message: MailMessage): Promise<void> {
|
|
if (message.template) {
|
|
// transform the React object because it gets lost when sent via the queue
|
|
message.html = await render(message.template, { pretty: true });
|
|
message.text = await render(message.template, {
|
|
plainText: true,
|
|
});
|
|
delete message.template;
|
|
}
|
|
await this.emailQueue.add(QueueJob.SEND_EMAIL, message);
|
|
}
|
|
}
|