import express from "express"; import nodemailer from "nodemailer"; const router = express.Router(); const buildTransporterConfig = () => { const host = process.env.SMTP_HOST; const port = Number(process.env.SMTP_PORT || 587); const secure = typeof process.env.SMTP_SECURE === "string" ? process.env.SMTP_SECURE === "true" : port === 465; const user = process.env.SMTP_USER; const pass = process.env.SMTP_PASS; const baseConfig = { host, port, secure, }; if (user && pass) { baseConfig.auth = { user, pass }; } return baseConfig; }; router.post("/contact", async (req, res) => { const { name, email, subject, message, consent } = req.body || {}; console.info("📨 Requête contact reçue", { name, email, subject, consent, }); if (!name || !email || !subject || !message) { return res.status(400).json({ message: "Merci de compléter tous les champs requis avant d'envoyer votre message.", }); } const recipient = process.env.CONTACT_RECIPIENT || "sebastien@octopusdesign.fr"; const fromAddress = process.env.CONTACT_FROM || process.env.SMTP_FROM || process.env.SMTP_USER || "no-reply@octopusdesign.fr"; try { const transporter = nodemailer.createTransport(buildTransporterConfig()); const mailSubject = subject.trim() ? `[Site Octopus Design] ${subject.trim()}` : "Nouveau message depuis le site Octopus Design"; const consentLabel = consent ? "✅ Consentement donné" : "❌ Consentement non fourni"; const textBody = ` Nom : ${name} E-mail : ${email} Consentement : ${consentLabel} Message : ${message} `; const htmlBody = `

Nom : ${name}

E-mail : ${email}

Consentement : ${consentLabel}

Message :

${message.replace(/\n/g, "
")}

`; // Vérifie la connexion SMTP avant d'essayer d'envoyer await transporter.verify(); const mailOptions = { from: `"Octopus Design" <${fromAddress}>`, to: recipient, replyTo: email, subject: mailSubject, text: textBody, html: htmlBody, }; await transporter.sendMail(mailOptions); console.info( "✅ Email de contact envoyé avec succès", JSON.stringify( { to: recipient, replyTo: email, subject: mailSubject, }, null, 2 ) ); return res.status(200).json({ message: "Votre message a bien été envoyé. Merci pour votre confiance !", }); } catch (error) { console.error( "❌ Erreur lors de l'envoi du mail de contact :", error?.stack || error?.message || error ); return res.status(500).json({ message: "Impossible d'envoyer votre message pour le moment. Merci de réessayer plus tard.", }); } }); export default router;