mirror of
https://github.com/docmost/docmost.git
synced 2026-05-17 14:54:05 +08:00
eefe63d1cd
* fix comments on the frontend * move jwt token service to its own module * other fixes and updates
42 lines
1.6 KiB
TypeScript
42 lines
1.6 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 = render(message.template, { pretty: true });
|
|
message.text = 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 = render(message.template, { pretty: true });
|
|
message.text = render(message.template, {
|
|
plainText: true,
|
|
});
|
|
delete message.template;
|
|
}
|
|
await this.emailQueue.add(QueueJob.SEND_EMAIL, message);
|
|
}
|
|
}
|