import { NextRequest, NextResponse } from 'next/server'; export async function POST(request: NextRequest) { try { const { name, email, message } = await request.json(); // Validate inputs if (!name || !email || !message) { return NextResponse.json( { error: 'Missing required fields' }, { status: 400 } ); } // Validate email format const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; if (!emailRegex.test(email)) { return NextResponse.json( { error: 'Invalid email address' }, { status: 400 } ); } const resendApiKey = process.env.RESEND_API_KEY; if (!resendApiKey) { console.error('[v0] RESEND_API_KEY not configured'); return NextResponse.json( { error: 'Email service not configured' }, { status: 500 } ); } // Send email via Resend const response = await fetch('https://api.resend.com/emails', { method: 'POST', headers: { 'Authorization': `Bearer ${resendApiKey}`, 'Content-Type': 'application/json', }, body: JSON.stringify({ from: 'Cloudrite Contact Form ', to: 'contact@cloudrite.co.nz', replyTo: email, subject: `New Contact Form Submission from ${name}`, html: `

New Contact Form Submission

Name: ${escapeHtml(name)}

Email: ${escapeHtml(email)}

Message:

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

`, }), }); if (!response.ok) { const error = await response.json(); console.error('[v0] Resend API error:', error); return NextResponse.json( { error: 'Failed to send email' }, { status: 500 } ); } return NextResponse.json( { success: true, message: 'Email sent successfully' }, { status: 200 } ); } catch (error) { console.error('[v0] Email route error:', error); return NextResponse.json( { error: 'Internal server error' }, { status: 500 } ); } } function escapeHtml(text: string): string { const map: { [key: string]: string } = { '&': '&', '<': '<', '>': '>', '"': '"', "'": ''', }; return text.replace(/[&<>"']/g, (char) => map[char]); }