--- id: "INT-003" title: "Integracion Email Providers" type: "Integration" status: "Implemented" priority: "P0" provider: "SendGrid/SES/SMTP" category: "Notifications" multi_tenant: true version: "1.0.0" created_date: "2026-01-07" updated_date: "2026-01-10" --- # INT-003: Email Integration ## Metadata | Campo | Valor | |-------|-------| | Codigo | INT-003 | | Proveedor | SendGrid, AWS SES, SMTP | | Tipo | Notificaciones | | Estado | Implementado | | Multi-tenant | Si | | Fecha integracion | 2026-01-10 | --- **Documentacion completa:** Ver [SAAS-013-email.md](../01-modulos/SAAS-013-email.md) ## Resumen Integracion multi-proveedor para envio de correos electronicos. ## Proveedores Soportados - SendGrid - AWS SES - SMTP generico ## Caracteristicas - Configuracion por variables de entorno - Templates con MJML - Fallback entre proveedores - Tracking de envios (con provider support) ## Configuracion ```env # SendGrid SENDGRID_API_KEY=SG.xxx EMAIL_FROM=noreply@example.com # AWS SES AWS_SES_REGION=us-east-1 AWS_ACCESS_KEY_ID=... AWS_SECRET_ACCESS_KEY=... # SMTP SMTP_HOST=smtp.example.com SMTP_PORT=587 SMTP_USER=... SMTP_PASS=... ``` ## Rate Limits | Limite | Valor | Accion si excede | |--------|-------|------------------| | Requests/seg | 100 (SendGrid Free), 14 (SES) | Retry con backoff exponencial | | Emails/dia | 100 (SendGrid Free), 50000 (SES) | Cola de espera | ## Manejo de Errores | Codigo | Descripcion | Accion | |--------|-------------|--------| | 400 | Bad Request | Log + no retry | | 401 | Unauthorized | Renovar credenciales | | 429 | Rate Limited | Backoff exponencial | | 500 | Server Error | Retry con backoff | ## Fallbacks ### Estrategia Email Fallback | Escenario | Estrategia | |-----------|------------| | SendGrid no disponible | Fallback automatico a AWS SES | | AWS SES no disponible | Fallback a SMTP generico | | Todos fallan | Encolar en BullMQ para retry posterior | | Email rechazado | Log + no retry (direccion invalida) | ### Orden de Providers ```typescript // Configuracion por prioridad const providers = [ { name: 'sendgrid', priority: 1 }, { name: 'ses', priority: 2 }, { name: 'smtp', priority: 3 } ]; ``` ### Circuit Breaker - Umbral apertura: 5 fallos consecutivos por provider - Timeout semi-abierto: 60 segundos - Fallback: Siguiente provider en prioridad ## Multi-tenant - Credenciales: Por tenant (cada tenant puede configurar su proveedor de email) - Configuracion: Por tenant via tenant_config - Aislamiento: Prefijo tenant_id en todas las operaciones ## Testing ### Sandbox/Test Mode - SendGrid: Usar modo sandbox para no enviar emails reales - AWS SES: Sandbox mode con direcciones verificadas - Fixtures disponibles para testing unitario ## Monitoreo | Metrica | Descripcion | Alerta | |---------|-------------|--------| | Latencia | Tiempo de respuesta | >2s | | Errores | Tasa de errores | >1% | | Disponibilidad | Uptime del servicio | <99.9% | ## Referencias - Modulo relacionado: SAAS-013-email.md --- **Ultima actualizacion:** 2026-01-10 **Version:** 1.0.0