import { Event, User } from "@repo/db"; import nodemailer from "nodemailer"; import { renderCourseCompleted } from "./mail-templates/CourseCompleted"; let transporter: nodemailer.Transporter | null = null; const initTransporter = () => { if (!process.env.MAIL_SERVER) return console.error("MAIL_SERVER is not defined"); if (!process.env.MAIL_PORT) return console.error("MAIL_PORT is not defined"); if (!process.env.MAIL_USER) return console.error("MAIL_USER is not defined"); if (!process.env.MAIL_PASSWORD) return console.error("MAIL_PASSWORD is not defined"); transporter = nodemailer.createTransport({ host: process.env.MAIL_SERVER, port: parseInt(process.env.MAIL_PORT), secure: true, // true for 465, false for other ports auth: { user: process.env.MAIL_USER, pass: process.env.MAIL_PASSWORD, }, }); transporter.on("error", (err) => { console.error("Mail occurred:", err); }); transporter.on("idle", () => { console.log("Mail Idle"); }); }; initTransporter(); export const sendCourseCompletedEmail = async ( to: string, user: User, event: Event, ) => { const emailHtml = await renderCourseCompleted({ user, event }); if (!transporter) { console.error("Transporter is not initialized"); return; } transporter.sendMail( { from: process.env.MAIL_USER, to, subject: `Congratulations ${user.firstname} on completing ${event.name}`, html: emailHtml, }, (error, info) => { if (error) { console.error("Error sending email:", error); } else { } }, ); };