Files
starr-philproperties/services/email.service.js
T
kennethobsequio 89acdfc239 push
pushy

Signed-off-by: Kenneth Obsequio <k80308392@gmail.com>
2026-06-28 11:29:07 +08:00

61 lines
2.0 KiB
JavaScript

/***********************************************************************************************************************************************************************
* File Name: email.service.js
* Type of Program: Service
* Description: Nodemailer-based email service.
* Provides:
* - sendOTPEmail() → sends a 6-digit OTP verification email
* - sendWelcomeEmail() → sent after successful email verification
* Author: rgrgogu
* Date Created: Oct. 6, 2025
***********************************************************************************************************************************************************************
* HOW TO USE:
* const emailService = require('../services/email.service');
* await emailService.sendOTPEmail(user.email, otp);
***********************************************************************************************************************************************************************/
const nodemailer = require('nodemailer');
const { emailTemplates } = require('../data/email_body.data')
const transporter = nodemailer.createTransport({
host: process.env.SMTP_HOST,
port: Number(process.env.SMTP_PORT),
auth: {
user: process.env.SMTP_USER,
pass: process.env.SMTP_PASS,
},
});
const sendEmail = async ({ to, type, data = {} }) => {
try {
const templateFn = emailTemplates[type];
if (!templateFn) {
throw new Error(`Email template "${type}" not found`);
}
const { subject, html } = templateFn(data);
return await new Promise((resolve, reject) => {
transporter.sendMail(
{
from: {
name: "STARR System",
address: "do-not-reply@philproperties.com",
},
to,
subject,
html,
},
(err, info) => {
if (err) return reject(err);
resolve(info);
}
);
});
} catch (err) {
throw new Error(err.message);
}
};
const ping = () => transporter.verify();
module.exports = { sendEmail, ping };