124 lines
2.9 KiB
JavaScript
124 lines
2.9 KiB
JavaScript
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 = `
|
|
<p><strong>Nom :</strong> ${name}</p>
|
|
<p><strong>E-mail :</strong> ${email}</p>
|
|
<p><strong>Consentement :</strong> ${consentLabel}</p>
|
|
<p><strong>Message :</strong></p>
|
|
<p>${message.replace(/\n/g, "<br />")}</p>
|
|
`;
|
|
|
|
// 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;
|