ff-admin-server/src/helpers/mailHelper.ts

57 lines
1.5 KiB
TypeScript
Raw Normal View History

2024-08-25 13:36:19 +02:00
import { Transporter, createTransport, TransportOptions } from "nodemailer";
import { Attachment } from "nodemailer/lib/mailer";
import SettingHelper from "./settingsHelper";
2024-08-25 13:36:19 +02:00
2024-12-28 18:03:33 +01:00
export default abstract class MailHelper {
private static transporter: Transporter;
static createTransport() {
2025-04-20 15:32:57 +02:00
this.transporter?.close();
this.transporter = createTransport({
host: SettingHelper.getSetting("mail.host"),
port: SettingHelper.getSetting("mail.port"),
2025-04-20 15:32:57 +02:00
secure: SettingHelper.getSetting("mail.secure"),
auth: {
user: SettingHelper.getSetting("mail.username"),
pass: SettingHelper.getSetting("mail.password"),
},
} as TransportOptions);
}
2024-08-25 13:36:19 +02:00
2025-04-20 15:32:57 +02:00
static initialize() {
SettingHelper.onSettingTopicChanged("mail", () => {
this.createTransport();
});
this.createTransport();
}
2024-08-25 13:36:19 +02:00
/**
* @description send mail
* @param {string} target
* @param {string} subject
* @param {string} content
* @returns {Prmose<*>}
*/
static async sendMail(
target: string,
subject: string,
content: string,
attach: Array<Attachment> = []
): Promise<any> {
2024-08-25 13:36:19 +02:00
return new Promise((resolve, reject) => {
this.transporter
.sendMail({
from: `"${SettingHelper.getSetting("club.name")}" <${SettingHelper.getSetting("mail.username")}>`,
2024-08-25 13:36:19 +02:00
to: target,
subject,
text: content,
2024-12-28 18:03:33 +01:00
html: content,
attachments: attach,
2024-08-25 13:36:19 +02:00
})
.then((info) => resolve(info.messageId))
.catch((e) => reject(e));
});
}
}