# Configuración SMTP — CD-System
> Guía para configurar el envío de emails en cualquier proyecto
> Aplica a: formulario de contacto, notificaciones, newsletter

---

## Requisitos previos

Cada proyecto necesita:
1. Una cuenta de email creada en el cPanel del dominio (ej: `info@lacompaniadigital.com`)
2. Acceso al archivo `.env` del proyecto

---

## Paso 1: Crear la cuenta de email en cPanel

1. Entrar al cPanel del dominio
2. Ir a **Email Accounts** → **Create**
3. Crear: `info@dominio.com` (o `noreply@dominio.com`)
4. Anotar la contraseña

---

## Paso 2: Obtener datos SMTP del cPanel

En cPanel → **Email Accounts** → click en **Connect Devices** junto a la cuenta creada.

Los datos típicos de cPanel son:

| Campo | Valor |
|-------|-------|
| SMTP Host | `mail.tudominio.com` |
| SMTP Port | `465` (SSL) o `587` (TLS) |
| Username | `info@tudominio.com` (el email completo) |
| Password | La contraseña de la cuenta |
| Encryption | `ssl` (puerto 465) o `tls` (puerto 587) |

---

## Paso 3: Configurar el `.env`

Editar el archivo `.env` del proyecto y reemplazar las líneas de MAIL:

```env
MAIL_MAILER=smtp
MAIL_HOST=mail.tudominio.com
MAIL_PORT=465
MAIL_USERNAME=info@tudominio.com
MAIL_PASSWORD=tu_contraseña_aqui
MAIL_ENCRYPTION=ssl
MAIL_FROM_ADDRESS=info@tudominio.com
MAIL_FROM_NAME="Nombre del Proyecto"
```

### Ejemplo para Compañía Digital:

```env
MAIL_MAILER=smtp
MAIL_HOST=mail.lacompaniadigital.com
MAIL_PORT=465
MAIL_USERNAME=info@lacompaniadigital.com
MAIL_PASSWORD=contraseña_del_cpanel
MAIL_ENCRYPTION=ssl
MAIL_FROM_ADDRESS=info@lacompaniadigital.com
MAIL_FROM_NAME="Compañía Digital"
```

---

## Paso 4: Limpiar caché

Después de cambiar el `.env`:

```bash
php artisan config:clear
php artisan cache:clear
```

---

## Paso 5: Probar

1. Ir a `/contact` del sitio
2. Enviar un mensaje de prueba
3. Verificar:
   - El mensaje aparece en `/admin/contact-messages` ✓ (siempre)
   - El email llegó al inbox de `info@tudominio.com` ✓ (si SMTP OK)
   - La columna "Email" en el admin dice "Enviado" ✓

---

## Cómo funciona internamente

```
Formulario /contact
    ↓
HomepageController::contactStore()
    ↓
1. SIEMPRE guarda en tabla `contact_messages` (nunca se pierde)
    ↓
2. Intenta enviar email a config('site.contact.email')
   - Si SMTP configurado y funciona → email_sent = true
   - Si SMTP falla → loguea warning, email_sent = false
   - Si SMTP no configurado (MAIL_MAILER=log) → va al log, email_sent = true
    ↓
3. Responde al usuario (JSON si AJAX, redirect si form)
```

---

## Troubleshooting

### El email no llega

1. **Verificar `.env`**: ¿MAIL_MAILER está en `smtp` (no `log`)?
2. **Verificar credenciales**: ¿el email y contraseña son correctos?
3. **Verificar puerto**: probar con 587/TLS si 465/SSL no funciona
4. **Ver el log**: `storage/logs/laravel.log` — buscar "Contact email failed"
5. **Verificar spam**: revisar carpeta spam del email receptor

### El formulario no guarda

Esto no debería pasar — el guardado en DB es independiente del email. Si falla:
1. Verificar que la tabla `contact_messages` existe: `php artisan migrate`
2. Verificar logs de error en `storage/logs/laravel.log`

### Configuración por proyecto

Cada proyecto tiene su propio `.env` con su propio SMTP. No se comparten credenciales entre proyectos. El email de destino se lee de `config('site.contact.email')` que viene de la DB del proyecto.

---

## Para Juan

Cuando provisiones un proyecto nuevo:
1. El formulario de contacto funciona desde el día 1 (guarda en DB)
2. Para que envíe emails: configurar SMTP en el `.env` del proyecto
3. El email de destino se configura en el provision JSON (`contact.email`) o desde `/admin` → Modificar datos del sitio

---

*Actualizar cuando se implemente un servicio transaccional como Resend o SendGrid.*
