Some checks failed
Build & Deploy KLZ Cables / 🔍 Prepare Environment (push) Successful in 14s
Build & Deploy KLZ Cables / 🧪 Quality Assurance (push) Successful in 1m44s
Build & Deploy KLZ Cables / 🏗️ Build App (push) Failing after 1m54s
Build & Deploy KLZ Cables / 🏗️ Build Gatekeeper (push) Successful in 31s
Build & Deploy KLZ Cables / 🚀 Deploy (push) Has been skipped
Build & Deploy KLZ Cables / ⚡ PageSpeed (push) Has been skipped
Build & Deploy KLZ Cables / 🔔 Notifications (push) Successful in 2s
55 lines
1.5 KiB
TypeScript
55 lines
1.5 KiB
TypeScript
import nodemailer from 'nodemailer';
|
|
import { getServerAppServices } from '@/lib/services/create-services.server';
|
|
import { config } from '../config';
|
|
import { ReactElement } from 'react';
|
|
|
|
let transporterInstance: nodemailer.Transporter | null = null;
|
|
|
|
function getTransporter() {
|
|
if (transporterInstance) return transporterInstance;
|
|
|
|
if (!config.mail.host) {
|
|
throw new Error('MAIL_HOST is not configured. Please check your environment variables.');
|
|
}
|
|
|
|
transporterInstance = nodemailer.createTransport({
|
|
host: config.mail.host,
|
|
port: config.mail.port,
|
|
secure: config.mail.port === 465,
|
|
auth: {
|
|
user: config.mail.user,
|
|
pass: config.mail.pass,
|
|
},
|
|
});
|
|
|
|
return transporterInstance;
|
|
}
|
|
|
|
interface SendEmailOptions {
|
|
to?: string | string[];
|
|
subject: string;
|
|
html: string;
|
|
}
|
|
|
|
export async function sendEmail({ to, subject, html }: SendEmailOptions) {
|
|
const recipients = to || config.mail.recipients;
|
|
|
|
const mailOptions = {
|
|
from: config.mail.from,
|
|
to: recipients,
|
|
subject,
|
|
html,
|
|
};
|
|
|
|
const logger = getServerAppServices().logger.child({ component: 'mailer' });
|
|
|
|
try {
|
|
const info = await getTransporter().sendMail(mailOptions);
|
|
logger.info('Email sent successfully', { messageId: info.messageId, subject, recipients });
|
|
return { success: true, messageId: info.messageId };
|
|
} catch (error) {
|
|
logger.error('Error sending email', { error, subject, recipients });
|
|
return { success: false, error };
|
|
}
|
|
}
|