Configuracion de Notificaciones por Email
Resumen
Este sistema envia notificaciones automaticas por email a di.barros@duocuc.cl
cada vez que:
- Se crea un producto o bodega
- Se actualiza un producto o bodega
- Se elimina un producto o bodega
Configuracion con SendGrid
Paso 1: Crear una Cuenta SendGrid
SendGrid ofrece un tier gratuito con 100 emails por dia, ideal para proyectos universitarios.
1.1 Registrarse en SendGrid
- Ve a: https://signup.sendgrid.com/
- Completa el formulario de registro
- Verifica tu email haciendo clic en el enlace de confirmacion
- Completa el perfil de tu cuenta
Paso 2: Generar una API Key
2.1 Crear la API Key
- Inicia sesion en: https://app.sendgrid.com/
- En el menu lateral izquierdo, ve a Settings → API Keys
- Haz clic en Create API Key
- Configura la key:
- API Key Name:
AgranelosInventario
- API Key Permissions: Selecciona Full Access
- API Key Name:
- Haz clic en Create & View
- Copia la API Key completa (comienza con
SG.
)
IMPORTANTE: Esta API Key solo se muestra una vez. Guardala en un lugar seguro.
Paso 3: Verificar un Sender Email
SendGrid requiere que verifiques el email desde el cual enviaras mensajes.
3.1 Single Sender Verification
- En SendGrid, ve a Settings → Sender Authentication
- En la seccion Single Sender Verification, haz clic en Get Started o Verify a Single Sender
- Completa el formulario:
- From Name:
Sistema Inventario Agranelos
- From Email Address: Tu email personal (puede ser Gmail, Outlook, etc.)
- Reply To: El mismo email
- Company Address: Direccion de DuocUC o tu direccion personal
- City: Santiago
- State: Metropolitana
- Zip Code: Codigo postal
- Country: Chile
- From Name:
- Haz clic en Create
- Revisa tu bandeja de entrada del email que proporcionaste
- Abre el email de SendGrid y haz clic en Verify Single Sender
- Confirma la verificacion en la pagina web
Una vez verificado, este email estara autorizado para enviar mensajes.
Paso 4: Configurar las Variables de Entorno
Opcion A: Para Desarrollo Local
Edita el archivo local.settings.json
:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"FUNCTIONS_WORKER_RUNTIME": "java",
"DB_HOST": "tu-servidor-postgresql",
"DB_PORT": "5432",
"DB_NAME": "inventario_agranelos",
"DB_USER": "postgres",
"DB_PASSWORD": "tu-password",
"DB_SSL_MODE": "disable",
"EVENT_GRID_ENDPOINT": "https://tu-eventgrid.eventgrid.azure.net/api/events",
"EVENT_GRID_KEY": "tu-event-grid-key",
"SENDGRID_API_KEY": "SG.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"SENDER_EMAIL": "tu-email-verificado@example.com",
"RECIPIENT_EMAIL": "di.barros@duocuc.cl"
}
}
Reemplaza:
SG.xxxx
con la API Key que generaste en el Paso 2tu-email-verificado@example.com
con el email que verificaste en el Paso 3di.barros@duocuc.cl
es el destinatario de las notificaciones
Opcion B: Para Azure (Produccion)
Configura las variables en Azure Portal o con Azure CLI:
# Configurar SendGrid API Key
az functionapp config appsettings set \
--name agranelos-inventario-functions \
--resource-group agranelos-inventario-rg \
--settings SENDGRID_API_KEY="SG.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
# Configurar Sender Email (email verificado en SendGrid)
az functionapp config appsettings set \
--name agranelos-inventario-functions \
--resource-group agranelos-inventario-rg \
--settings SENDER_EMAIL="tu-email-verificado@example.com"
# Configurar Recipient Email (destinatario de notificaciones)
az functionapp config appsettings set \
--name agranelos-inventario-functions \
--resource-group agranelos-inventario-rg \
--settings RECIPIENT_EMAIL="di.barros@duocuc.cl"
O desde Azure Portal:
- Ve a tu Function App
- Configuration → Application settings
- Agrega las 3 variables:
SENDGRID_API_KEY
,SENDER_EMAIL
,RECIPIENT_EMAIL
Paso 5: Verificar la Configuracion
5.1 Compilar el proyecto
mvn clean package
5.2 Iniciar Azure Functions localmente
mvn azure-functions:run
5.3 Crear un producto de prueba
curl -X POST http://localhost:7071/api/productos \
-H "Content-Type: application/json" \
-d '{
"nombre": "Producto de Prueba Email",
"descripcion": "Prueba de notificacion",
"precio": 1000,
"stock": 10,
"bodegaId": 1
}'
5.4 Verificar logs
Busca en los logs del terminal:
[INFO] === Evento ProductoCreado Recibido ===
[INFO] Event Type: Agranelos.Inventario.ProductoCreado
[INFO] Email enviado exitosamente a di.barros@duocuc.cl: Nuevo Producto Creado - Inventario Agranelos (Status: 202)
5.5 Revisar tu email
Revisa la bandeja de entrada de di.barros@duocuc.cl
. Deberias ver un email HTML como:
Asunto: Nuevo Producto Creado - Inventario Agranelos
Nuevo Producto Creado
Se ha creado un nuevo producto en el sistema de inventario:
• ID: 123
• Nombre: Producto de Prueba Email
• Fecha: 2025-10-05T14:30:00
Sistema de Inventario Agranelos
Tipos de Notificaciones
El sistema envia 6 tipos de emails:
Para Productos:
- ProductoCreado - Cuando se crea un nuevo producto
- ProductoActualizado - Cuando se actualiza un producto existente
- ProductoEliminado - Cuando se elimina un producto
Para Bodegas:
- BodegaCreada - Cuando se crea una nueva bodega
- BodegaActualizada - Cuando se actualiza una bodega existente
- BodegaEliminada - Cuando se elimina una bodega
Troubleshooting
Error: “SendGrid API Key no configurada”
Solucion: Verifica que hayas agregado la variable SENDGRID_API_KEY
en local.settings.json
o en las configuraciones de Azure Function App.
Error: “Email remitente no configurado”
Solucion: Verifica que hayas agregado la variable SENDER_EMAIL
con el email que verificaste en SendGrid.
Error: “401 Unauthorized”
Causas posibles:
- La API Key es incorrecta
- La API Key ha sido eliminada o revocada
- La API Key no tiene los permisos necesarios
Solucion:
- Genera una nueva API Key en SendGrid con Full Access
- Verifica que copiaste la key completa (comienza con
SG.
)
Error: “403 Forbidden”
Causa: El sender email no esta verificado en SendGrid.
Solucion:
- Ve a SendGrid → Settings → Sender Authentication
- Verifica el sender email siguiendo el proceso del Paso 3
- Asegurate de hacer clic en el enlace de verificacion del email
Error: Status Code 400 o superior
Solucion: Revisa los logs detallados. SendGrid devuelve el error en el body del response. Busca en los logs:
[WARNING] Error al enviar email. Status: 400, Body: {"errors":[...]}
Los emails no llegan
Soluciones:
- Revisa la carpeta de SPAM de
di.barros@duocuc.cl
- Verifica en el SendGrid Dashboard:
- Ve a https://app.sendgrid.com/
- Click en Activity
- Busca tus emails enviados y su estado
- Revisa los logs de Azure Functions para errores
- Verifica que
RECIPIENT_EMAIL
este correctamente configurado
Limite de envios alcanzado
Causa: El plan gratuito de SendGrid permite 100 emails por dia.
Solucion:
- Monitorea tu uso en el SendGrid Dashboard
- Para proyectos de produccion, considera actualizar a un plan pago
- Durante desarrollo, evita crear loops de eventos que generen multiples emails
Monitoreo con SendGrid Dashboard
SendGrid proporciona un dashboard completo para monitorear tus emails:
- Ve a https://app.sendgrid.com/
- Click en Activity
- Aqui puedes ver:
- Emails enviados
- Emails entregados
- Emails rebotados (bounced)
- Emails marcados como spam
- Tasa de apertura (si tienes tracking habilitado)
Seguridad
Buenas practicas implementadas:
- API Key en lugar de credenciales SMTP
- No incluye credenciales en el codigo fuente
- Las credenciales se configuran mediante variables de entorno
- El archivo
local.settings.json
esta en.gitignore
- Sender email verificado por SendGrid
NUNCA HAGAS COMMIT DE:
local.settings.json
con tus credenciales reales- Tu API Key de SendGrid
- Cualquier dato sensible
Limites del Plan Gratuito
SendGrid Free Tier incluye:
- 100 emails por dia
- Sin limite de validez
- No requiere tarjeta de credito
- Retencion de logs por 3 dias
- Acceso completo al dashboard de actividad
Referencias
- SendGrid Documentation
- SendGrid Java Library
- Single Sender Verification Guide
- SendGrid API Reference
Proximas Mejoras
Para un proyecto profesional, considera:
- Implementar templates HTML personalizados con branding
- Agregar logica de retry en caso de fallo temporal
- Implementar rate limiting para evitar exceder cuota diaria
- Agregar notificaciones agrupadas (digest diario)
- Configurar webhooks de SendGrid para tracking avanzado
-
Implementar diferentes destinatarios segun tipo de evento
- Implementar rate limiting para evitar spam