# Configuración SMTP - Sistema SPI-SP

## Estado: ✓ APLICADO Y VERIFICADO

La solución de envío de correos electrónicos ha sido integrada exitosamente al proyecto.

---

## 📋 Cambios Realizados

### 1. **Actualización de EmailService.php**
Se han agregado opciones de conexión SSL/TLS para evitar errores de certificados:

```php
$this->mailer->SMTPOptions = array(
    'ssl' => array(
        'verify_peer'       => false,
        'verify_peer_name'  => false,
        'allow_self_signed' => true
    )
);
```

Esto permite que el sistema funcione correctamente con servidores SMTP que tienen certificados autofirmados.

### 2. **Habilitación de Extensiones PHP**
Se han habilitado las siguientes extensiones en `php.ini`:

- ✓ `extension=openssl` - Necesaria para conexiones SMTP seguras (TLS/SSL)
- ✓ `extension_dir = "ext"` - Directorio de extensiones

**Ubicación del php.ini:**
- Windows: `C:\laragon\bin\php\php-8.4.12-nts-Win32-vs17-x64\php.ini`

### 3. **Configuración de Email**
El archivo [config/email.php](../config/email.php) contiene:

- **Host:** mail.titanix-ec.com
- **Puerto:** 587
- **Encriptación:** tls
- **Usuario:** mailing@titanix-ec.com
- **Nombre remitente:** Sistema SPI-SP

---

## ✅ Verificación de Configuración

### Probar el Envío de Correos

Ejecuta el script de prueba:

```powershell
& 'C:\laragon\bin\php\php-8.4.12-nts-Win32-vs17-x64\php.exe' 'C:\laragon\www\spi\test-email.php'
```

El script te pedirá:
1. Una dirección de correo de prueba
2. Enviará un correo de prueba a esa dirección
3. Mostrará los detalles de la conexión SMTP

### Resultado Esperado

```
[RESULTADO]:
✓ CONFIGURACIÓN SMTP VÁLIDA Y FUNCIONAL

Verifique el buzón para confirmar la recepción del correo.
```

---

## 📧 Uso en el Código

### Enviar Correo con PIN

```php
require_once 'services/EmailService.php';

$emailService = new EmailService();
$success = $emailService->sendPinEmail(
    'usuario@example.com',
    'Juan Pérez',
    '123456'
);

if ($success) {
    echo "Correo enviado exitosamente";
} else {
    echo "Error al enviar correo";
}
```

### Enviar Correo Personalizado

```php
$emailService = new EmailService();
$success = $emailService->sendEmail(
    'usuario@example.com',
    'Asunto del Correo',
    '<h1>Contenido HTML</h1>',
    'Contenido de texto plano'
);
```

---

## 🔧 Troubleshooting

### Error: "Extension missing: openssl"

**Solución:**
1. Abre el archivo `php.ini` en tu carpeta de PHP
2. Busca la línea `;extension=openssl`
3. Descomenta la línea (elimina el `;`)
4. Guarda el archivo

### Error: "Unable to locate extension file"

**Solución:**
1. En `php.ini`, asegúrate de que `extension_dir` apunte a la carpeta `ext`:
   ```ini
   extension_dir = "ext"
   ```
2. Verifica que el archivo `php_openssl.dll` existe en la carpeta `ext`

### Error: "SMTP authentication failed"

**Solución:**
1. Verifica que las credenciales en [config/email.php](../config/email.php) sean correctas
2. Asegúrate de que la contraseña no esté expirada
3. Si usas Gmail, utiliza una "Contraseña de Aplicación" en lugar de tu contraseña regular

### Error: "Connection timeout"

**Solución:**
1. Verifica que el servidor SMTP sea accesible desde tu red
2. Comprueba que el puerto 587 no esté bloqueado por el firewall
3. Intenta con el puerto 465 si el 587 no funciona
4. Cambia `encryption` a `ssl` si usas puerto 465

---

## 📝 Archivos Relacionados

- [config/email.php](../config/email.php) - Configuración de SMTP
- [services/EmailService.php](../services/EmailService.php) - Servicio de envío de correos
- [test-email.php](../test-email.php) - Script de prueba
- [controllers/AuthController.php](../controllers/AuthController.php) - Controlador que usa EmailService

---

## 🔒 Consideraciones de Seguridad

⚠️ **IMPORTANTE:**

1. **No guardes contraseñas en el repositorio**
   - Usa variables de entorno o archivos .env
   - El archivo `config/email.php` debe estar excluido de git

2. **Para Producción**
   ```php
   'username' => getenv('SMTP_USERNAME'),
   'password' => getenv('SMTP_PASSWORD'),
   ```

3. **Cambiar la contraseña regularmente**
   - Especialmente si usas contraseñas de aplicación

---

## 📊 Última Prueba Exitosa

- **Fecha:** 2026-03-17 04:10:18
- **Destinatario:** gavinocg@gmail.com
- **ID del correo:** 1vrpwW-0000000CK91-0r1U
- **Estado:** ✓ EXITOSO

---

## 📞 Soporte

Para más información sobre:
- **PHPMailer:** https://github.com/PHPMailer/PHPMailer
- **SMTP General:** https://www.php.net/manual/es/function.mail.php
