39 lines
1.1 KiB
TypeScript
39 lines
1.1 KiB
TypeScript
|
import { Transporter, createTransport, TransportOptions } from "nodemailer";
|
||
|
|
||
|
export default class MailHelper {
|
||
|
private readonly transporter: Transporter;
|
||
|
|
||
|
constructor() {
|
||
|
this.transporter = createTransport({
|
||
|
host: process.env.MAIL_HOST,
|
||
|
port: Number(process.env.MAIL_PORT),
|
||
|
secure: (process.env.MAIL_SECURE as "true" | "false") == "true",
|
||
|
auth: {
|
||
|
user: process.env.MAIL_USERNAME,
|
||
|
pass: process.env.MAIL_PASSWORD,
|
||
|
},
|
||
|
} as TransportOptions);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @description send mail
|
||
|
* @param {string} target
|
||
|
* @param {string} subject
|
||
|
* @param {string} content
|
||
|
* @returns {Prmose<*>}
|
||
|
*/
|
||
|
async sendMail(target: string, subject: string, content: string): Promise<any> {
|
||
|
return new Promise((resolve, reject) => {
|
||
|
this.transporter
|
||
|
.sendMail({
|
||
|
from: `"${process.env.CLUB_NAME}" <${process.env.MAIL_USERNAME}>`,
|
||
|
to: target,
|
||
|
subject,
|
||
|
text: content,
|
||
|
})
|
||
|
.then((info) => resolve(info.messageId))
|
||
|
.catch((e) => reject(e));
|
||
|
});
|
||
|
}
|
||
|
}
|