Descripción General
ServicioEmail gestiona el envío de todos los emails del sistema, incluyendo confirmaciones de reserva, cancelaciones, y notificaciones al dueño del restaurante. Utiliza la extensión Firebase Trigger Email que procesa automáticamente los documentos de la colección mail en Firestore.
Ubicación: lib/adaptadores/servicio_email.dart
Características Principales
- Emails de confirmación de reserva
- Notificaciones de cancelación (por cliente o restaurante)
- Notificaciones al dueño sobre nuevas reservas
- Templates HTML responsivos y profesionales
- Integración automática con Firebase Trigger Email Extension
- Mensajes en español con formato amigable
Arquitectura
¿Cómo Funciona?
- El servicio crea un documento en la colección
mailde Firestore - La extensión Firebase Trigger Email detecta el nuevo documento
- La extensión envía el email via SMTP
- El documento se actualiza con el estado de envío
Estructura del Documento en Firestore
Emails al Cliente
enviarReservaConfirmada
- Mensaje de bienvenida y confirmación
- Detalles completos de la reserva (fecha, hora, mesa, personas)
- Estado: “Confirmada” (fondo verde)
- Tips importantes (llegar 10 min antes, política de cancelación)
- Información de contacto del restaurante
enviarReservaCanceladaPorCliente
- Confirmación de cancelación
- Detalles de la reserva cancelada
- Estado: “Cancelada” (fondo rojo)
- Mensaje invitando a hacer una nueva reserva
enviarReservaCanceladaPorRestaurante
- Alerta de que el restaurante canceló la reserva (fondo amarillo)
- Detalles de la reserva
- Motivo de la cancelación (si se proporciona)
- Disculpas e invitación a reservar otra fecha
Emails al Dueño del Restaurante
enviarNuevaReservaAlDueno
- Alerta de nueva reserva
- Detalles completos de la reserva
- Información de contacto del cliente (email y teléfono)
enviarCancelacionClienteAlDueno
- Alerta de cancelación por cliente
- Detalles de la reserva cancelada
- Recordatorio de que la mesa quedó disponible
Métodos de Conveniencia
Estos métodos trabajan directamente con la entidadReserva para simplificar el envío de emails.
notificarReservaConfirmada
notificarReservaCanceladaPorCliente
notificarReservaCanceladaPorRestaurante
Templates HTML
Estructura del Template Base
Todos los emails usan el mismo template base con:- Header verde con el título del email
- Contenido con los detalles
- Footer con copyright y disclaimers
- Diseño responsivo (600px max-width)
- Colores del sistema: Verde (#27AE60) para header
- Tipografía Arial/sans-serif
- Compatible con clientes de email populares
Tabla de Detalles de Reserva
| Campo | Valor |
|---|---|
| 👤 Nombre | Juan Pérez |
| 🏪 Restaurante | Restaurante La Esquina |
| 📍 Mesa | Mesa 5 |
| 📅 Fecha | viernes 15 de marzo de 2024 |
| 🕐 Horario | 20:30 hs |
| 👥 Personas | 4 |
Formato de Fechas
_formatearFecha
lunes 15 de marzo de 2024sábado 25 de diciembre de 2024
_formatearHora
20:30 hs14:00 hs
Integración con Firebase
Requisitos Previos
- Instalar Firebase Trigger Email Extension
-
Configurar la extensión:
- SMTP Host (ej:
smtp.gmail.com) - SMTP Port (ej:
587) - SMTP Username
- SMTP Password
- Email From (ej:
[email protected])
- SMTP Host (ej:
-
Crear colección
mailen Firestore (se crea automáticamente al primer envío)
Configuración de SMTP
- Gmail
- SendGrid
- AWS SES
Estructura de la Colección mail
Monitoreo de Envíos
Puedes consultar el estado de los emails en Firestore:PENDING- En cola para envíoPROCESSING- EnviandoSUCCESS- Enviado exitosamenteERROR- Error en el envío
Logs y Debugging
El servicio imprime logs detallados en consola:Errores Comunes
Email no se envía
Email no se envía
Verificar:
- La extensión Firebase Trigger Email está instalada
- Las credenciales SMTP son correctas
- El documento se creó en la colección
mail - Revisar logs de Firebase Extensions en la consola
Error 'authentication-failed'
Error 'authentication-failed'
Solución:
- Verifica el username y password SMTP
- En Gmail, usa una App Password
- Verifica que el host y puerto sean correctos
Email cae en spam
Email cae en spam
Recomendaciones:
- Configura SPF, DKIM, y DMARC en tu dominio
- Usa un servicio SMTP profesional (SendGrid, AWS SES)
- Evita palabras spam en el asunto
- Incluye un enlace de unsubscribe
Mejores Prácticas
Validar Emails
Siempre valida que el contacto del cliente sea un email antes de enviar:
Manejo de Errores
Envuelve las llamadas en try-catch para manejar fallos:
No Bloquear UI
Los envíos de email son asíncronos. No esperes la confirmación para continuar:
Logs Informativos
El servicio ya incluye logs. Úsalos para debugging:
Ejemplo Completo: Flujo de Reserva
Ver También
- Servicio Autenticación - Para gestionar usuarios
- Servicio Verificación Cliente - Para verificación por SMS sin login
- Firebase Trigger Email Extension - Documentación oficial de la extensión