pos-be/src/modules/configuration/mail/domain/helpers/send-email.helper.ts

75 lines
2.4 KiB
TypeScript

import * as nodemailer from 'nodemailer';
import * as handlebars from 'handlebars';
import * as fs from 'fs';
import { TransactionPaymentType } from 'src/modules/transaction/transaction/constants';
import { InvoiceType } from 'src/modules/configuration/export/constants';
export async function sendEmail(receivers, invoiceType, attachment?) {
const smtpTransport = nodemailer.createTransport({
host: process.env.EMAIL_HOST,
port: process.env.EMAIL_POST,
auth: {
user: process.env.EMAIL_USER,
pass: process.env.EMAIL_TOKEN,
},
});
for (const receiver of receivers) {
try {
const templateName = getTemplate(receiver.payment_type, invoiceType);
const templatePath = `./assets/email-template/redesign/${templateName}.html`;
const templateSource = fs.readFileSync(templatePath, 'utf8');
const template = handlebars.compile(templateSource);
const htmlToSend = template(receiver);
const emailContext = {
from: process.env.EMAIL_SENDER ?? 'no-reply@weplayground.app',
to: receiver.email,
subject: invoiceType,
html: htmlToSend,
attachDataUrls: true,
attachments: [
{
filename: `${invoiceType}.pdf`,
content: attachment,
},
],
};
await new Promise((f) => setTimeout(f, 2000));
smtpTransport.sendMail(emailContext, function (err) {
if (err) {
console.log(err, `Error occurs on send to ${receiver.email}`);
} else {
console.log(`Email sent to ${receiver.email}`);
}
});
} catch (error) {
console.log(error, `Error occurs on send to ${receiver.email}`);
}
}
}
function getTemplate(transactionType, invoiceType) {
if (invoiceType == InvoiceType.BOOKING_DATE_CHANGE) {
return 'change-date-information';
} else if (invoiceType == InvoiceType.INVOICE_EXPIRED) {
return 'invoice-expired';
} else if (invoiceType == InvoiceType.REFUND_REQUEST) {
return 'refund-request';
} else if (invoiceType == InvoiceType.REFUND_CONFIRMATION) {
return 'refund-confirmation';
} else if (invoiceType == InvoiceType.PAYMENT_CONFIRMATION) {
return 'payment-confirmation';
} else if (
invoiceType == InvoiceType.BOOKING_INVOICE &&
transactionType != TransactionPaymentType.MIDTRANS
) {
return 'invoice-bank';
} else if (invoiceType == InvoiceType.BOOKING_INVOICE) {
return 'invoice-midtrans';
}
}