# Fermenty — Configuracion de correo en servidor

## Objetivo
Dejar envio de correos funcional en produccion y verificarlo con una accion interna en admin.

## 0) Desarrollo local con Mailpit
Mailpit atrapa correos localmente sin enviarlos. Interfaz web en http://localhost:8025

### Instalar (una sola vez)
```bash
curl -sL https://raw.githubusercontent.com/axllent/mailpit/develop/install.sh | sudo bash
```

### Arrancar
```bash
mailpit &
```
Escucha SMTP en puerto 1025 y UI en http://localhost:8025

### Variables .env local
```env
MAIL_MAILER=smtp
MAIL_SCHEME=null
MAIL_HOST=127.0.0.1
MAIL_PORT=1025
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_FROM_ADDRESS=noreply@fermenty.local
MAIL_FROM_NAME="Fermenty"
```

Nota: Mailpit se detiene al cerrar la terminal. Para auto-iniciar, instalar como servicio systemd.

---

## 1) Variables .env de produccion
Produccion usa el buzon SMTP de IONOS (verificado con envio real el 2026-07-28).

```env
MAIL_MAILER=smtp
MAIL_SCHEME=null
MAIL_HOST=smtp.ionos.es
MAIL_PORT=587
MAIL_USERNAME=hello@fermenty.es
MAIL_PASSWORD=la_del_buzon
MAIL_FROM_ADDRESS=hello@fermenty.es
MAIL_FROM_NAME="Fermenty"
```

Notas:
- **REGLA IONOS: `MAIL_FROM_ADDRESS` identico a `MAIL_USERNAME`.** Con un FROM
  distinto (p. ej. `noreply@`) IONOS corta el envio — ese mismatch fue lo que
  tumbo el correo transaccional en julio de 2026 (y provoco un intento de
  migracion a Resend que quedo a medias con una API key de relleno).
- No dejar lineas `MAIL_*`/`RESEND_*` duplicadas: si una clave se repite en el
  `.env`, Laravel se queda con la ULTIMA aparicion.
- `MAIL_MAILER=log` no envia correos reales.
- Si algun dia el volumen supera el buzon, migrar a servicio dedicado: hay
  cuenta de Brevo (SMTP `smtp-relay.brevo.com`; requiere generar una
  "SMTP key" `xsmtpsib-...` — la contraseña maestra que muestra la pestaña
  SMTP ya no autentica).

## 2) DNS del dominio remitente
Si se usa un servicio dedicado (Brevo/Mailgun/Postmark), verifica el dominio y agrega:
- SPF
- DKIM
- DMARC (recomendado)

Sin esto, muchos correos irán a spam o seran rechazados.

## 3) Aplicar configuracion en servidor
Desde el root del proyecto:

```bash
cd /var/www/fermentyapp
php artisan config:clear
php artisan optimize:clear
php artisan config:cache
```

## 4) Probar envio con accion interna
Ruta interna (solo admin):
- `POST /acp/newsletter/test-mail`

UI:
- En panel admin -> newsletter aparece boton/formulario "Enviar test mail".
- Si no indicas email, usa el del admin autenticado.

## 5) Resultado esperado
- Mensaje flash: "Email de prueba enviado a ..."
- Correo recibido en bandeja de entrada

## 6) Si falla
Checklist rapido:
- Credenciales del buzon correctas y `MAIL_FROM_ADDRESS` = `MAIL_USERNAME` (IONOS)
- Sin claves MAIL_* duplicadas en el `.env` (gana la ultima)
- Dominio remitente verificado (solo servicios dedicados)
- Cache de config limpia (`php artisan config:clear`)
- Revisar logs de Laravel y panel del proveedor de correo

## 7) Seguridad
- Nunca subir `.env` al repositorio.
- Rotar claves si se compartieron por chat o capturas.

## 7) Identidad visual del correo (2026-08-29)

**Cabecera con el logotipo real.** `resources/views/emails/layout.blade.php` pinta el
mismo lockup que la web (tarro + «fermenty» con las burbujas sobre la y) como
PNG @2x: `public/img/brand/email/fermenty-lockup-light@2x.png` (464×138, se enseña a
232×69 sobre el verde #2C5234). Los clientes de correo no pintan SVG (Gmail lo
bloquea), de ahí el PNG. La URL es absoluta al sitio público (`config('app.web_url')`)
porque el correo se renderiza en cola, sin host de petición. Si cambia el logotipo,
regenerar desde el SVG oficial con resvg (ya está en `node_modules`):

```
node -e "const {Resvg}=require('@resvg/resvg-js');const fs=require('fs');const r=new Resvg(fs.readFileSync('public/img/brand/fermenty-lockup-light.svg','utf8'),{fitTo:{mode:'width',value:464}});fs.writeFileSync('public/img/brand/email/fermenty-lockup-light@2x.png',r.render().asPng())"
```

(`fermenty-mark-128.png` en la misma carpeta: el tarro solo, por si hace falta para
Gravatar/BIMI.)

**El «icono» junto al remitente.** Lo que enseña Gmail/Apple Mail al lado del nombre
no lo pone el correo: lo pone el cliente, y hay tres vías:
- **BIMI** (la oficial): registro DNS `default._bimi.fermenty.es` con el logotipo en
  SVG Tiny P/S + DMARC en `p=quarantine`/`reject`. Yahoo y Fastmail lo enseñan así;
  **Gmail y Apple Mail exigen además un certificado VMC** (≈1.000 €/año y marca
  registrada). Pendiente de decidir; el SVG del tarro habría que convertirlo a Tiny P/S.
- **Gravatar** de `hello@fermenty.es` con el tarro: lo enseñan Thunderbird y algunos
  clientes menores. Gratis, cinco minutos.
- **Emoji en el nombre del remitente**: `MAIL_FROM_NAME="Fermenty 🫙"` (puesto en
  local; en producción es una línea del `.env`). Se ve en todos los clientes salvo
  Windows 10/Outlook viejo, donde el tarro (Unicode 13) sale como recuadro. Los
  asuntos ya llevan emoji (🫧, 🫙, 🎁).

**Dónde se revisan los textos.** El cuerpo de cada correo es un blade en
`resources/views/emails/` (uno por correo; `layout.blade.php` es la carcasa común) y el
**asunto** va en `app/Mail/<Nombre>Mail.php` → `envelope()`. Se ven renderizados en
local en `http://fermenty.local:8084/dev/mail` (índice con los 16; se edita el blade y
se recarga). Los avisos de lote (`batch-notification`) toman el texto de las reglas
(`/acp` → reglas de notificación) y de `NotificationService`; la voz del mentor, de
`lang/es/motor.php`.
