import nodemailer from "nodemailer" let transporter: nodemailer.Transporter | null = null async function getTransporter() { if (transporter) return transporter // In development, use Ethereal or console transport if (process.env.NODE_ENV === "development") { // Try to use Ethereal for testing try { const testAccount = await nodemailer.createTestAccount() transporter = nodemailer.createTransport({ host: "smtp.ethereal.email", port: 587, secure: false, auth: { user: testAccount.user, pass: testAccount.pass, }, }) return transporter } catch { // Fallback to console transport transporter = nodemailer.createTransport({ streamTransport: true, newline: "unix", buffer: true, }) return transporter } } // Production: use SMTP transporter = nodemailer.createTransport({ host: process.env.SMTP_HOST, port: parseInt(process.env.SMTP_PORT || "587"), secure: process.env.SMTP_PORT === "465", auth: { user: process.env.SMTP_USER, pass: process.env.SMTP_PASSWORD, }, }) return transporter } export async function sendNewPhotoEmail( recipientEmail: string, recipientName: string, photoId: string, uploaderName: string ) { const emailTransporter = await getTransporter() const baseUrl = process.env.NEXTAUTH_URL || "http://localhost:3000" const photoUrl = `${baseUrl}/photos/${photoId}` const mailOptions = { from: process.env.SMTP_FROM || "MirrorMatch ", to: recipientEmail, subject: "New Photo Ready to Guess!", html: `

MirrorMatch

New Photo Uploaded!

Hi ${recipientName},

${uploaderName} has uploaded a new photo for you to guess!

View Photo & Guess

Good luck! 🎯

`, text: ` Hi ${recipientName}, ${uploaderName} has uploaded a new photo for you to guess! View the photo and submit your guess here: ${photoUrl} Good luck! `.trim(), } try { const info = await emailTransporter.sendMail(mailOptions) if (process.env.NODE_ENV === "development") { console.log("Email sent (dev mode):") console.log("Preview URL:", nodemailer.getTestMessageUrl(info) || "Check console") console.log("To:", recipientEmail) console.log("Subject:", mailOptions.subject) } return info } catch (error) { console.error("Error sending email:", error) throw error } }