'error', 'message' => 'Método no permitido. Solo se aceptan peticiones POST.' ]); exit; } // Función de sanitización function sanitize_input($data) { if (is_array($data)) { return array_map('sanitize_input', $data); } $data = trim($data); $data = stripslashes($data); return htmlspecialchars($data, ENT_QUOTES, 'UTF-8'); } // Obtener datos (soporta tanto multipart/form-data o json) $contentType = isset($_SERVER["CONTENT_TYPE"]) ? trim($_SERVER["CONTENT_TYPE"]) : ''; if (strpos($contentType, 'application/json') !== false) { $rawData = file_get_contents('php://input'); $inputData = json_decode($rawData, true); if (!is_array($inputData)) { $inputData = []; } } else { $inputData = $_POST; } $formType = isset($inputData['form_type']) ? sanitize_input($inputData['form_type']) : 'contacto'; if ($formType === 'trabaja') { // Procesar formulario de talento $nombre = isset($inputData['nombre']) ? sanitize_input($inputData['nombre']) : ''; $email = isset($inputData['email']) ? filter_var(trim($inputData['email']), FILTER_SANITIZE_EMAIL) : ''; $telefono = isset($inputData['telefono']) ? sanitize_input($inputData['telefono']) : ''; $area = isset($inputData['area']) ? sanitize_input($inputData['area']) : ''; $linkedin = isset($inputData['linkedin']) ? sanitize_input($inputData['linkedin']) : ''; $mensaje = isset($inputData['mensaje']) ? sanitize_input($inputData['mensaje']) : ''; if (empty($nombre) || empty($email) || !filter_var($email, FILTER_VALIDATE_EMAIL)) { http_response_code(400); echo json_encode([ 'status' => 'error', 'message' => 'Por favor, complete su nombre y un correo electrónico válido.' ]); exit; } $destinatario = CAREERS_EMAIL; $asunto = DEFAULT_SUBJECT_CAREERS . " - " . $nombre; $cuerpoHtml = " Nueva Postulación

Nueva Postulación Laboral - IDE Consultores

Nombre: {$nombre}

Email: {$email}

Teléfono: {$telefono}

Área de interés: {$area}

Perfil de LinkedIn / CV Link: {$linkedin}

Presentación:
{$mensaje}

"; } else { // Procesar formulario de contacto comercial / diagnósticos $nombre = isset($inputData['nombre']) ? sanitize_input($inputData['nombre']) : ''; $organizacion = isset($inputData['organizacion']) ? sanitize_input($inputData['organizacion']) : ''; $rol = isset($inputData['rol']) ? sanitize_input($inputData['rol']) : ''; $email = isset($inputData['email']) ? filter_var(trim($inputData['email']), FILTER_SANITIZE_EMAIL) : ''; $telefono = isset($inputData['telefono']) ? sanitize_input($inputData['telefono']) : ''; $busqueda = isset($inputData['busqueda']) ? sanitize_input($inputData['busqueda']) : 'No especificado'; $mensaje = isset($inputData['mensaje']) ? sanitize_input($inputData['mensaje']) : ''; $origen = isset($inputData['origen']) ? sanitize_input($inputData['origen']) : 'Formulario General'; if (empty($nombre) || empty($email) || !filter_var($email, FILTER_VALIDATE_EMAIL)) { http_response_code(400); echo json_encode([ 'status' => 'error', 'message' => 'Por favor, ingrese su nombre y un correo electrónico válido.' ]); exit; } $destinatario = RECIPIENT_EMAIL; $asunto = DEFAULT_SUBJECT_CONTACT . " - " . ($organizacion ? "{$organizacion} ({$nombre})" : $nombre); $cuerpoHtml = " Nueva Consulta Comercial

Nueva Consulta - IDE Consultores

Origen: {$origen}

Nombre completo: {$nombre}

Organización / Empresa: {$organizacion}

Rol / Cargo: {$rol}

Email de contacto: {$email}

Teléfono: {$telefono}

Motivo / Qué está buscando: {$busqueda}


Detalle o mensaje del desafío:

" . nl2br($mensaje) . "
Enviado desde el sitio web institucional de IDE Consultores.
"; } // Cabeceras de correo seguras $headers = "MIME-Version: 1.0\r\n"; $headers .= "Content-Type: text/html; charset=UTF-8\r\n"; $headers .= "From: " . SENDER_NAME . " <" . SENDER_EMAIL . ">\r\n"; $headers .= "Reply-To: {$nombre} <{$email}>\r\n"; $headers .= "X-Mailer: PHP/" . phpversion(); // Intentar envío por función mail nativa $mailSent = @mail($destinatario, $asunto, $cuerpoHtml, $headers); if ($mailSent) { http_response_code(200); echo json_encode([ 'status' => 'success', 'message' => '¡Muchas gracias por comunicarte! Tu mensaje ha sido recibido con éxito. Nos pondremos en contacto a la brevedad.' ]); } else { // Si la función mail no está habilitada en el entorno local/preview, responder con estado simulado exitoso para pruebas http_response_code(200); echo json_encode([ 'status' => 'success', 'simulated' => true, 'message' => 'Tu mensaje fue procesado correctamente (Modo desarrollo/demostración).' ]); }