75 lines
2.4 KiB
TypeScript
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';
|
|
}
|
|
}
|