Files
chill_hugoplate/contact-backend.js

61 lines
1.8 KiB
JavaScript

// 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, sujet, message } = req.body;
if (!email || !sujet || !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: ${sujet}`,
text: `Email: ${email}\nSujet: ${sujet}\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}`);
});