import { NextRequest, NextResponse } from 'next/server' import nodemailer from 'nodemailer' export async function POST(request: NextRequest) { try { const body = await request.json() const { name, email, company, service, message } = body // Validation des champs requis if (!name || !email || !service || !message) { return NextResponse.json( { error: 'Tous les champs requis doivent être remplis.' }, { status: 400 } ) } // Validation de l'email const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/ if (!emailRegex.test(email)) { return NextResponse.json( { error: 'Adresse email invalide.' }, { status: 400 } ) } // Configuration du transporteur SMTP OVH const transporter = nodemailer.createTransport({ host: process.env.SMTP_HOST || 'ssl0.ovh.net', port: parseInt(process.env.SMTP_PORT || '465'), secure: true, // true pour le port 465, false pour les autres ports auth: { user: process.env.SMTP_USER, // L'email d'envoi OVH pass: process.env.SMTP_PASSWORD, // Le mot de passe de l'email OVH }, }) // Configuration de l'email const mailOptions = { from: process.env.SMTP_FROM || process.env.SMTP_USER, to: 'contact@runlock.re', replyTo: email, subject: `[Runlock.re] Nouvelle demande de contact - ${service}`, html: `

Nouvelle demande de contact

Nom : ${name}
Email : ${email}
${company ? `
Entreprise : ${company}
` : ''}
Service : ${service}
Message :

${message.replace(/\n/g, '
')}
`, text: ` Nouvelle demande de contact - Runlock.re Nom: ${name} Email: ${email} ${company ? `Entreprise: ${company}\n` : ''} Service: ${service} Message: ${message} --- Cet email a été envoyé depuis le formulaire de contact de runlock.re Vous pouvez répondre directement à cet email pour contacter ${name} `, } // Envoi de l'email await transporter.sendMail(mailOptions) return NextResponse.json( { message: 'Votre message a été envoyé avec succès !' }, { status: 200 } ) } catch (error) { console.error('Erreur lors de l\'envoi de l\'email:', error) return NextResponse.json( { error: 'Une erreur est survenue lors de l\'envoi de votre message. Veuillez réessayer.' }, { status: 500 } ) } }