# Configuración de Email - Problema y Soluciones

## Problema Identificado

El correo de recuperación de contraseña no se está enviando debido a un error de verificación de certificados SSL:

```
error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed
Verify return code: 20 (unable to get local issuer certificate)
```

## Causa

El sistema Ubuntu no tiene los certificados CA actualizados necesarios para verificar el certificado SSL de Gmail.

## Soluciones

### Opción 1: Actualizar Certificados del Sistema (RECOMENDADO para PRODUCCIÓN)

Ejecutar en la terminal:

```bash
sudo apt update
sudo apt install --reinstall ca-certificates
sudo update-ca-certificates
```

Después de actualizar los certificados, limpiar el caché de Laravel:

```bash
cd /home/oem/web/qfs-back
php artisan config:clear
php artisan cache:clear
```

### Opción 2: Configuración para Desarrollo/Pruebas (NO RECOMENDADO para PRODUCCIÓN)

Si estás en un entorno de desarrollo y necesitas que funcione inmediatamente, puedes agregar estas variables al archivo `.env`:

```env
MAIL_VERIFY_PEER=false
MAIL_VERIFY_PEER_NAME=false
```

**⚠️ ADVERTENCIA:** Esta opción desactiva la verificación de certificados SSL, lo que reduce la seguridad. Solo úsala en entornos de desarrollo.

## Configuración Correcta del .env

Tu configuración actual tiene un error. En Laravel 12, la variable `MAIL_ENCRYPTION` ya no se usa. Aquí está la configuración correcta:

### ❌ Configuración Incorrecta (tu configuración actual):
```env
MAIL_MAILER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=desarrollo@cienciayjusticia.org
MAIL_PASSWORD=nhffrqncfcvgldoz
MAIL_ENCRYPTION=SSL  # ← Esta variable ya no existe en Laravel 12
MAIL_FROM_ADDRESS="no-responder@cienciayjusticia.org"
MAIL_FROM_NAME="${APP_NAME}"
```

### ✅ Configuración Correcta:
```env
MAIL_MAILER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=desarrollo@cienciayjusticia.org
MAIL_PASSWORD=nhffrqncfcvgldoz
MAIL_FROM_ADDRESS="no-responder@cienciayjusticia.org"
MAIL_FROM_NAME="${APP_NAME}"

# Opcionales (solo si actualizaste los certificados CA):
MAIL_VERIFY_PEER=true
MAIL_VERIFY_PEER_NAME=true

# O para desarrollo (NO recomendado en producción):
# MAIL_VERIFY_PEER=false
# MAIL_VERIFY_PEER_NAME=false
```

## Cambios en Laravel 12

En Laravel 12, el puerto 587 automáticamente usa STARTTLS (que es el estándar para Gmail). Ya no necesitas especificar `MAIL_ENCRYPTION`.

Si quisieras usar SSL puro (puerto 465), usarías:
```env
MAIL_PORT=465
MAIL_SCHEME=smtps
```

## Verificar Configuración

Después de hacer los cambios, puedes probar el envío de correo de dos formas:

### Opción 1: Desde el Panel de Administración (Acción en tabla)

1. Ve a `/admin/users` en tu navegador
2. En la lista de usuarios, haz clic en el menú de acciones (⋮) de cualquier usuario
3. Selecciona "Restablecer" (icono de llave 🔑)
4. Confirma la acción
5. Verifica que el correo llegue a la bandeja de entrada del usuario

### Opción 2: Desde la Página de Login (Flujo normal de usuario)

1. Ve a `/admin/login` en tu navegador
2. Haz clic en el enlace "¿Olvidaste tu contraseña?"
3. Ingresa el email del usuario
4. Envía el formulario
5. Verifica que el correo llegue a la bandeja de entrada

### Opción 3: Desde artisan tinker (Prueba técnica)

```bash
php artisan tinker
> Mail::raw('Prueba', function($m) { $m->to('test@example.com')->subject('Test'); });
```

## Archivos Modificados

1. `/home/oem/web/qfs-back/config/mail.php` - Se agregó la sección `stream` con opciones SSL configurables
2. `/home/oem/web/qfs-back/app/Filament/Resources/UserResource.php` - Se agregó la acción `ResetPasswordTableAction` en la tabla de usuarios

## Notas Adicionales

- La contraseña de aplicación de Gmail (`nhffrqncfcvgldoz`) es correcta (16 caracteres sin espacios)
- El correo de remitente está configurado correctamente
- La acción de reset de contraseña en `app/Filament/Actions/ResetPasswordTableAction.php` está funcionando correctamente
- El problema es únicamente la conexión SSL con Gmail

## Próximos Pasos

1. Ejecutar los comandos de la **Opción 1** (actualizar certificados)
2. Eliminar la línea `MAIL_ENCRYPTION=SSL` del archivo `.env`
3. Ejecutar `php artisan config:clear`
4. Probar con `php test-mail.php`
