- Renombrar 02-integraciones/ → 03-integraciones/ (resolver prefijo duplicado) - Renombrar 02-devops/ → 04-devops/ (resolver prefijo duplicado) - Renombrar architecture/ → 97-adr/ (agregar prefijo numerico) - Actualizar _MAP.md con nueva estructura y version 2.1.0 Estructura final: - 00-vision-general/ - 01-modulos/ - 02-especificaciones/ - 03-integraciones/ - 04-devops/ - 97-adr/ Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
135 lines
3.0 KiB
Markdown
135 lines
3.0 KiB
Markdown
---
|
|
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
|