// Backend minimal Node.js pour traiter le formulaire de contact Hugo // Place ce fichier à la racine du projet ou dans un dossier backend/ // Nécessite: npm install express nodemailer cors require('dotenv').config(); const express = require('express'); const nodemailer = require('nodemailer'); const cors = require('cors'); const multer = require('multer'); const upload = multer(); const app = express(); const PORT = process.env.PORT || 3001; // Middleware app.use(cors()); // NE PAS utiliser express.urlencoded/json pour /contact, sinon req.body sera vide avec FormData // Configurer le transporteur SMTP depuis .env const transporter = nodemailer.createTransport({ host: process.env.SMTP_HOST, port: parseInt(process.env.SMTP_PORT, 10), secure: process.env.SMTP_SECURE === 'true', auth: { user: process.env.SMTP_USER, pass: process.env.SMTP_PASS } }); app.post('/contact', upload.none(), async (req, res) => { // Vérification de la présence de req.body if (!req.body) { console.log(req.body); return res.status(400).send('Aucune donnée reçue.'); } // Anti-robot honeypot if (req.body.website && req.body.website.trim() !== '') { return res.status(400).send('Bot détecté.'); } const { email, subject, message } = req.body; if (!email || !subject || !message) { return res.status(400).send('Champs manquants'); } try { await transporter.sendMail({ from: process.env.SMTP_USER, to: process.env.SMTP_USER, replyTo: email, subject: `Contact site: ${subject}`, text: `Email: ${email}\nSujet: ${subject}\nMessage:\n${message}` }); res.status(200).send('Message envoyé !'); } catch (err) { res.status(500).send("Erreur d'envoi: " + err.message); } }); app.listen(PORT, () => { console.log(`Serveur contact en écoute sur http://localhost:${PORT}`); });