@@ -14,21 +14,30 @@ const contactSchema = z.object({
1414} ) ;
1515
1616export async function POST ( req : NextRequest ) {
17+ // Configuración de CORS
18+ const headers = new Headers ( ) ;
19+ headers . set ( 'Access-Control-Allow-Origin' , '*' ) ; // O pon 'https://javiernuma.github.io' para más seguridad
20+ headers . set ( 'Access-Control-Allow-Methods' , 'POST, OPTIONS' ) ;
21+ headers . set ( 'Access-Control-Allow-Headers' , 'Content-Type' ) ;
22+
23+ // Manejo de preflight request (OPTIONS)
24+ if ( req . method === 'OPTIONS' ) {
25+ return new NextResponse ( null , { status : 200 , headers } ) ;
26+ }
27+
1728 try {
18- // Inicializamos Resend DENTRO de la función POST
1929 const resend = new Resend ( process . env . RESEND_API_KEY ) ;
20-
2130 const body = await req . json ( ) ;
2231
2332 if ( body . honeypot ) {
24- return NextResponse . json ( { message : 'Message received!' } , { status : 200 } ) ;
33+ return NextResponse . json ( { message : 'Message received!' } , { status : 200 , headers } ) ;
2534 }
2635
2736 const parsed = contactSchema . safeParse ( body ) ;
2837
2938 if ( ! parsed . success ) {
3039 const { errors } = parsed . error ;
31- return NextResponse . json ( { error : 'Datos inválidos.' , details : errors } , { status : 400 } ) ;
40+ return NextResponse . json ( { error : 'Datos inválidos.' , details : errors } , { status : 400 , headers } ) ;
3241 }
3342
3443 const { name, email, message } = parsed . data ;
@@ -40,19 +49,28 @@ export async function POST(req: NextRequest) {
4049 to : [ 'ing.javiernuma@gmail.com' ] ,
4150 subject : `Nuevo mensaje de ${ name } desde tu portafolio` ,
4251 html : emailHtml ,
43- reply_to : email , // <-- Corregido: reply_to en lugar de replyTo
52+ reply_to : email ,
4453 text : `Nombre: ${ name } \nEmail: ${ email } \nMensaje: ${ message } ` ,
4554 } ) ;
4655
4756 if ( error ) {
4857 console . error ( 'Error al enviar el correo:' , error ) ;
49- return NextResponse . json ( { error : 'Error al enviar el correo.' } , { status : 500 } ) ;
58+ return NextResponse . json ( { error : 'Error al enviar el correo.' } , { status : 500 , headers } ) ;
5059 }
5160
52- return NextResponse . json ( { message : 'Mensaje enviado con éxito.' , data } , { status : 200 } ) ;
61+ return NextResponse . json ( { message : 'Mensaje enviado con éxito.' , data } , { status : 200 , headers } ) ;
5362
5463 } catch ( error ) {
5564 console . error ( 'Error en la API:' , error ) ;
56- return NextResponse . json ( { error : 'Error interno del servidor.' } , { status : 500 } ) ;
65+ return NextResponse . json ( { error : 'Error interno del servidor.' } , { status : 500 , headers } ) ;
5766 }
67+ }
68+
69+ // Manejador para OPTIONS explícito
70+ export async function OPTIONS ( ) {
71+ const headers = new Headers ( ) ;
72+ headers . set ( 'Access-Control-Allow-Origin' , '*' ) ;
73+ headers . set ( 'Access-Control-Allow-Methods' , 'POST, OPTIONS' ) ;
74+ headers . set ( 'Access-Control-Allow-Headers' , 'Content-Type' ) ;
75+ return new NextResponse ( null , { status : 200 , headers } ) ;
5876}
0 commit comments